Як працювати з API у Python
Aspose.OMR FOSS для публічного Python’s API (omr.api) навмисно невеликий: OmrEngine, TemplateProcessor, ImageCollection та FormValidationLogic. Цей посібник показує, як вони поєднуються в процесі роботи «генерувати-розпізнавати».
Покроковий посібник
Крок 1: Встановіть пакет
git clone https://github.com/aspose-omr-foss/Aspose.OMR-FOSS-for-Python.git
cd Aspose.OMR-FOSS-for-Python
pip install -e .python -c "import omr; print('Aspose.OMR FOSS for Python is ready.')"Крок 2: Імпортуйте необхідні класи
from omr.api import OmrEngine, FormValidationLogicКрок 3: Створіть і збережіть шаблон
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Крок 4: Завантажити шаблон для розпізнавання
Передайте FormValidationLogic.Exception замість типового Ignore, якщо ви хочете, щоб порушення піднімалося для питань, у яких вимкнено мультивибір, замість того, щоб воно приймалося без повідомлення.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Крок 5: Розпізнати та експортувати
result = processor.Recognize("scan.png")
print(result.GetCsv())Поширені проблеми та виправлення
FormValidationLogic.Exception ніколи не піднімає, навіть у багатократно позначеному питанні. Перевірка спрацьовує лише для питання з Multiselect вимкнено; GlobalPageSettings.Multiselect за замовчуванням ввімкнено, тому підтвердіть, що він явно вимкнений для питання, яке ви очікуєте як single-select.
Мені потрібно розпізнавати багато сканів одночасно. Використовуйте TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) замість виклику Recognize() у циклі.
Я зареєстрував зображення під ім’ям, яке вже використано. ImageCollection.Add не перезаписує — перевірте Contains(name) спочатку, або використовуйте унікальне ім’я для кожного зображення.
Часто задавані питання
Чи безпечно використовувати OmrEngine повторно в декількох шаблонах?
Так — це без стану.
Як переоцінити результат з іншим порогом без повторного сканування?
Викличте TemplateProcessor.Recalculate(result, recognitionThreshold).
Як вбудувати зображення в пам’яті у розмітку замість читання з диска?
Зареєструйте його за допомогою ImageCollection.Add(name, image_bytes), потім посилайтеся на нього у розмітці як ?image=<name>.