Ядро 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

Дивіться також

 Українська