Utför OMR och extrahera data med Java

Optical mark recognition (OMR) är en elektronisk process som gör det möjligt att läsa och fånga data som markerats av människor på en speciell typ av dokumentformulär. Detta dokumentformulär kan vara ett test eller en undersökning, bestående av bubblor eller kvadratiska inmatningar som fylls av användare. Vi kan enkelt utföra OMR-operationer på de skannade bilderna av sådana enkätformulär, frågeformulär eller testblad och läsa användarinmatningarna programmatiskt. I den här artikeln kommer vi att lära oss hur man utför OMR och extraherar data från en bild i Java.

Följande ämnen ska behandlas i den här artikeln:

  1. Java OMR API för att extrahera data från bild
  2. Extrahera data från en bild
  3. Utför OMR och extrahera data från flera bilder
  4. Extrahera OMR-data med tröskel
  5. Extrahera OMR-data med omräkning

Java OMR API för att extrahera data från bild

För att utföra OMR-operationer och extrahera data från bildformat som stöds, kommer vi att använda Aspose.OMR for Java API. Det gör det möjligt att designa, skapa och känna igen svarsblad, tester, MCQ-uppsatser, frågesporter, feedbackformulär, enkäter och omröstningar.

Klassen OmrEngine i API:t hanterar skapandet av mallen och bildbehandlingen. Metoden getTemplateProcessor(String templatePath) för den här klassen skapar instansen TemplateProcessor för bearbetning av mallar och bilder. Vi kan känna igen en bild med metoden recognizeImage(String imagePath). Den returnerar alla OMR-element som en klassinstans RecognitionResult. Metoden getCsv() för denna klass genererar en CSV-sträng med igenkänningsresultat. Metoden recalculate(RecognitionResult result, int recognitionThreshold) uppdaterar igenkänningsresultatet med hjälp av finjusterade parametrar.

Vänligen antingen ladda ner JAR för API:t eller lägg till följande pom.xml-konfiguration i en Maven-baserad Java-applikation.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
     <groupId>com.aspose</groupId>
     <artifactId>aspose-omr</artifactId>
     <version>19.12</version>
</dependency>

Extrahera data från en bild i Java

Vi behöver den förberedda OMR-mallen (.omr) tillsammans med bilden av användarfyllda formulär/ark för att utföra OMR-operationen. Vi kan utföra en OMR-operation på en bild och extrahera data genom att följa stegen nedan:

  1. Skapa först en instans av klassen OmrEngine.
  2. Anrop sedan metoden getTemplateProcessor() och initiera klassobjektet TemplateProcessor. Den tar OMR-mallens filsökväg som ett argument.
  3. Hämta sedan RecognitionResult-objektet genom att anropa metoden identifierImage() med bildsökvägen som argument.
  4. Efter det får du igenkänningsresultat som CSV-strängar med metoden getCsv().
  5. Spara slutligen CSV-resultatet som en CSV-fil på den lokala disken.

Följande kodexempel visar hur man extraherar OMR-data från en bild i CSV-format med Java.

// Detta kodexempel visar hur man utför OMR på en bild och extraherar data
// OMR-mallfilsökväg
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Sökväg till bildfil
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Känner igen bilden
RecognitionResult result = templateProcessor.recognizeImage(imagePath);

// Få resultat i CSV
String csvResult = result.getCsv();

// Spara CSV-fil
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Extrahera-data-från-en-bild-i-Java

Utför OMR och extrahera data från en bild i Java.

Vänligen ladda ned OMR-mallen som används i det här blogginlägget.

Utför OMR och extrahera data från flera bilder

Vi kan utföra OMR-operationer på flera bilder och extrahera data i en separat CSV-fil för varje bild genom att följa stegen som nämnts tidigare. Vi måste dock upprepa steg #3, 4 och 5 för alla bilderna en efter en.

Följande kodexempel visar hur man extraherar OMR-data från flera bilder med Java.

