Optische Markierungserkennung (OMR) ist ein elektronisches Verfahren, das das Lesen und Erfassen von Daten ermöglicht, die von Personen auf einem speziellen Dokumententyp markiert wurden. Dieses Dokumentenformular könnte ein Test oder eine Umfrage sein, die aus von Benutzern ausgefüllten Blasen- oder Quadrateingaben besteht. Wir können problemlos OMR-Operationen an den gescannten Bildern solcher Umfrageformulare, Fragebögen oder Testbögen durchführen und die Benutzereingaben programmgesteuert lesen. In diesem Artikel lernen wir, wie man OMR durchführt und Daten aus einem Bild in Java extrahiert.
Folgende Themen sollen in diesem Artikel behandelt werden:
- Java OMR API zum Extrahieren von Daten aus Bildern
- Daten aus einem Bild extrahieren
- OME durchführen und Daten aus mehreren Bildern extrahieren
- OME-Daten mit Schwellenwert extrahieren
- OME-Daten mit Neuberechnung extrahieren
Java-OMR-API zum Extrahieren von Daten aus Bildern
Um OMR-Operationen durchzuführen und Daten aus unterstützten Bildformaten zu extrahieren, verwenden wir die Aspose.OMR for Java API. Es ermöglicht das Entwerfen, Erstellen und Erkennen von Antwortbögen, Tests, MCQ-Papieren, Quizfragen, Feedback-Formularen, Umfragen und Stimmzetteln.
Die Klasse OmrEngine der API übernimmt die Erstellung der Vorlage und die Bildverarbeitung. Die Methode getTemplateProcessor(String templatePath) dieser Klasse erstellt die Instanz TemplateProcessor zum Verarbeiten von Vorlagen und Bildern. Wir können ein Bild mit der Methode recognizeImage(String imagePath) erkennen. Sie gibt alle OMR-Elemente als RecognitionResult-Klasseninstanz zurück. Die Methode getCsv() dieser Klasse generiert einen CSV-String mit Erkennungsergebnissen. Die Methode recalculate(RecognitionResult result, int RecognitionThreshold) aktualisiert das Erkennungsergebnis mithilfe fein abgestimmter Parameter.
Bitte laden Sie entweder die JAR der API herunter oder fügen Sie die folgende pom.xml-Konfiguration in einer Maven-basierten Java-Anwendung hinzu.
<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>
Extrahieren Sie Daten aus einem Image in Java
Wir benötigen die vorbereitete OMR-Vorlage (.omr) zusammen mit dem Bild der vom Benutzer ausgefüllten Formulare/Blätter, um die OMR-Operation durchzuführen. Wir können eine OMR-Operation an einem Bild durchführen und Daten extrahieren, indem wir die folgenden Schritte ausführen:
- Erstellen Sie zunächst eine Instanz der OmrEngine-Klasse.
- Rufen Sie als Nächstes die Methode getTemplateProcessor() auf und initialisieren Sie das Klassenobjekt TemplateProcessor. Als Argument wird der Dateipfad der OMR-Vorlage verwendet.
- Rufen Sie dann das Objekt RecognitionResult ab, indem Sie die Methode recognizImage() mit dem Bildpfad als Argument aufrufen.
- Danach erhalten Sie die Erkennungsergebnisse als CSV-Strings mit der Methode getCsv().
- Speichern Sie abschließend das CSV-Ergebnis als CSV-Datei auf der lokalen Festplatte.
Das folgende Codebeispiel zeigt, wie OMR-Daten aus einem Bild im CSV-Format mit Java extrahiert werden.
// Dieses Codebeispiel zeigt, wie Sie OMR für ein Bild durchführen und Daten extrahieren
// Dateipfad der OMR-Vorlage
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Bilddateipfad
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();
// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Bild erkennen
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Erhalten Sie Ergebnisse in CSV
String csvResult = result.getCsv();
// CSV-Datei speichern
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Bitte laden Sie die in diesem Blogpost verwendete OMR-Vorlage herunter.
Führen Sie OMR durch und extrahieren Sie Daten aus mehreren Bildern
Wir können OMR-Operationen für mehrere Bilder durchführen und Daten in einer separaten CSV-Datei für jedes Bild extrahieren, indem wir die zuvor erwähnten Schritte befolgen. Wir müssen jedoch die Schritte 3, 4 und 5 für alle Bilder nacheinander wiederholen.
Das folgende Codebeispiel zeigt, wie OMR-Daten aus mehreren Bildern mit Java extrahiert werden.
// Dieses Codebeispiel zeigt, wie Sie OMR für mehrere Bilder durchführen und Daten extrahieren
// Pfad des Arbeitsordners
String folderPath = "C:\\Files\\OMR\\";
// Dateipfad der OMR-Vorlage
String templatePath = folderPath + "Sheet.omr";
// Bilddateipfad
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();
// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Verarbeiten Sie Bilder einzeln in einer Schleife
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// Bild erkennen
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Erhalten Sie Ergebnisse in CSV
String csvResult = result.getCsv();
// CSV-Datei speichern
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
OMR-Daten mit Schwellenwert in Java extrahieren
Je nach Anforderung können wir OMR-Operationen mit einem Schwellwert (0 bis 100) durchführen. Je höher der Wert des Schwellenwerts ist, desto strenger wird die API beim Hervorheben der Antworten. Bitte befolgen Sie die zuvor erwähnten Schritte, um OMR mit dem Schwellenwert durchzuführen. Wir müssen jedoch nur die überladene Methode recognizeImage(string, int32) in Schritt 3 aufrufen. Sie nimmt den Pfad der Bilddatei und den Schwellenwert als Argumente.
Das folgende Codebeispiel zeigt, wie OMR mit Schwellenwert mithilfe von Java ausgeführt wird.
// Dieses Codebeispiel zeigt, wie Sie OMR mit therahold durchführen und Daten aus einem Bild extrahieren
// Dateipfad der OMR-Vorlage
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Bilddateipfad
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Schwellwert
int CustomThreshold = 40;
// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();
// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Bild erkennen
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Erhalten Sie Ergebnisse in CSV
String csvResult = result.getCsv();
// CSV-Datei speichern
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
OMR-Daten mit Neuberechnung in Java extrahieren
In bestimmten Fällen müssen wir die OMR-Ergebnisse möglicherweise mit anderen Schwellenwerten neu berechnen. Zu diesem Zweck können wir die API so konfigurieren, dass sie mithilfe der Methode TemplateProcessor.recalculate() automatisch neu berechnet wird. Es ermöglicht die mehrfache Verarbeitung eines Bildes durch Ändern der Schwellenwerteinstellung, um das gewünschte Ergebnis zu erzielen. Wir können den OME-Vorgang mit Neuberechnung durchführen, indem wir die folgenden Schritte ausführen:
- Erstellen Sie zunächst eine Instanz der OmrEngine-Klasse.
- Rufen Sie als Nächstes die Methode getTemplateProcessor() auf und initialisieren Sie das Klassenobjekt TemplateProcessor. Als Argument wird der Dateipfad der OMR-Vorlage verwendet.
- Rufen Sie dann das Objekt RecognitionResult ab, indem Sie die Methode recognizImage() mit dem Bildpfad als Argument aufrufen.
- Als Nächstes exportieren Sie die Erkennungsergebnisse als CSV-String mit der Methode GetCsv().
- Speichern Sie dann das CSV-Ergebnis als CSV-Datei auf der lokalen Festplatte.
- Rufen Sie als Nächstes die Methode recalculate() auf. Als Argumente werden das RecognitionResult-Objekt und der Schwellenwert verwendet.
- Exportieren Sie danach die Erkennungsergebnisse als CSV-String mit der Methode getCsv().
- Speichern Sie abschließend das CSV-Ergebnis als CSV-Datei auf der lokalen Festplatte.
Das folgende Codebeispiel zeigt, wie OMR mit der Neuberechnungsmethode unter Verwendung von Java durchgeführt wird.
// Dateipfad der OMR-Vorlage
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Bilddateipfad
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Schwellwert
int CustomThreshold = 40;
// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();
// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Bild erkennen
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Erhalten Sie Ergebnisse in CSV
String csvResult = result.getCsv();
// CSV-Datei speichern
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// Neu berechnen
// Hier können Sie einen neuen Schwellenwert anwenden
templateProcessor.recalculate(result, CustomThreshold);
// Erhalten Sie neu berechnete Ergebnisse in CSV
csvResult = result.getCsv();
// Speichern Sie die neu berechnete resultierende CSV-Datei
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);
Holen Sie sich eine kostenlose Lizenz
Sie können eine kostenlose temporäre Lizenz erhalten, um die Bibliothek ohne Evaluierungseinschränkungen zu testen.
Fazit
In diesem Artikel haben wir gelernt, wie man:
- OME-Operation an Bildern durchführen;
- Daten im CSV-Format programmgesteuert extrahieren;
- Schwellwerteinstellung anwenden, während OMR an Bildern durchgeführt wird;
- OMR-Ergebnisse in einem Automotive-Prozess mit Java neu berechnen.
Neben dem Extrahieren von Daten aus einem Bild in Java können Sie mithilfe der Dokumentation mehr über Aspose.OMR für die Java-API erfahren. Bei Unklarheiten können Sie sich gerne in unserem kostenlosen Support-Forum an uns wenden.