numpy, opencv-python și Pillow. Un singur OmrEngine acoperă întregul flux de lucru — Generate() transformă un șablon, construit de la cod în primul rând dintr-un arbore TemplateConfig de elemente precum ChoiceBoxConfig, CheckBoxConfig, GridConfig și AnswerSheetConfig, sau scris într-un DSL compact de marcare text, într-o imagine de pagină plus un descriptor .omr; GetTemplateProcessor() încarcă acel descriptor înapoi pentru a recunoaște scanări noi cu Recognize() sau RecognizeFolder(), returnând rezultate exportabile în CSV, JSON, sau XML. Biblioteca este licențiată sub MIT și se instalează cu o singură comandă pip (vezi mai jos); este o versiune timpurie (v0.1.0, Development Status: Alpha) care acoperă straturile de bază, generare și recunoaștere ale suprafeței complete Aspose.OMR — redarea în această versiune este doar LTR/Western, cu sisteme de scriere RTL și gestionarea completă a depășirilor urmărite în foaia de parcurs a upstream-ului, dar încă neimplementate. Pentru familia de produse enterprise, vezi Aspose.OMR — Enterprise Product Family.TemplateConfig, PageConfig și configurările elementelor (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) descriu fiecare câmp de pe pagină.?choicebox=... / &choicebox) construiește aceleași structuri fără a crea obiecte manual.Arabic, Hebrew, Persian, Urdu, Bengali și Western sunt prezente pentru fidelitatea API cu suprafața Aspose.OMR; renderer-ul acestei versiuni este doar LTR/Western — redarea RTL nu este încă implementată.LongWordHandling și subclasele OverflowAction (Clip, NoClip, Wrap) sunt analizate și validate corect, dar renderer-ul acestei versiuni nu le respectă încă — comportamentul real de overflow nu este încă configurabil.CheckBoxConfig și ChoiceBoxConfig suportă selectare multiplă; FormValidationLogic, setat o singură dată pe TemplateProcessor, poate genera o eroare dacă o întrebare cu Multiselect dezactivat primește mai mult de o marcă.AnswerSheetConfig pentru colectarea la scară largă a răspunsurilor.GridConfig și CompositeGridConfig captează intrări numerice sau simboluri personalizate ca o singură valoare combinată.Save() scrie o pagină PNG pregătită pentru tipărire alături de descriptorul .omr utilizat pentru recunoaștere ulterioară.RecognizeFolder() procesează un întreg dosar de scanări într-un singur apel.OmrEngine.Generate() produce un GenerationResult (imagine de pagină + șablon .omr JSON); GetTemplateProcessor() încarcă acel șablon pentru a recunoaște scanări noi.RecognitionResult exportă în CSV, JSON sau XML, fiecare cu o variantă de flux corespunzătoare.MemoryGenerationResult expune imaginile generate ca fluxuri în memorie prin GetImages()/GetOmr() — fără a necesita I/O pe disc.Recalculate() re-aplică un prag diferit fără a re-scana.ImageCollection permite markup-ului să facă referire la octeții imaginii în memorie prin nume, evitând deplasările către sistemul de fișiere.Aspose.OMR FOSS for Python se instalează cu o singură comandă pip (vezi exemplul Quick Start de mai jos). API se concentrează pe trei obiecte — OmrEngine, un arbore TemplateConfig (sau DSL-ul de markup), și TemplateProcessor — care acoperă întregul flux de lucru generează → scanează → recunoaște → exportă.
Biblioteca depinde doar de numpy, opencv-python și Pillow — fără binare native OMR de compilat. Este licențiată MIT, găzduită pe GitHub și este în prezent la o versiune timpurie v0.1.0 care acoperă straturile de fundație, generare și recunoaștere ale suprafeței complete Aspose.OMR.
Construiește (sau încarcă) un șablon, salvează imaginea paginii generate și descriptorul .omr, apoi recunoaște o copie scanată și exportă rezultatele ca 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()
DSL-ul de marcare text construiește același arbore de elemente ca API bazat pe cod. Aici ?choicebox=... deschide o întrebare de tip choice-box, linia următoare enumeră opțiunile sale, iar &choicebox o închide — Generate() returnează un descriptor .Template JSON pe care îl poţi inspecta direct.
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']
Este distribuit sub Licența MIT — gratuit pentru utilizare, modificare și distribuire, inclusiv în produse comerciale, cu condiția includerii notificării originale de drepturi de autor.
Python 3.10 sau o versiune ulterioară, cu trei dependențe instalate automat prin pip — numpy, opencv-python și Pillow. Nu este necesar hardware OMR nativ sau servicii externe.
Nu este în această versiune. GenerationResult.SaveAsPdf() și MemoryGenerationResult.GetPDF() ambele aruncă NotImplementedError. Utilizați ieșirea PNG de la Save() sau GetImages() în schimb.
RecognitionResult exportă în CSV, JSON sau XML prin GetCsv(), GetJson() și GetXml(), fiecare având o variantă corespunzătoare de flux în memorie.
Încă nu pentru redare. Stratul de șablon definește sistemele de scriere arabă, ebraică, persană, urdu și bengaleză pentru fidelitatea cu suprafața Aspose.OMR, dar motorul de redare al acestei versiuni este doar LTR/Western doar – redarea RTL și tipărirea cifrelor native sunt pe foaia de parcurs a upstream-ului, nu sunt încă implementate.
Da, pentru întrebările configurate cu Multiselect dezactivat. Transmite FormValidationLogic.Exception către GetTemplateProcessor() pentru a declanșa când o astfel de întrebare primește mai mult de o marcă; implicit, Ignore, acceptă discret. GlobalPageSettings.Multiselect este implicit activat.