// Detta kodexempel visar hur man utför OMR på flera bilder och extraherar data
// Sökväg till arbetsmapp
String folderPath = "C:\\Files\\OMR\\";

// OMR-mallfilsökväg
String templatePath = folderPath + "Sheet.omr";

// Sökväg till bildfil
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Bearbeta bilder en efter en i en slinga
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = folderPath + image;

    // Känner igen bilden
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // Få resultat i CSV
    String csvResult = result.getCsv();

    // Spara CSV-fil
    PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
    wr.println(csvResult);
    System.out.println(csvResult);
}

Extrahera OMR-data med Threshold i Java

Vi kan utföra OMR-operationer med ett tröskelvärde (0 till 100) beroende på kraven. Ju högre tröskelvärdet är gör API:et mer strikt när det gäller att markera svaren. Följ stegen som nämnts tidigare för att utföra OMR med tröskeln. Men vi behöver bara anropa den överbelastade metoden identifiering(string, int32) i steg #3. Den tar bildfilens sökväg och tröskelvärdet som argument.

Följande kodexempel visar hur man utför OMR med tröskelvärde med Java.

// Detta kodexempel visar hur man utför OMR med therashold och extraherar data från en bild
// OMR-mallfilsökväg
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Sökväg till bildfil
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Tröskelvärde
int CustomThreshold = 40;

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Känner igen bilden
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Få resultat i CSV
String csvResult = result.getCsv();

// Spara CSV-fil
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);

Extrahera OMR-data med omräkning i Java

I vissa fall kan vi behöva räkna om OMR-resultaten med olika tröskelvärden. För detta ändamål kan vi konfigurera API:et för att automatiskt beräkna om med TemplateProcessor.recalculate()-metoden. Det gör det möjligt att bearbeta en bild flera gånger genom att ändra tröskelvärdet för att få önskat resultat. Vi kan utföra OMR-operation med omräkning genom att följa stegen nedan:

  1. Skapa först en instans av klassen OmrEngine.
  2. Anrop sedan metoden getTemplateProcessor() och initiera klassobjektet TemplateProcessor. Den tar OMR-mallens filsökväg som ett argument.
  3. Hämta sedan RecognitionResult-objektet genom att anropa metoden identifierImage() med bildsökvägen som argument.
  4. Därefter exporteras igenkänningsresultat som en CSV-sträng med metoden getCsv().
  5. Spara sedan CSV-resultatet som en CSV-fil på den lokala disken.
  6. Anropa sedan metoden recalculate(). Det tar RecognitionResult-objektet och tröskelvärdet som argument.
  7. Efter det resulterar exportigenkänning som en CSV-sträng med metoden getCsv().
  8. Spara slutligen CSV-resultatet som en CSV-fil på den lokala disken.

Följande kodexempel visar hur man utför OMR med omräkningsmetoden med Java.

// OMR-mallfilsökväg
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Sökväg till bildfil
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Tröskelvärde
int CustomThreshold = 40;

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Känner igen bilden
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Få resultat i CSV
String csvResult = result.getCsv();

// Spara CSV-fil
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);

// Räkna om
// Du kan tillämpa ett nytt tröskelvärde här
templateProcessor.recalculate(result, CustomThreshold);

// Få omräknade resultat i CSV
csvResult = result.getCsv();

// Spara omräknade resulterande CSV-fil
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);

Skaffa en gratis licens

Du kan få en gratis tillfällig licens för att prova biblioteket utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har vi lärt oss hur man:

  • utföra OMR-operation på bilder;
  • extrahera data i CSV-format programmatiskt;
  • tillämpa tröskelinställning medan du utför OMR på bilder;
  • räkna om OMR-resultat i en bilprocess med Java.

Dessutom, extrahera data från en bild i Java, kan du lära dig mer om Aspose.OMR för Java API med hjälp av dokumentationen. I händelse av oklarheter är du välkommen att kontakta oss på vårt gratis supportforum.

Se även