
Panoramica
Stai cercando una libreria OMR Java efficiente e ricca di funzionalità? Vuoi identificare i marcatori ottici nelle immagini scansionate? Scopri Aspose.OMR per Java, una libreria di classi Java progettata per soluzioni di SDK di Riconoscimento Ottico dei Marcatori nelle applicazioni basate su Java. Ecco una rapida panoramica delle funzionalità di questa API Java, che dimostra come può essere utilizzata per riconoscere marcatori ottici attraverso vari formati di immagine e ottenere dati marcati da esseri umani da sondaggi, questionari o test contenenti domande a scelta multipla (MCQ).
Creazione Dinamica di Modelli OMR utilizzando la Libreria OMR Java
Aspose.OMR per Java offre una suite completa di funzionalità dalla creazione di modelli OMR al riconoscimento dei marcatori ottici per la cattura dei dati. Questo SDK di Riconoscimento Ottico dei Marcatori supporta la generazione di file modello OMR o immagini da semplici markup di testo. Per generare il modello, puoi passare il markup di testo all’API, consentendo la creazione automatica del modello. Di seguito è riportato un esempio di markup di testo per un modello OMR:
?text=Nome__________________________________ Data____________
?grid=ID
sections_count=8
#Qual è la funzione principale di Aspose.OMR?
() OCR () Cattura dati marcati da esseri umani
() Non c'è funzione principale () Migliora le immagini
#Aspose.OMR può elaborare anche foto?
() Sì, certo! () No
#Aspose.OMR è disponibile su qualsiasi piattaforma, perché è:
() Codice multipiattaforma () Servizio cloud
#Aspose.OMR funziona con qualsiasi tipo di moduli OMR: test, esami, questionari, sondaggi, ecc.
() Sì, certo! () No
#Risultati di riconoscimento eccellenti possono essere ottenuti solo per bolle compilate almeno per:
() 40% () 60% () 75% () 98%
#Devi contrassegnare ogni domanda sulla pagina?
(Sì) Sì, questo aiuterà molto! (No) No
#Valuta la tua preferenza da 0 a 9 con "0" che rappresenta la preferenza per le prestazioni
e "9" che rappresenta la preferenza per la flessibilità.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#Ho trovato Aspose OMR uno strumento utile. (5 - fortemente d'accordo, 1 - fortemente in disaccordo)
(5) (4) (3) (2) (1)
?text= Sezione foglio di risposta
?answer_sheet=DomandePrincipali
elements_count=10
columns_count=5
?text=Firma________________________________
Puoi salvare questo markup di testo in un file di testo con estensione .txt. Una volta fatto, la generazione del modello segue questi passaggi:
- Crea un oggetto OmrEngine.
- Chiama il metodo OmrEngine.generateTemplate() che accetta il percorso del file di testo di markup.
- Salva il modello utilizzando il metodo GenerationResult.save.
Ecco come un frammento di codice di esempio in Java mostra la generazione del modello da un markup di testo.
String outputDirectory = "GenerationResult"; | |
String[] GenerationMarkups = new String[] { "Sheet.txt", "Grid.txt", "AsposeTest.txt" }; | |
String[] GenerationMarkupsNoExt = new String[] { "Sheet", "Grid", "AsposeTest" }; | |
OmrEngine engine = new OmrEngine(); | |
for (int i = 0; i < GenerationMarkups.length; i++) | |
{ | |
// call template generation providing path to the txt file with markup | |
GenerationResult res = engine.generateTemplate(GenerationMarkups[i]); | |
// check in case of errors | |
if (res.getErrorCode() != 0) | |
{ | |
System.out.println("ERROR CODE: " + res.getErrorCode()); | |
} | |
// save generation result: image and .omr template | |
res.save(outputDirectory, GenerationMarkupsNoExt[i]); | |
} |
Output

