Führen Sie OMR durch und extrahieren Sie Daten mit C#

Die optische Markierungserkennung (OMR) ermöglicht das Lesen und Erfassen von Daten, die auf einem speziellen Dokumententyp markiert sind. 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 oder Testbögen durchführen und die Benutzereingaben programmgesteuert in .NET-Anwendungen lesen. In diesem Artikel lernen wir, wie man OMR durchführt und Daten mit C# extrahiert.

Folgende Themen sollen in diesem Artikel behandelt werden:

C# OMR-API zum Durchführen von OMR und Extrahieren von Daten

Zur Durchführung von OMR-Operationen und zum Exportieren von Daten aus Bildern verwenden wir die Aspose.OMR for .NET API. Es ermöglicht das Entwerfen, Erstellen und Erkennen von Antwortbögen, Tests, MCQ-Papieren, Quizfragen, Feedback-Formularen, Umfragen und Stimmzetteln. Bitte downloaden Sie die DLL der API oder installieren Sie sie mit NuGet.

PM> Install-Package Aspose.OMR

Führen Sie OMR durch und extrahieren Sie Daten aus dem Bild

Um die OMR-Operation an einem Bild durchzuführen, benötigen wir die vorbereitete OMR-Vorlage (.omr) und das Bild (vom Benutzer ausgefüllte Formulare/Blätter), um die OMR durchzuführen. Wir können eine OMR-Operation an einem Bild durchführen und Daten extrahieren, indem wir die folgenden Schritte ausführen:

  1. Erstellen Sie zunächst eine Instanz der Klasse OmrEngine.
  2. Rufen Sie als Nächstes die Methode GetTemplateProcessor() auf und initialisieren Sie das Klassenobjekt TemplateProcessor. Als Argument wird der Dateipfad der OMR-Vorlage verwendet.
  3. Rufen Sie dann das Objekt RecognitionResult ab, indem Sie die Methode RecognizeImage() mit dem Bildpfad als Argument aufrufen.
  4. Rufen Sie danach mit der Methode GetCsv() die Erkennungsergebnisse als CSV-Strings ab.
  5. Speichern Sie abschließend das CSV-Ergebnis als CSV-Datei auf der lokalen Festplatte.

Das folgende Codebeispiel zeigt, wie Sie OMR für ein Bild ausführen und Daten im CSV-Format mit C# extrahieren.

// Dateipfad der OMR-Vorlage
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Bilddateipfad
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Führen Sie OMR durch und extrahieren Sie Daten aus Bildern

Führen Sie OMR durch und extrahieren Sie Daten aus Bildern.

Die im obigen Codebeispiel verwendete OMR-Vorlage kann hier heruntergeladen werden.

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 Sie OMR für mehrere Bilder ausführen und Daten im CSV-Format mit C# extrahieren.

// Dateipfad der OMR-Vorlage
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Dateipfad des Bilderordners
string imageFolderPath = @"D:\Files\OMR\";

// Verzeichnispfad ausgeben
string outputPath = @"D:\Files\OMR\";

// Zu bearbeitende Bilder
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();

// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Bilder einzeln verarbeiten
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Bild erkennen
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Erhalten Sie Ergebnisse in CSV
    string csvResult = result.GetCsv();

    // CSV-Datei speichern
    File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}

Die API bietet auch Funktionen zum Erkennen und Erkennen von Barcodes, die während des OMR-Vorgangs auf dem Bild verfügbar sind. Dies ist die Standardfunktion des OME-Vorgangs. Wir können OMR-Operationen durchführen und Barcodes erkennen, indem wir die zuvor erwähnten Schritte befolgen.

Holen Sie sich OMR-Ergebnisse mit Schwellenwert

Wir können den Schwellenwert anwenden, während wir OMR-Operationen an Bildern durchführen. Der Wert des Schwellenwerts könnte je nach Anforderung zwischen 0 und 100 liegen. Je höher der Schwellenwert, desto strenger wird die API in Bezug auf das 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 Bilddateipfad und den Schwellenwert als Argumente.

Das folgende Codebeispiel zeigt, wie OMR mit Schwellenwert mithilfe von C# ausgeführt wird.

// Dateipfad der OMR-Vorlage
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Bilddateipfad
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

OME-Vorgang mit Neuberechnung

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 automatisch mit der Methode TemplateProcessor.recalculate() 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:

  1. Erstellen Sie zunächst eine Instanz der Klasse OmrEngine.
  2. Rufen Sie als Nächstes die Methode GetTemplateProcessor() auf und initialisieren Sie das Klassenobjekt TemplateProcessor. Als Argument wird der Dateipfad der OMR-Vorlage verwendet.
  3. Initialisieren Sie dann das Stopwatch-Objekt und starten Sie den Timer.
  4. Rufen Sie als Nächstes das Objekt RecognitionResult ab, indem Sie die Methode RecognizeImage() mit dem Bildpfad als Argument aufrufen.
  5. Stoppen Sie dann den Timer und exportieren Sie die Erkennungsergebnisse als CSV-String mit der Methode GetCsv().
  6. Als nächstes speichern Sie das CSV-Ergebnis als CSV-Datei auf der lokalen Festplatte.
  7. Starten Sie dann den Timer mit der Methode Restart() neu.
  8. Rufen Sie als Nächstes die Methode Recalculate() auf. Als Argumente werden das RecognitionResult-Objekt und der Schwellenwert verwendet.
  9. Stoppen Sie danach den Timer und exportieren Sie die Erkennungsergebnisse als CSV-String mit der Methode GetCsv().
  10. 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 C# ausgeführt wird.

// Dateipfad der OMR-Vorlage
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Bilddateipfad
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Schwellwert
int CustomThreshold = 40;

// Initialisieren Sie die OME-Engine
OmrEngine engine = new OmrEngine();

// Holen Sie sich den Vorlagenprozessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Timer für Leistungsmessung
Stopwatch sw = Stopwatch.StartNew();

// Bild erkennen
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

sw.Stop();

// Erhalten Sie Ergebnisse in CSV
string csvResult = result.GetCsv();

// CSV-Datei speichern
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// Neu berechnen
templateProcessor.Neu berechnen(result, CustomThreshold);
sw.Stop();

// Erhalten Sie neu berechnete Ergebnisse in CSV
csvResult = result.GetCsv();

// Speichern Sie die neu berechnete resultierende CSV-Datei
File.WriteAllText(@"D:\Files\OMR\Sheet1_Neu berechnend.csv", 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:

  • Ausführen von OMR-Operationen an Bildern und Extrahieren von Daten im CSV-Format mit C#;
  • Schwellwerteinstellung anwenden, während OMR auf Bildern durchgeführt wird;
  • OMR-Ergebnisse in einem Automotive-Prozess programmgesteuert neu berechnen.

Außerdem können Sie mithilfe der Dokumentation mehr über Aspose.OMR für die .NET-API erfahren. Bei Unklarheiten können Sie uns gerne im Forum kontaktieren.

Siehe auch