1. Продукти
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS для Python

Створюйте OMR-бланки відповідей та розпізнавайте позначені бульбашки на сканованих зображеннях у Python — безкоштовно, з відкритим кодом та під ліцензією MIT.

Open-Source Python бібліотека для оптичного розпізнавання міток

Aspose.OMR FOSS for Python — це безкоштовна бібліотека з відкритим кодом для створення OMR (optical mark recognition) форм — листів відповідей з множинним вибором, форм з прапорцями та опитувальників — і розпізнавання позначок, які респондент заповнює на відсканованому або сфотографованому зображенні. Вона орієнтована на розробників, які автоматизують оцінювання іспитів, підрахунок результатів опитувань або збір даних за допомогою форм у чистому Python, побудовану лише на numpy, opencv-python і Pillow. Один OmrEngine охоплює весь робочий процес — Generate() перетворює шаблон, створений кодом із дерева елементів TemplateConfig, таких як ChoiceBoxConfig, CheckBoxConfig, GridConfig і AnswerSheetConfig, або написаний у компактному текстовому DSL, у зображення сторінки плюс дескриптор .omr; GetTemplateProcessor() завантажує цей дескриптор для розпізнавання нових сканів за допомогою Recognize() або RecognizeFolder(), повертаючи результати, які можна експортувати у CSV, JSON або XML. Бібліотека має ліцензію MIT і встановлюється однією командою pip (див. нижче); це ранній реліз (v0.1.0, Development Status: Alpha), що охоплює фундамент, генерацію та шари розпізнавання повної поверхні Aspose.OMR — у цьому випуску підтримується лише LTR/Western, а системи письма RTL та повна обробка переповнення знаходяться у дорожній карті upstream, але ще не реалізовані. Для корпоративного сімейства продуктів дивіться Aspose.OMR — Enterprise Product Family.

Проектування та створення OMR-форм

  • Code-first templates: TemplateConfig, PageConfig та конфігурації елементів (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) описують кожне поле на сторінці.
  • Markup DSL: компактний текстовий формат (?choicebox=... / &choicebox) створює ті ж самі структури без ручного створення об’єктів.
  • Writing-system enums: Arabic, Hebrew, Persian, Urdu, Bengali та Western присутні для API точності з Aspose.OMR поверхнею; рендерер цього випуску підтримує лише LTR/Western — RTL-рендеринг ще не реалізовано.
  • Overflow enums: LongWordHandling та підкласи OverflowAction (Clip, NoClip, Wrap) правильно розбираються та валідуються, проте рендерер цього випуску ще не дотримується їх — фактична поведінка при переповненні ще не налаштовується.
  • Checkbox and choice groups: CheckBoxConfig і ChoiceBoxConfig підтримують мультивибір; FormValidationLogic, встановлений один раз для кожного TemplateProcessor, може викликати помилку, якщо питання з вимкненим Multiselect отримує більше одного позначення.

Де можна використовувати Aspose.OMR FOSS

  • Exams and quizzes: генерувати аркуші відповідей з множинним вибором та розпізнавати заповнені бульбашки для автоматичного оцінювання.
  • Surveys and forms: створювати нумеровані матриці аркушів відповідей за допомогою AnswerSheetConfig для збору відповідей у великому масштабі.
  • Data-entry grids: GridConfig і CompositeGridConfig захоплюють числові або користувацькі символи як одне об’єднане значення.
  • Printable output: Save() записує готову до друку PNG-сторінку разом із дескриптором .omr, що використовується для подальшого розпізнавання.
  • Batch pipelines: RecognizeFolder() обробляє всю папку сканів в одному виклику.

Розпізнати мітки та експортувати результати

  • Безстанова система: OmrEngine.Generate() генерує GenerationResult (зображення сторінки + .omr шаблон JSON); GetTemplateProcessor() завантажує цей шаблон для розпізнавання нових сканів.
  • Кілька форматів експорту: RecognitionResult експортує в CSV, JSON або XML, кожен з відповідним варіантом потоку.
  • Результати в пам’яті також: MemoryGenerationResult надає згенеровані зображення як потоки в пам’яті через GetImages()/GetOmr() — без необхідності вводу/виводу на диск.
  • Виправлення схилу та перекалібрування: розпізнавання виправляє схил сканування за допомогою кутових контрольних міток, а Recalculate() застосовує інший поріг без повторного сканування.
  • Вбудовані зображення: ImageCollection дозволяє розмітці посилатися на байти зображень в пам’яті за ім’ям, уникаючи зайвих звернень до файлової системи.

