Das Erkennungsmodell

Das Erkennungsmodell

omr.model definiert die Struktur eines Erkennungsergebnisses: RecognitionResult und die IOmrElement Schnittstelle.


RecognitionResult

TemplateProcessor.Recognize() liefert ein RecognitionResult. Es stellt OmrElements (eine Liste erkannter Elemente) bereit, sowie ImagePath, Images, PageName und TemplateName. Auf Ebene des Ergebnisses exportieren GetCsv(encoding), GetJson(encoding) und GetXml(encoding) das gesamte Ergebnis; jede hat eine passende ...AsStream-Variante, die ein BytesIO zurückgibt.

from omr.api import OmrEngine, FormValidationLogic

engine = OmrEngine()
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)
result = processor.Recognize("scan.png")
print(result.GetJson())

IOmrElement

Jeder Eintrag in RecognitionResult.OmrElements implementiert IOmrElement: QuestionName und SortWeight identifizieren das Element, und GetAnswer() / GetCsv() lesen dessen erkannten Wert.

for element in result.OmrElements:
    print(element.QuestionName, element.GetAnswer())

Tipps und bewährte Verfahren

  • Lese QuestionName, um ein erkanntes Element wieder der Frage zuzuordnen, aus der es stammt, anstatt sich auf die Listenreihenfolge zu verlassen.
  • Verwende die Exportvarianten ...AsStream (GetCsvAsStream, GetJsonAsStream, GetXmlAsStream), wenn du Ergebnisse an ein Ziel außerhalb des Dateisystems schreibst.
  • TemplateProcessor.Recalculate() aktualisiert ein vorhandenes RecognitionResult an Ort und Stelle — lies OmrElements danach erneut, anstatt Referenzen aus der Zeit vor der Neuberechnung beizubehalten.

Häufige Probleme

ProblemUrsacheLösung
Die Antwort eines Elements ist eine leere ZeichenketteDer Erkennungsschwellenwert war für diese Markierung zu streng, oder Recalculate() wurde mit einem unmöglich strengen Wert aufgerufenSenken Sie den Schwellenwert, oder übergeben Sie -100 an Recognize() für die automatische Kalibrierung

FAQ

Was gibt GetAnswer() für eine nicht markierte Frage zurück?

Eine leere Zeichenkette — die gleiche Darstellung, die Recalculate() erzeugt, wenn ein strengerer Schwellenwert jede Markierung verwirft.

Kann ich nur einige Elemente exportieren, anstatt das gesamte Ergebnis?

RecognitionResult’s GetCsv/GetJson/GetXml exportieren das vollständige Ergebnis; filtern Sie OmrElements zuerst selbst, wenn Sie ein Teilset benötigen.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
RecognitionResult.OmrElementsListe der erkannten IOmrElement-Einträge
RecognitionResult.GetCsv / GetJson / GetXmlExportiere das vollständige Ergebnis
IOmrElement.GetAnswer / GetCsvErkannter Wert pro Element

Siehe auch

 Deutsch