Java OMR Bibliothek

Benötigen Sie eine einfache, aber funktionsreiche Java-OMR Bibliothek? Möchten Sie optische Markierungen in gescannten Bildern erkennen? Probieren Sie Aspose.OMR for Java aus – eine Java Klassenbibliothek zur Durchführung von OMR-Operationen (Optical Mark Recognition) in Java-basierten Anwendungen. Lassen Sie uns einen kurzen Spaziergang durch die Funktionen der genannten Java API machen, um zu sehen, wie man optische Markierungen in einer Vielzahl von Bildformaten erkennt und von Menschen markierte Daten aus Umfragen, Fragebögen oder Tests mit MC-Fragen erfasst.

OMR-Vorlage mithilfe der Java-OMR Bibliothek dynamisch erstellen

Aspose.OMR for Java bietet einen vollständigen Satz von Funktionen, von der Erstellung der OMR-Vorlage bis zur Erkennung der optischen Markierungen zur Erfassung der Daten. Die API unterstützt das Generieren der OMR-Vorlagendatei oder des Bildes aus einfachen Textmarkierungen. Sie können einfach das Text-Markup der Vorlage an die API übergeben, und diese generiert die Vorlage für Sie. Das Folgende ist ein Beispieltext-Markup für eine OMR-Vorlage.

?text=Name__________________________________ Date____________

?grid=ID
sections_count=8
#What is Aspose.OMR main function?
() OCR () Capture human-marked data
() There is no main function () Enhance images
#Can Aspose.OMR process photos as well?
() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
(5) (4) (3) (2) (1)

?text= Answer sheet section
?answer_sheet=MainQuestions
elements_count=10
columns_count=5

?text=Sign________________________________

Sie können die Textmarkierung einfach in einer Textdatei mit der Erweiterung .txt speichern. Sobald Sie fertig sind, können Sie die Vorlage mit den folgenden Schritten generieren:

Das folgende Codebeispiel zeigt, wie die OMR-Vorlage mithilfe von Java aus Textmarkup generiert wird.

String outputDirectory = "GenerationResult";

String[] GenerationMarkups = new String[] { "Sheet.txt", "Grid.txt", "AsposeTest.txt" };
String[] GenerationMarkupsNoExt = new String[] { "Sheet", "Grid", "AsposeTest" };

OmrEngine engine = new OmrEngine();

for (int i = 0; i < GenerationMarkups.length; i++)
{
    // Rufen Sie die Vorlagengenerierung auf, die den Pfad zur TXT Datei mit Markup bereitstellt
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // bei Fehlern prüfen
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // Generierungsergebnis speichern: Bild und .omr-Vorlage
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

Ausgabe

Java OMR Bibliothek

Optische Markierungserkennung (OMR) in Bildern mit Java

Um OMR in Bildern durchzuführen, benötigen Sie nur zwei Dinge – die vorbereitete OMR-Vorlage (.omr) und die Bilder (vom Benutzer ausgefüllte Formulare/Blätter), um die OMR durchzuführen. Die API unterstützt die OMR für die folgenden Bildformate:

Im Folgenden sind die Schritte zum Durchführen von OMR in Bildern aufgeführt:

Das folgende Codebeispiel zeigt, wie optische Markierungen in Bildern mit Java erkannt werden.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// Initialisieren Sie die Engine und rufen Sie den Vorlagenprozessor ab, der den Pfad zur .omr Datei bereitstellt
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Bilder Schleife
for (int i = 0; i < UserImages.length; i++) {
    // Pfad zum zu erkennenden Bild
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // Bild erkennen und Ergebnis empfangen
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // Ergebnisse als CSV-String exportieren
    String csvResult = result.getCsv();

    String json = result.getJson();

    // CSV im Ausgabeordner speichern
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Verwenden eines benutzerdefinierten Erkennungsschwellenwerts für OMR

Sie können die OMR-Ergebnisse auch feinabstimmen, indem Sie einen benutzerdefinierten Schwellenwert zwischen 0 und 100 definieren. Durch Erhöhen des Schwellenwerts wird die API strenger bei der Erkennung der Antworten. Die Schwellenwerte können in der Methode TemplateProcessor.recognizeImage() als zweiter Parameter festgelegt werden, wie im folgenden Java-Codebeispiel gezeigt.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;

// Initialisieren Sie die Engine und rufen Sie den Vorlagenprozessor ab, der den Pfad zur .omr Datei bereitstellt
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Bilder Schleife
for (int i = 0; i < UserImages.length; i++) {
    // Pfad zum zu erkennenden Bild
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // Bild erkennen und Ergebnis empfangen
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // Ergebnisse als CSV-String exportieren
    String csvResult = result.getCsv();

    String json = result.getJson();

    // CSV im Ausgabeordner speichern
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Neuberechnung der OME-Ergebnisse

In manchen Fällen möchten Sie möglicherweise die OME-Ergebnisse mit anderen Schwellenwerten neu berechnen. Anstatt in solchen Fällen immer wieder TemplateProcessor.recognizeImage() aufzurufen, können Sie die API für die automatische Neuberechnung mit der methode TemplateProcessor.recalculate() konfigurieren, um die Effizienz der Bildverarbeitung zu verbessern. Das folgende Codebeispiel zeigt, wie die Neuberechnung der OMR-Ergebnisse implementiert wird.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// Init-Engine und Get-Template-Prozessor
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Legen Sie einen benutzerdefinierten Schwellenwert fest, der bei der Neuberechnung verwendet werden soll
// dieser Wert liegt im Bereich (0 bis 100)
// stellt den Prozentsatz der erforderlichen schwarzen Pixel auf dem Blasenbild dar, um erkannt zu werden
// dh je niedriger der Wert, desto weniger schwarze Pixel werden benötigt, damit die Blase als gefüllt gezählt wird und umgekehrt
int CustomThreshold = 40;

// Bilder Schleife
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

    // Bild erkennen
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // CSV-String exportieren
    String stringRes = result.getCsv();

    // CSV im Ausgabeordner speichern
    String outputName = UserImagesNoExt[i] + ".csv";

    PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Export done. Path: " + outputName);

    // Erkennung ergebnisse mit benutzerdefiniertem Schwellenwert neu berechnen
    templateProcessor.recalculate(result, CustomThreshold);

    // CSV-String exportieren
    stringRes = result.getCsv();

    // neu berechnete Ergebnisse speichern
    outputName = UserImagesNoExt[i] + "_recalculated.csv";

    wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Recalculated result export done. Path: " + outputName);
    System.out.println();
}

Falls Sie Fragen oder Fragen zu unserer Java-OMR Bibliothek haben, kontaktieren Sie uns über unser Forum für Fragen oder Fragen.

Siehe auch