Ядро 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 | Реестр изображений в памяти для разметки |
FormValidationLogic | Enum поведения при нарушении валидации |