Обзор функций
Обзор функций
Aspose.OMR FOSS для Python охватывает три уровня: разработка шаблона, генерация образа страницы и дескриптора из него, а также распознавание меток со сканированной копии.
Проектирование шаблона
Шаблон представляет собой дерево конфигураций элементов, корневым узлом которого является TemplateConfig. Элементы вопросов включают ChoiceBoxConfig (пузырьки с фиксированными вариантами), CheckBoxConfig (флажки с любой отметкой), GridConfig и CompositeGridConfig (матрицы цифр/символов, объединённые в одно значение) и AnswerSheetConfig (нумерованные матрицы ответных пузырьков). Контейнеры компоновки (BlockConfig, ContainerConfig, PositionedBlockConfig) управляют границами, колонками и абсолютным позиционированием. То же самое дерево можно построить из компактного DSL разметки текста вместо объектов Python.
Generation
OmrEngine.Generate() преобразует шаблон в GenerationResult — образ страницы плюс дескриптор .omr JSON. MemoryGenerationResult предоставляет тот же вывод в виде потоков в памяти через GetImages()/GetOmr() для вызывающих, которые не хотят работать с файловой системой.
Recognition
TemplateProcessor.Recognize() считывает одно отсканированное изображение относительно шаблона, из которого оно было создано. RecognizeFolder() выполняет пакетную обработку для каждого изображения в папке. Recalculate() переоценивает уже распознанный результат с другим порогом без повторного чтения исходного изображения. Коррекция наклона использует угловые опорные метки (ReferencePointsSettings).
Экспорт результатов
RecognitionResult экспортирует в CSV, JSON или XML, каждый со соответствующим вариантом потока в памяти (GetCsvAsStream, GetJsonAsStream, GetXmlAsStream).
Перечисления систем письма и переполнения
Arabic, Hebrew, Persian, Urdu и Bengali системы письма (вместе с Western), а также перечисления LongWordHandling/OverflowAction, присутствуют и корректно разбираются для точности API с поверхностью Aspose.OMR. Ни одно из них пока не поддерживается движком рендеринга этой версии — рендеринг поддерживает только LTR/западный порядок, а поведение переполнения ещё не настраивается. Оба пункта находятся в дорожной карте upstream.
Советы и лучшие практики
- Используйте DSL разметки для простых форм; переключайтесь на код-ориентированное дерево
TemplateConfig, когда требуется программный контроль над размещением элементов. FormValidationLogic.Exceptionсразу отображает нарушения мультивыбора вместо того, чтобы тихо игнорировать их, для вопросов с отключённым мультивыбором.- Предпочтите
RecognizeFolder()вместо того, чтобы самостоятельно выполнять циклические вызовыRecognize()при обработке пакета сканов. - Вызовите
Recalculate()вместо повторного сканирования, если вам нужно лишь попробовать другой порог распознавания.
Распространённые проблемы
| Проблема | Причина | Исправление |
|---|---|---|
SaveAsPdf() вызывает NotImplementedError | Экспорт в PDF не реализован в этой версии | Используйте Save() для вывода PNG, или экспортируйте результаты распознавания как CSV/JSON/XML |
| Запрещённый ответ с множественным выбором принимается без уведомления | Стандартный FormValidationLogic.Ignore не вызывает исключения при нарушениях | Передайте FormValidationLogic.Exception в GetTemplateProcessor() и убедитесь, что Multiselect вопроса отключён |
FAQ
Требует ли библиотека какой-нибудь GUI или внешнее OMR-оборудование?
Нет. Она полностью работает с файлов изображений (сканы или фотографии), используя numpy, opencv-python и Pillow.
Могу ли я создать PDF шаблона?
В этом выпуске нет — GenerationResult.SaveAsPdf() и MemoryGenerationResult.GetPDF() оба вызывают NotImplementedError. Вместо этого используйте PNG-вывод из Save()/GetImages().
Как обработать сразу много отсканированных форм?
Используйте TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) для распознавания каждого изображения в папке за один вызов.
API Reference Сводка
| Класс/Метод | Описание: |
|---|---|
OmrEngine.Generate | Рендерит шаблон в изображение страницы + дескриптор .omr |
OmrEngine.GetTemplateProcessor | Загружает дескриптор .omr для распознавания |
TemplateProcessor.Recognize | Распознаёт одно отсканированное изображение |
TemplateProcessor.RecognizeFolder | Распознает каждое изображение в папке |
TemplateProcessor.Recalculate | Пересчитывает результат с новым порогом |
RecognitionResult.GetCsv / GetJson / GetXml | Экспортирует результаты распознавания |