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 vorhandenesRecognitionResultan Ort und Stelle — liesOmrElementsdanach erneut, anstatt Referenzen aus der Zeit vor der Neuberechnung beizubehalten.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
| Die Antwort eines Elements ist eine leere Zeichenkette | Der Erkennungsschwellenwert war für diese Markierung zu streng, oder Recalculate() wurde mit einem unmöglich strengen Wert aufgerufen | Senken 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/Methode | Beschreibung |
|---|---|
RecognitionResult.OmrElements | Liste der erkannten IOmrElement-Einträge |
RecognitionResult.GetCsv / GetJson / GetXml | Exportiere das vollständige Ergebnis |
IOmrElement.GetAnswer / GetCsv | Erkannter Wert pro Element |