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:
- Erstellen Sie ein OmrEngine objekt.
- Rufen Sie die Methode OmrEngine.generateTemplate() auf, die den Pfad der Markup-Textdatei akzeptiert.
- Speichern Sie die Vorlage mit der methode GenerationResult.save.
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
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:
- Erstellen Sie das Objekt OmrEngine.
- Erstellen Sie das Objekt TemplateProcessor und initialisieren Sie es mit dem Pfad der OMR-Vorlage.
- Erkennen Sie Bilder mit der methode TemplateProcessor.recognizeImage() und erhalten Sie Ergebnisse im CSV oder JSON-Format.
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.