Hur man arbetar med API i Python
Aspose.OMR FOSS för Python s offentliga API (omr.api) är avsiktligt liten: OmrEngine, TemplateProcessor, ImageCollection och FormValidationLogic. Denna guide visar hur de passar ihop i ett generera-och-igenkänna-arbetsflöde.
Steg-för-steg guide
Steg 1: Installera paketet
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.')"Steg 2: Importera nödvändiga klasser
from omr.api import OmrEngine, FormValidationLogicSteg 3: Generera och spara en mall
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Steg 4: Ladda mallen för igenkänning
Använd FormValidationLogic.Exception istället för standard Ignore om du vill att ett brott ska flaggas för frågor där flervalsval är inaktiverat, istället för att det accepteras tyst.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Steg 5: Identifiera och exportera
result = processor.Recognize("scan.png")
print(result.GetCsv())Vanliga problem och lösningar
FormValidationLogic.Exception kastar aldrig, inte ens för en flermarkerad fråga. Kontrollen utlöses endast för en fråga med Multiselect inaktiverad; GlobalPageSettings.Multiselect är som standard aktiverad, så bekräfta att den är uttryckligen avstängd för den fråga du förväntar dig ska vara enkelval.
Jag behöver känna igen många skanningar samtidigt. Använd TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) istället för att anropa Recognize() i en slinga.
Jag registrerade en bild under ett namn som redan var i bruk. ImageCollection.Add skrivs inte över — kontrollera Contains(name) först, eller använd ett unikt namn för varje bild.
Vanliga frågor
Är OmrEngine säkert att återanvända i flera mallar?
Ja — den är tillståndslös.
Hur kan jag omvärdera ett resultat med ett annat tröskelvärde utan att skanna om?
Anropa TemplateProcessor.Recalculate(result, recognitionThreshold).
Hur bäddar jag in en bild i minnet i markup istället för att läsa från disk?
Registrera den med ImageCollection.Add(name, image_bytes), och referera sedan till den i markup som ?image=<name>.