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

Aspose.OMR FOSS per Python

Progetta fogli risposta OMR e riconosci le bolle contrassegnate da immagini scannerizzate in Python — gratuito, open source e con licenza MIT.

Libreria Open-Source Python per il riconoscimento ottico dei segni

Aspose.OMR FOSS for Python è una libreria gratuita e open-source per la progettazione di moduli OMR (optical mark recognition) — fogli di risposta a scelta multipla, moduli con caselle di controllo e sondaggi — e per il riconoscimento dei segni che un rispondente riempie da un’immagine scansionata o fotografata. Si rivolge a sviluppatori che automatizzano la correzione di esami, la tabulazione di sondaggi o la raccolta di dati basata su moduli in puro Python, costruita su nulla di più esotico di numpy, opencv-python e Pillow. Un singolo OmrEngine copre l’intero flusso di lavoro — Generate() trasforma un modello, costruito code-first da un albero TemplateConfig di elementi come ChoiceBoxConfig, CheckBoxConfig, GridConfig e AnswerSheetConfig, o scritto in un compatto DSL di markup testuale, in un’immagine di pagina più un descrittore .omr; GetTemplateProcessor() carica quel descrittore per riconoscere nuove scansioni con Recognize() o RecognizeFolder(), restituendo risultati esportabili in CSV, JSON o XML. La libreria è rilasciata sotto licenza MIT e si installa con un singolo comando pip (vedi sotto); è un rilascio iniziale (v0.1.0, Development Status: Alpha) che copre le basi, i livelli di generazione e riconoscimento dell’intera superficie Aspose.OMR — il rendering in questa versione è solo LTR/Western, con sistemi di scrittura RTL e gestione completa dell’overflow tracciati nella roadmap upstream ma non ancora implementati. Per la famiglia di prodotti enterprise, vedere Aspose.OMR — Enterprise Product Family.

Progetta e genera moduli OMR

  • Template code-first: TemplateConfig, PageConfig e le configurazioni degli elementi (ChoiceBoxConfig, CheckBoxConfig, GridConfig, CompositeGridConfig, AnswerSheetConfig) descrivono ogni campo nella pagina.
  • Markup DSL: un formato di testo compatto (?choicebox=... / &choicebox) costruisce le stesse strutture senza creare oggetti manualmente.
  • Enum dei sistemi di scrittura: Arabic, Hebrew, Persian, Urdu, Bengali e Western sono presenti per la fedeltà API con la superficie Aspose.OMR; il renderer di questa versione è solo LTR/Western — il rendering RTL non è ancora implementato.
  • Enum di overflow: LongWordHandling e le sottoclassi di OverflowAction (Clip, NoClip, Wrap) analizzano e convalidano correttamente, ma il renderer di questa versione non li rispetta ancora — il comportamento effettivo di overflow non è ancora configurabile.
  • Gruppi di caselle di controllo e scelte: CheckBoxConfig e ChoiceBoxConfig supportano la selezione multipla; FormValidationLogic, impostato una volta per TemplateProcessor, può generare un errore se una domanda con Multiselect disabilitato riceve più di un segno.

Dove Aspose.OMR FOSS Può Essere Usato

  • Esami e quiz: genera fogli risposta a scelta multipla e riconosci le bolle riempite per la correzione automatica.
  • Sondaggi e moduli: crea matrici di fogli risposta numerati con AnswerSheetConfig per la raccolta di risposte su larga scala.
  • Griglie di inserimento dati: GridConfig e CompositeGridConfig catturano inserimenti numerici o di simboli personalizzati come un unico valore combinato.
  • Output stampabile: Save() scrive una pagina PNG pronta per la stampa accanto al descrittore .omr usato per il riconoscimento successivo.
  • Pipeline batch: RecognizeFolder() elabora un’intera cartella di scansioni in una sola chiamata.

