Rdzeń API
Rdzeń API
omr.api jest małą powierzchnią, z którą większość kodu wchodzi w interakcję: OmrEngine, TemplateProcessor, ImageCollection oraz wyliczenie FormValidationLogic.
OmrEngine
OmrEngine jest stateless factory. Generate(source, settings) przyjmuje źródło markup-DSL lub drzewo TemplateConfig i zwraca GenerationResult. GetTemplateProcessor(templateSource, validationLogic) ładuje wcześniej zapisany .omr ścieżkę pliku i zwraca powiązany TemplateProcessor; źródło strumienia zamiast tego przyjmuje argument kodowania tekstu przed logiką walidacji.
from omr.api import OmrEngine, FormValidationLogic
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)FormValidationLogic
Kontroluje zachowanie silnika, gdy reguła walidacji szablonu — np. ograniczenie wielokrotnego wyboru — zostaje złamana podczas rozpoznawania: Ignore (domyślnie) cicho akceptuje naruszenie, Exception podnosi wyjątek, a undefined jest zerową wartością wyliczenia. Sprawdzenie dotyczy tylko pytań, których Multiselect jest wyłączone; GlobalPageSettings.Multiselect domyślnie jest włączone.
TemplateProcessor
Recognize(source, recognitionThreshold) rozpoznaje jeden zeskanowany obraz. RecognizeFolder(folderPath, recognitionThreshold) rozpoznaje każdy obraz w folderze w jednym wywołaniu. Recalculate(result, recognitionThreshold) ponownie ocenia już rozpoznany wynik przy innym progu, bez ponownego odczytywania obrazu źródłowego.
ImageCollection
Mapowanie tylko do dopisywania, rozróżniające wielkość liter, z nazwy na surowe bajty obrazu. Add(name, image) rejestruje obraz, Contains(name) sprawdza, czy nazwa jest już zarejestrowana, Count podaje, ile jest zarejestrowanych, a as_dict() zwraca mapę bazową. Znaczniki mogą odwoływać się do zarejestrowanego obrazu po nazwie (?image=<name>) zamiast ścieżki systemu plików.
from omr.api import ImageCollection
images = ImageCollection()
with open("logo.png", "rb") as f:
images.Add("logo.png", f.read())Wskazówki i najlepsze praktyki
- Przekaż
FormValidationLogic.Exceptionpodczas rozwoju, aby natychmiast ujawnić naruszenia wielokrotnego wyboru zamiast cicho je ignorować (działa tylko dla pytań z wyłączonymMultiselect). Recalculate()jest tańszy niż ponowne skanowanie — użyj go, gdy trzeba zmienić tylko próg rozpoznawania.- Nazwy
ImageCollectionrozróżniają wielkość liter; rejestracja tej samej nazwy dwa razy powoduje błąd zamiast cichego nadpisania. Generate()zgłasza większość błędów przezGenerationResult.ErrorCode/ErrorMessagezamiast podnosić wyjątek — sprawdźErrorCodeprzed zaufaniem wygenerowanemu wynikowi.
Częste problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Rejestrowanie obrazu dwukrotnie wywołuje | ImageCollection.Add nie zezwala na powielone nazwy | Sprawdź najpierw Contains(name), albo użyj unikalnej nazwy dla każdego obrazu |
| Niedozwolona odpowiedź wielokrotnego wyboru jest przyjmowana bez ostrzeżenia | Domyślny FormValidationLogic.Ignore nie wywołuje | Przekaż FormValidationLogic.Exception do GetTemplateProcessor() i zapewnij, że Multiselect pytania jest wyłączone |
FAQ
Czy OmrEngine jest bezpieczne do ponownego użycia w wielu szablonach?
Tak — jest bezstanowe; każde wywołanie Generate()/GetTemplateProcessor() jest niezależne.
Jak rozpoznać cały folder skanów jednocześnie?
Wywołaj TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) zamiast samodzielnie iterować Recognize().
Podsumowanie API Reference
| Klasa/Metoda | Opis |
|---|---|
OmrEngine.Generate | Renderuje szablon do obrazu strony + deskryptor .omr |
OmrEngine.GetTemplateProcessor | Ładuje deskryptor .omr do rozpoznawania |
TemplateProcessor.Recognize / RecognizeFolder / Recalculate | Punkty wejścia rozpoznawania |
ImageCollection.Add / Contains / as_dict | Rejestr obrazów w pamięci dla znaczników |
FormValidationLogic | Enum zachowania naruszenia walidacji |