Como trabalhar com o API em Python
Aspose.OMR FOSS para o Python público API (omr.api) é intencionalmente pequeno: OmrEngine, TemplateProcessor, ImageCollection e FormValidationLogic. Este guia mostra como eles se encaixam em um fluxo de trabalho gerar-e-reconhecer.
Guia passo a passo
Etapa 1: Instalar o pacote
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.')"Etapa 2: Importar classes necessárias
from omr.api import OmrEngine, FormValidationLogicEtapa 3: Gerar e salvar um modelo
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Etapa 4: Carregar o Modelo para Reconhecimento
Passe FormValidationLogic.Exception em vez do padrão Ignore se você quiser que uma violação seja levantada para perguntas que têm a seleção múltipla desativada, em vez de serem aceitas silenciosamente.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Etapa 5: Reconhecer e Exportar
result = processor.Recognize("scan.png")
print(result.GetCsv())Problemas Comuns e Correções
FormValidationLogic.Exception nunca gera exceção, mesmo em uma pergunta com múltiplas marcações. A verificação só dispara para uma pergunta com Multiselect desativado; GlobalPageSettings.Multiselect por padrão está ativado, então confirme que está explicitamente desativado para a pergunta que você espera que seja de seleção única.
Preciso reconhecer várias varreduras de uma só vez. Use TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) em vez de chamar Recognize() em um loop.
Registrei uma imagem com um nome que já estava em uso. ImageCollection.Add não sobrescreve — verifique Contains(name) primeiro, ou use um nome exclusivo por imagem.
Perguntas Frequentes
É OmrEngine seguro reutilizar em vários modelos?
Sim — é sem estado.
Como faço para reavaliar um resultado com um limiar diferente sem reescaneamento?
Chame TemplateProcessor.Recalculate(result, recognitionThreshold).
Como incorporo uma imagem em memória ao markup em vez de lê-la do disco?
Registre-a com ImageCollection.Add(name, image_bytes) e, em seguida, referencie-a no markup como ?image=<name>.