Ядро API

Ядро API

omr.api — это небольшая поверхность, с которой взаимодействует большинство кода: OmrEngine, TemplateProcessor, ImageCollection и перечисление FormValidationLogic.


OmrEngine

OmrEngine — это фабрика без состояния. Generate(source, settings) принимает источник markup-DSL или дерево TemplateConfig и возвращает GenerationResult. GetTemplateProcessor(templateSource, validationLogic) загружает ранее сохранённый путь к файлу .omr и возвращает привязанный TemplateProcessor; потоковый источник вместо этого принимает аргумент кодировки текста перед логикой валидации.

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 является нулевым значением перечисления. Проверка применяется только к вопросам, у которых 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Реестр изображений в памяти для разметки
FormValidationLogicEnum поведения при нарушении валидации

См. также:

 Русский