numpy, opencv-python och Pillow. En enda OmrEngine täcker hela arbetsflödet — Generate() omvandlar en mall, byggd kodförst från ett TemplateConfig-träd av element som ChoiceBoxConfig, CheckBoxConfig, GridConfig och AnswerSheetConfig, eller skriven i ett kompakt text-markup-DSL, till en sidbild plus en .omr-beskrivare; GetTemplateProcessor() laddar tillbaka den beskrivaren för att känna igen nya skanningar med Recognize() eller RecognizeFolder(), och returnerar resultat som kan exporteras till CSV, JSON eller XML. Biblioteket är licensierat under MIT och installeras med ett enda pip-kommando (se nedan); det är en tidig version (v0.1.0, Development Status: Alpha) som täcker grunden, generering och igenkänningslagren i hela Aspose.OMR-ytan — rendering i denna version är endast LTR/Västlig, med RTL-skriftsystem och full overflow-hantering som följs på upstream-roadmapen men ännu inte implementeras. För företagsproduktfamiljen, se Aspose.OMR — Enterprise Product Family.TemplateConfig, PageConfig, och elementkonfigurationer (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) beskriver varje fält på sidan.?choicebox=... / &choicebox) bygger samma strukturer utan att skapa objekt för hand.Arabic, Hebrew, Persian, Urdu, Bengali och Western finns för API trohet med Aspose.OMR ytan; den här versionens renderare är endast LTR/Western — RTL-rendering är ännu inte implementerad.LongWordHandling och OverflowAction-subklasserna (Clip, NoClip, Wrap) parsas och valideras korrekt, men den här versionens renderare hedrar dem ännu inte — faktiskt översvämningsbeteende är ännu inte konfigurerbart.CheckBoxConfig och ChoiceBoxConfig stödjer multival; FormValidationLogic, som sätts en gång per TemplateProcessor, kan ge ett fel om en fråga med Multiselect inaktiverat får mer än ett markering.AnswerSheetConfig för storskalig svarssamling.GridConfig och CompositeGridConfig fångar numeriska eller anpassade symbolinmatningar som ett sammanslaget värde.Save() skriver en klar-för-utskrift PNG-sida tillsammans med .omr-beskrivaren som används för senare igenkänning.RecognizeFolder() behandlar en hel mapp med skanningar i ett anrop.OmrEngine.Generate() producerar ett GenerationResult (sidbild + .omr-mall JSON); GetTemplateProcessor() laddar den mallen för att känna igen nya skanningar.RecognitionResult exporterar till CSV, JSON eller XML, var och en med en motsvarande strömvariant.MemoryGenerationResult exponerar genererade bilder som minnesströmmar via GetImages()/GetOmr() — ingen disk-I/O krävs.Recalculate() applicerar ett annat tröskelvärde utan att skanna om.ImageCollection låter markup referera till bildbytes i minnet via namn, vilket undviker filsystemets rundresor.Aspose.OMR FOSS for Python installeras med ett enkelt pip-kommando (se Quick Start-exemplet nedan). API fokuserar på tre objekt — OmrEngine, ett TemplateConfig-träd (eller markup-DSL-en), och TemplateProcessor — som täcker hela flödet generera → skanna → känna igen → exportera.
Biblioteket är endast beroende av numpy, opencv-python och Pillow — inga inhemska OMR-binärfiler att kompilera. Det är licensierat under MIT, finns på GitHub och är för närvarande i ett tidigt v0.1.0-släpp som täcker grunden, generering- och igenkänningslagren i hela Aspose.OMR-ytan.
Bygg (eller läs in) en mall, spara den genererade sidbilden och .omr-beskrivaren, och sedan känna igen en skannad kopia och exportera resultaten som CSV.
git clone https://github.com/aspose-omr-foss/Aspose.OMR-FOSS-for-Python.git
cd Aspose.OMR-FOSS-for-Python
pip install -e .from omr.api import OmrEngine, FormValidationLogic
engine = OmrEngine()
gen = engine.Generate("final-exam.txt") # or a code-first TemplateConfig
gen.Save("out", "final-exam") # -> out/final-exam.png + out/final-exam.omr
processor = engine.GetTemplateProcessor("out/final-exam.omr", FormValidationLogic.Ignore)
result = processor.Recognize("scan.png") # -100 = auto-calibrated threshold
print(result.GetCsv()) # also GetJson() / GetXml()
Text-markup-DSL-en bygger samma elementträd som den kod-först API. Här öppnar ?choicebox=... en choice-box-fråga, nästa rad listar dess alternativ, och &choicebox stänger den — Generate() returnerar en .Template JSON-beskrivare som du kan inspektera direkt.
import json
from omr.api import OmrEngine
markup = [
"?choicebox=Rate it",
"(1) Poor (2) Fair (3) Good",
"&choicebox",
]
engine = OmrEngine()
result = engine.Generate(markup)
desc = json.loads(result.Template)
cb = desc["Pages"][0]["Elements"][0]
print([b["Value"] for b in cb["Fields"][0]["Bubbles"]]) # ['Poor', 'Fair', 'Good']
Den distribueras under MIT-licensen — fri att använda, modifiera och distribuera, även i kommersiella produkter, under förutsättning att originalupphovsrättsmeddelandet inkluderas.
Python 3.10 eller senare, med tre beroenden som installeras automatiskt av pip — numpy, opencv-python och Pillow. Ingen inbyggd OMR-hårdvara eller externa tjänster krävs.
Inte i den här releasen. GenerationResult.SaveAsPdf() och MemoryGenerationResult.GetPDF() kastar båda NotImplementedError. Använd PNG-utdata från Save() eller GetImages() istället.
RecognitionResult exporterar till CSV, JSON eller XML via GetCsv(), GetJson() och GetXml(), var och en med en matchande variant av minnesström.
Inte ännu för rendering. Malllagret definierar arabiska, hebreiska, persiska, urdu och bengaliska skriftsystem för att bevara Aspose.OMR-ytan, men denna versionens renderingsmotor är endast LTR/Western — RTL rendering och native-digit typesetting finns på den upstream-roadmapen, men har ännu inte implementerats.
Ja, för frågor som är konfigurerade med Multiselect inaktiverat. Skicka FormValidationLogic.Exception till GetTemplateProcessor() för att kasta när en sådan fråga får mer än en markering; standardvärdet, Ignore, accepterar det tyst. GlobalPageSettings.Multiselect är som standard aktiverat.