Ядро API
Ядро API
omr.api — це невелика поверхня, з якою взаємодіє більшість коду: OmrEngine, TemplateProcessor, ImageCollection і FormValidationLogic enum.
OmrEngine
OmrEngine — це безстанова фабрика. Generate(source, settings) приймає джерело markup-DSL або дерево TemplateConfig і повертає GenerationResult. GetTemplateProcessor(templateSource, validationLogic) завантажує раніше збережений шлях до файлу .omr і повертає прив’язаний TemplateProcessor; джерело потоку натомість приймає аргумент text-encoding перед логікою валідації.
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
Керує поведінкою движка, коли під час розпізнавання порушується правило валідації шаблону — наприклад, обмеження багатовибіркового —: Ignore (за замовчуванням) тихо приймає порушення, Exception піднімає помилку, а undefined є нульовим значенням enum. Перевірка застосовується лише до питань, у яких Multiselect вимкнено; GlobalPageSettings.Multiselect за замовчуванням увімкнено.
TemplateProcessor
Recognize(source, recognitionThreshold) розпізнає одне скановане зображення. RecognizeFolder(folderPath, recognitionThreshold) розпізнає всі зображення у папці одним викликом. Recalculate(result, recognitionThreshold) переоцінює вже розпізнаний результат з іншим порогом, не перечитуючи вихідне зображення.
ImageCollection
Карта лише для додавання, чутлива до регістру, що відображає ім’я в необроблені байти зображення. Add(name, image) реєструє зображення, Contains(name) перевіряє, чи ім’я вже зареєстровано, Count повідомляє, скільки зареєстровано, і as_dict() повертає базову карту. Розмітка може посилатися на зареєстроване зображення за ім’ям (?image=<name>) замість шляху у файловій системі.
from omr.api import ImageCollection
images = ImageCollection()
with open("logo.png", "rb") as f:
images.Add("logo.png", f.read())Поради та найкращі практики
- Передайте
FormValidationLogic.Exceptionпід час розробки, щоб одразу виявляти порушення багатовибору, а не тихо ігнорувати їх (спрацьовує лише для питань, у яких вимкненоMultiselect). Recalculate()дешевше, ніж повторне сканування — використовуйте його, коли потрібно змінити лише поріг розпізнавання.- Назви
ImageCollectionчутливі до регістру; повторна реєстрація того самого імені викликає помилку, а не тихо перезаписує. Generate()повідомляє про більшість помилок черезGenerationResult.ErrorCode/ErrorMessage, а не піднімає виняток — перевіртеErrorCodeперед тим, як довіряти згенерованому результату.
Типові проблеми
| Проблема | Причина | Виправлення |
|---|---|---|
| Повторна реєстрація зображення викликає | ImageCollection.Add не дозволяє дублювати імена | Спочатку перевірте Contains(name), або використовуйте унікальне ім’я для кожного зображення |
| Недозволена відповідь з множинним вибором приймається без повідомлення | Типове FormValidationLogic.Ignore не викликає | Передайте FormValidationLogic.Exception до GetTemplateProcessor() і переконайтеся, що Multiselect питання вимкнено |
FAQ
Чи безпечно OmrEngine повторно використовувати в кількох шаблонах?
Так — воно безстанове; кожен виклик Generate()/GetTemplateProcessor() є незалежним.
Як розпізнати всю папку сканів одразу?
Використайте TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) замість того, щоб самостійно перебирати Recognize().
API Reference Підсумок
| Клас/Метод | Опис |
|---|---|
OmrEngine.Generate | Візуалізує шаблон у зображення сторінки + дескриптор .omr |
OmrEngine.GetTemplateProcessor | Завантажує дескриптор .omr для розпізнавання |
TemplateProcessor.Recognize / RecognizeFolder / Recalculate | Точки входу розпізнавання |
ImageCollection.Add / Contains / as_dict | Реєстр зображень у пам’яті для розмітки |
FormValidationLogic | Перелічення поведінки порушення валідації enum |