Come lavorare con il API in Python
Aspose.OMR FOSS per il Python pubblico API (omr.api) è intenzionalmente piccolo: OmrEngine, TemplateProcessor, ImageCollection e FormValidationLogic. Questa guida mostra come si integrano in un flusso di lavoro di generazione e riconoscimento.
Guida passo-passo
Passo 1: Installa il pacchetto
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.')"Passo 2: Importa le classi richieste
from omr.api import OmrEngine, FormValidationLogicPasso 3: Genera e salva un modello
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Passo 4: Carica il modello per il riconoscimento
Passa FormValidationLogic.Exception invece del valore predefinito Ignore se desideri che venga generata una violazione per le domande con la selezione multipla disabilitata, invece di essere accettate silenziosamente.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Passo 5: Riconosci ed esporta
result = processor.Recognize("scan.png")
print(result.GetCsv())Problemi comuni e soluzioni
FormValidationLogic.Exception non solleva mai, anche su una domanda con più marcature. Il controllo si attiva solo per una domanda con Multiselect disabilitato; GlobalPageSettings.Multiselect è abilitato per impostazione predefinita, quindi verifica che sia disattivato esplicitamente per la domanda che ti aspetti sia a selezione singola.
Devo riconoscere molte scansioni contemporaneamente. Usa TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) invece di chiamare Recognize() in un ciclo.
Ho registrato un’immagine con un nome già utilizzato. ImageCollection.Add non sovrascrive — controlla Contains(name) prima, o usa un nome univoco per immagine.
Domande frequenti
È OmrEngine sicuro da riutilizzare in più template?
Sì — è senza stato.
Come posso ricalcolare il punteggio di un risultato con una soglia diversa senza rieseguire la scansione?
Chiama TemplateProcessor.Recalculate(result, recognitionThreshold).
Come posso incorporare un’immagine in memoria nel markup invece di leggerla dal disco?
Registralo con ImageCollection.Add(name, image_bytes), poi riferiscilo nel markup come ?image=<name>.