Riconosci i contrassegni ed esporta i risultati

  • Motore senza stato: OmrEngine.Generate() produce un GenerationResult (immagine della pagina + modello .omr JSON); GetTemplateProcessor() carica quel modello per riconoscere nuove scansioni.
  • Formati di esportazione multipli: RecognitionResult esporta in CSV, JSON, o XML, ciascuno con una variante di stream corrispondente.
  • Risultati in memoria: MemoryGenerationResult espone le immagini generate come stream in memoria tramite GetImages()/GetOmr() — non è richiesto alcun I/O su disco.
  • Correzione di inclinazione e ricalibrazione: il riconoscimento corregge l’inclinazione della scansione a partire dai segni di riferimento d’angolo, e Recalculate() riapplica una soglia diversa senza dover riscanare.
  • Immagini incorporate: ImageCollection consente al markup di fare riferimento a byte di immagine in memoria per nome, evitando viaggi di andata e ritorno al file system.

Esperienza dello sviluppatore

Aspose.OMR FOSS for Python si installa con un unico comando pip (vedi l’esempio Quick Start qui sotto). Il API si concentra su tre oggetti — OmrEngine, un albero TemplateConfig (o il DSL di markup), e TemplateProcessor — che coprono l’intero flusso di lavoro genera → scansiona → riconosce → esporta.

La libreria dipende solo da numpy, opencv-python e Pillow — nessun binario OMR nativo da compilare. È rilasciata con licenza MIT, ospitata su GitHub, e attualmente in una prima versione v0.1.0 che copre gli strati di fondazione, generazione e riconoscimento dell’intera superficie Aspose.OMR.

Genera un modulo e riconosci le risposte scansionate

Crea (o carica) un modello, salva l’immagine della pagina generata e il descrittore .omr, quindi riconosci una copia scannerizzata ed esporta i risultati in 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()

Crea una domanda a scelta multipla dal markup

Il DSL di markup del testo costruisce lo stesso albero di elementi del API basato su codice. Qui ?choicebox=... apre una domanda a scelta multipla, la riga successiva elenca le sue opzioni, e &choicebox la chiude — Generate() restituisce un descrittore .Template JSON che puoi ispezionare direttamente.

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

Domande Frequenti

Qual è il modello di licenza per Aspose.OMR FOSS for Python?

È distribuito sotto la MIT License — libero da usare, modificare e distribuire, anche in prodotti commerciali, a condizione di includere l’avviso di copyright originale.

Quali versioni di Python e dipendenze richiede?

Python 3.10 o successive, con tre dipendenze installate automaticamente da pip — numpy, opencv-python e Pillow. Non è necessario alcun hardware OMR nativo o servizi esterni.

Posso esportare il modello generato come PDF?

Non in questa versione. GenerationResult.SaveAsPdf() e MemoryGenerationResult.GetPDF() sollevano entrambi NotImplementedError. Usa l’output PNG da Save() o GetImages() invece.

In quali formati posso esportare i risultati del riconoscimento?

RecognitionResult esporta in CSV, JSON o XML tramite GetCsv(), GetJson() e GetXml(), ognuno con una variante di stream in memoria corrispondente.

Supporta lingue diverse dall’inglese?

Non ancora per il rendering. Lo strato del modello definisce i sistemi di scrittura arabo, ebraico, persiano, urdu e bengalese per la fedeltà con la superficie Aspose.OMR, ma il motore di rendering di questa versione è solo LTR/Western – il rendering RTL e l’impaginazione di cifre native sono nella roadmap upstream, non ancora implementati.

È supportata la convalida delle risposte a selezione multipla?

Sì, per le domande configurate con Multiselect disabilitato. Passa FormValidationLogic.Exception a GetTemplateProcessor() per sollevare quando una tale domanda riceve più di un segno; il valore predefinito, Ignore, lo accetta silenziosamente. GlobalPageSettings.Multiselect è abilitato per impostazione predefinita.

  

Risorse di Supporto e Apprendimento

 Italiano