Riconoscimento Ottico dei Marcatori (OMR) in Immagini utilizzando Java
Per eseguire il Riconoscimento Ottico dei Marcatori (OMR) su immagini, hai bisogno solo di due componenti: il modello OMR preparato (.omr) e i moduli o fogli compilati dall’utente che desideri analizzare. Con il supporto dell’SDK di Riconoscimento Ottico dei Marcatori, l’API facilita l’OMR per vari formati di immagine, tra cui:
I passaggi per eseguire l’OMR su immagini sono i seguenti:
- Crea un oggetto OmrEngine.
- Crea un oggetto TemplateProcessor e inizializzalo con il percorso del modello OMR.
- Riconosci le immagini utilizzando il metodo TemplateProcessor.recognizeImage() e ottieni i risultati in formato CSV o JSON.
Di seguito è riportato un campione di codice che dimostra come riconoscere i marcatori ottici nelle immagini utilizzando Java.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" }; | |
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" }; | |
String outputDirectory = "Result"; | |
String templatePath = "Sheet.omr"; | |
// initialize engine and get template processor providing path to the .omr file | |
OmrEngine engine = new OmrEngine(); | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
System.out.println("Template loaded."); | |
// images loop | |
for (int i = 0; i < UserImages.length; i++) { | |
// path to the image to be recognized | |
String imagePath = UserImages[i]; | |
System.out.println("Processing image: " + imagePath); | |
// recognize image and receive result | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath); | |
// export results as csv string | |
String csvResult = result.getCsv(); | |
String json = result.getJson(); | |
// save csv to the output folder | |
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true); | |
wr.println(csvResult); | |
} |
Utilizzo di una Soglia di Riconoscimento Personalizzata per OMR
Puoi anche ottimizzare i risultati OMR definendo una soglia personalizzata tra 0 e 100 quando utilizzi l’SDK di Riconoscimento Ottico dei Marcatori. Aumentare la soglia rende l’API più rigorosa nel riconoscimento delle risposte. I valori di soglia possono essere impostati nel metodo TemplateProcessor.recognizeImage() come secondo parametro, come mostrato nel seguente esempio di codice Java.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" }; | |
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" }; | |
String outputDirectory = "Result"; | |
String templatePath = "Sheet.omr"; | |
int customThreshold = 40; | |
// initialize engine and get template processor providing path to the .omr file | |
OmrEngine engine = new OmrEngine(); | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
System.out.println("Template loaded."); | |
// images loop | |
for (int i = 0; i < UserImages.length; i++) { | |
// path to the image to be recognized | |
String imagePath = UserImages[i]; | |
System.out.println("Processing image: " + imagePath); | |
// recognize image and receive result | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold); | |
// export results as csv string | |
String csvResult = result.getCsv(); | |
String json = result.getJson(); | |
// save csv to the output folder | |
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true); | |
wr.println(csvResult); | |
} |
Ricalcolo dei Risultati OMR utilizzando l’SDK di Riconoscimento Ottico dei Marcatori
In alcune situazioni, potresti voler ricalcolare i risultati OMR utilizzando valori di soglia diversi. Invece di invocare ripetutamente TemplateProcessor.recognizeImage(), puoi migliorare l’efficienza dell’elaborazione delle immagini configurando l’API per il ricalcolo automatico con il metodo TemplateProcessor.recalculate() fornito dall’SDK di Riconoscimento Ottico dei Marcatori. Il seguente campione di codice dimostra come implementare il ricalcolo dei risultati OMR.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" }; | |
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" }; | |
String outputDirectory = "Result"; | |
String templatePath = "Sheet.omr"; | |
// init engine and get template processor | |
OmrEngine engine = new OmrEngine(); | |
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath); | |
System.out.println("Template loaded."); | |
// Set custom threshold to use in recalculation | |
// this value is in range (0 to 100) | |
// represents the percentage of required black pixels on bubble image to be recognized | |
// i.e. the lower the value - the less black pixels required for bubble to be counted as filled and vice versa | |
int CustomThreshold = 40; | |
// images loop | |
for (int i = 0; i < UserImages.length; i++) | |
{ | |
String image = UserImages[i]; | |
String imagePath = image; | |
System.out.println("Processing image: " + imagePath); | |
// recognize image | |
RecognitionResult result = templateProcessor.recognizeImage(imagePath); | |
// get export csv string | |
String stringRes = result.getCsv(); | |
// save csv to output folder | |
String outputName = UserImagesNoExt[i] + ".csv"; | |
PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true); | |
wr.println(stringRes); | |
System.out.println("Export done. Path: " + outputName); | |
// recalculate recognition results with custom threshold | |
templateProcessor.recalculate(result, CustomThreshold); | |
// get export csv string | |
stringRes = result.getCsv(); | |
// save recalculated results | |
outputName = UserImagesNoExt[i] + "_recalculated.csv"; | |
wr = new PrintWriter(new FileOutputStream(outputName), true); | |
wr.println(stringRes); | |
System.out.println("Recalculated result export done. Path: " + outputName); | |
System.out.println(); | |
} |
Se hai domande o necessiti di assistenza riguardo alla nostra libreria OMR Java, non esitare a contattarci nel nostro forum.