Досвід розробника

Aspose.OMR FOSS for Python встановлюється однією командою pip (див. приклад Quick Start нижче). API центровано навколо трьох об’єктів — OmrEngine, дерева TemplateConfig (або DSL розмітки) та TemplateProcessor — які охоплюють весь процес генерації → сканування → розпізнавання → експорту.

Бібліотека залежить лише від numpy, opencv-python та Pillow — без нативних бінарних файлів OMR, які треба компілювати. Вона має ліцензію MIT, розміщена на GitHub і наразі знаходиться на ранньому випуску v0.1.0, який охоплює фундаментальний, генераційний та розпізнавальний рівні повної поверхні Aspose.OMR.

Створити форму та розпізнати відскановані відповіді

Створіть (або завантажте) шаблон, збережіть згенероване зображення сторінки та дескриптор .omr, потім розпізнайте скановану копію та експортуйте результати у CSV.

git clone https://github.com/aspose-omr-foss/Aspose.OMR-FOSS-for-Python.git
cd Aspose.OMR-FOSS-for-Python
pip install -e .
from omr.api import OmrEngine, FormValidationLogic
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")          # or a code-first TemplateConfig
gen.Save("out", "final-exam")                    # -> out/final-exam.png + out/final-exam.omr
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)
result = processor.Recognize("scan.png")         # -100 = auto-calibrated threshold
print(result.GetCsv())                           # also GetJson() / GetXml()

Створити питання з множинним вибором з розмітки

DSL розмітки тексту створює таке ж дерево елементів, як і код-спочатку API. Тут ?choicebox=... відкриває питання типу choice-box, наступний рядок перераховує його варіанти, а &choicebox закриває його — Generate() повертає дескриптор .Template JSON, який можна переглянути безпосередньо.

import json
from omr.api import OmrEngine
markup = [
    "?choicebox=Rate it",
    "(1) Poor (2) Fair (3) Good",
    "&choicebox",
]
engine = OmrEngine()
result = engine.Generate(markup)
desc = json.loads(result.Template)
cb = desc["Pages"][0]["Elements"][0]
print([b["Value"] for b in cb["Fields"][0]["Bubbles"]])  # ['Poor', 'Fair', 'Good']

Часті Питання

Яка модель ліцензування для Aspose.OMR FOSS for Python?

Воно розповсюджується під ліцензією MIT — безкоштовно використовується, модифікується та розповсюджується, включаючи комерційні продукти, за умови включення оригінального повідомлення про авторські права.

Які версії Python та залежності він вимагає?

Python 3.10 або новіше, з трьома залежностями, встановленими автоматично за допомогою pip — numpy, opencv-python та Pillow. Ніяке нативне OMR-обладнання чи зовнішні сервіси не потрібні.

Чи можу я експортувати згенерований шаблон у PDF?

Не в цьому випуску. GenerationResult.SaveAsPdf() та MemoryGenerationResult.GetPDF() обидва викликають NotImplementedError. Використовуйте PNG-вивід з Save() або GetImages() замість цього.

Які формати я можу експортувати результати розпізнавання?

RecognitionResult експортує у CSV, JSON або XML за допомогою GetCsv(), GetJson() та GetXml(), кожен з відповідним варіантом потоку в пам’яті.

Чи підтримує він інші мови, крім англійської?

Ще не готово для рендерингу. Шар шаблону визначає системи письма арабської, івриту, перської, урду та бенгальської для точності з поверхнею Aspose.OMR, але render engine цього випуску підтримує лише LTR/Western — RTL rendering та набори рідних цифр знаходяться у плані upstream roadmap, ще не реалізовані.

Чи підтримується перевірка відповідей з багатьма виборами?

Так, для питань, у яких Multiselect вимкнено. Передайте FormValidationLogic.Exception у GetTemplateProcessor(), щоб викликати виключення, коли таке питання отримує більше однієї позначки; за замовчуванням Ignore приймає це без повідомлення. GlobalPageSettings.Multiselect за замовчуванням увімкнено.

  

Ресурси Підтримки та Навчання

 Українська