Hoe te werken met de API in Python
Aspose.OMR FOSS voor de publieke API van Python (omr.api) is opzettelijk klein: OmrEngine, TemplateProcessor, ImageCollection en FormValidationLogic. Deze gids laat zien hoe ze samen passen in een genereren-en-herkennen workflow.
Stap-voor-stap gids
Stap 1: Installeer het pakket
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.')"Stap 2: Importeer vereiste klassen
from omr.api import OmrEngine, FormValidationLogicStap 3: Genereer en sla een sjabloon op
engine = OmrEngine()
gen = engine.Generate("final-exam.txt")
gen.Save("out", "final-exam")Stap 4: Laad de sjabloon voor herkenning
Geef FormValidationLogic.Exception door in plaats van de standaard Ignore als je wilt dat een overtreding wordt gemeld voor vragen waarbij multi-select is uitgeschakeld, in plaats van stilletjes geaccepteerd te worden.
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Exception)Stap 5: Herkennen en exporteren
result = processor.Recognize("scan.png")
print(result.GetCsv())Veelvoorkomende problemen en oplossingen
FormValidationLogic.Exception wordt nooit opgegooid, zelfs niet bij een vraag met meerdere markeringen. De controle wordt alleen geactiveerd voor een vraag met Multiselect uitgeschakeld; GlobalPageSettings.Multiselect staat standaard op ingeschakeld, dus bevestig dat het expliciet uitgeschakeld is voor de vraag waarvan je verwacht dat deze enkelvoudig te selecteren is.
Ik moet veel scans tegelijk herkennen. Gebruik TemplateProcessor.RecognizeFolder(folderPath, recognitionThreshold) in plaats van aan te roepen Recognize() in een lus.
Ik registreerde een afbeelding onder een naam die al in gebruik was. ImageCollection.Add schrijft niet over — controleer Contains(name) eerst, of gebruik een unieke naam per afbeelding.
Veelgestelde vragen
Is OmrEngine veilig om opnieuw te gebruiken in meerdere sjablonen?
Ja — het is stateless.
Hoe kan ik een resultaat opnieuw scoren met een andere drempel zonder opnieuw te scannen?
Roep TemplateProcessor.Recalculate(result, recognitionThreshold) aan.
Hoe kan ik een in-memory-afbeelding in markup inbedden in plaats van deze van schijf te lezen?
Registreer het bij ImageCollection.Add(name, image_bytes), en verwijs er vervolgens in markup naar als ?image=<name>.