1. Produse
  2.   Aspose.OMR
  3.   Aspose.OMR FOSS for Python

Aspose.OMR FOSS pentru Python

Proiectați foi de răspuns OMR și recunoașteți bulele marcate din imagini scanate în Python — gratuit, open-source și sub licență MIT.

Bibliotecă Python open-source pentru recunoaștere optică a marcajelor

Aspose.OMR FOSS for Python este o bibliotecă gratuită, open-source pentru proiectarea formularelor OMR (optical mark recognition) — foi de răspuns cu alegere multiplă, formulare cu casete de bifare și sondaje — și pentru recunoașterea marcajelor pe care un respondent le completează dintr-o imagine scanată sau fotografiată. Se adresează dezvoltatorilor care automatizează corectarea examenelor, tabularea sondajelor sau colectarea de date pe bază de formulare în Python pur, construită pe nimic mai exotic decât 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.

Proiectați și generați formulare OMR

  • Code-first templates: TemplateConfig, PageConfig și configurările elementelor (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) descriu fiecare câmp de pe pagină.
  • Markup DSL: un format text compact (?choicebox=... / &choicebox) construiește aceleași structuri fără a crea obiecte manual.
  • Writing-system enums: 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ă.
  • Overflow enums: 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.
  • Checkbox and choice groups: 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ă.

Unde Aspose.OMR FOSS poate fi utilizat

  • Examene și teste: generează foi de răspuns cu alegere multiplă și recunoaște bulele completate pentru notare automată.
  • Sondaje și formulare: construiește matrici numerotate de foi de răspuns cu AnswerSheetConfig pentru colectarea la scară largă a răspunsurilor.
  • Grile de introducere a datelor: GridConfig și CompositeGridConfig captează intrări numerice sau simboluri personalizate ca o singură valoare combinată.
  • Ieșire tipărită: Save() scrie o pagină PNG pregătită pentru tipărire alături de descriptorul .omr utilizat pentru recunoaștere ulterioară.
  • Fluxuri de lucru în lot: RecognizeFolder() procesează un întreg dosar de scanări într-un singur apel.

Recunoaște marcajele și exportă rezultatele

  • Motor fără stare: OmrEngine.Generate() produce un GenerationResult (imagine de pagină + șablon .omr JSON); GetTemplateProcessor() încarcă acel șablon pentru a recunoaște scanări noi.
  • Multiple formate de export: RecognitionResult exportă în CSV, JSON sau XML, fiecare cu o variantă de flux corespunzătoare.
  • Rezultate în memorie, de asemenea: MemoryGenerationResult expune imaginile generate ca fluxuri în memorie prin GetImages()/GetOmr() — fără a necesita I/O pe disc.
  • Corecție de înclinare și recalibrare: recunoașterea corectează înclinarea scanării din marcajele de referință de colț, iar Recalculate() re-aplică un prag diferit fără a re-scana.
  • Imagini încorporate: 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.

Experiența dezvoltatorului

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.

Generează un formular și recunoaște răspunsurile scanate

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()

Construiește o întrebare cu răspunsuri multiple din markup

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']

Întrebări Frecvente

Care este modelul de licențiere pentru Aspose.OMR FOSS for Python?

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.

Ce versiuni Python și dependențe necesită?

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.

Pot exporta șablonul generat ca PDF?

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.

În ce formate pot exporta rezultatele de recunoaștere?

RecognitionResult exportă în CSV, JSON sau XML prin GetCsv(), GetJson() și GetXml(), fiecare având o variantă corespunzătoare de flux în memorie.

Acceptă alte limbi în afară de engleză?

Î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.

Este suportată validarea răspunsului cu selecție multiplă?

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.

  

Resurse de Suport și Învățare

 Română