Hai bisogno di una libreria OMR Java semplice ma ricca di funzionalità? Vuoi riconoscere i segni ottici nelle immagini scansionate? Prova Aspose.OMR per Java - Una libreria di classi Java per eseguire le operazioni di riconoscimento ottico dei segni (OMR) nelle applicazioni basate su Java. Diamo una rapida panoramica delle funzionalità della suddetta API Java per vedere come riconoscere i segni ottici in una varietà di formati di immagine e acquisire dati contrassegnati dall’uomo da sondaggi, questionari o test contenenti MCQ.
Crea dinamicamente un modello OMR utilizzando la libreria OMR Java
Aspose.OMR per Java fornisce un set completo di funzionalità dalla creazione del modello OMR al riconoscimento dei segni ottici per acquisire i dati. L’API supporta la generazione del file modello OMR o dell’immagine da semplici markup di testo. Puoi semplicemente passare il markup del testo del modello all’API e questo genererà il modello per te. Di seguito è riportato un esempio di markup di testo per un modello OMR.
?text=Name__________________________________ Date____________
?grid=ID
sections_count=8
#What is Aspose.OMR main function?
() OCR () Capture human-marked data
() There is no main function () Enhance images
#Can Aspose.OMR process photos as well?
() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
(5) (4) (3) (2) (1)
?text= Answer sheet section
?answer_sheet=MainQuestions
elements_count=10
columns_count=5
?text=Sign________________________________
Puoi semplicemente salvare il markup del testo in un file di testo con estensione .txt. Una volta terminato, puoi generare il modello utilizzando i seguenti passaggi:
- Crea un oggetto OmrEngine.
- Chiama il metodo OmrEngine.generateTemplate() che accetta il percorso del file di testo di markup.
- Salva il modello usando il metodo GenerationResult.save.
L’esempio di codice seguente mostra come generare il modello OMR dal markup del testo utilizzando Java.
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++)
{
// generazione del modello di chiamata che fornisce il percorso del file txt con markup
GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);
// controllare in caso di errori
if (res.getErrorCode() != 0)
{
System.out.println("ERROR CODE: " + res.getErrorCode());
}
// salva il risultato della generazione: immagine e modello .omr
res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}
Produzione
Riconoscimento ottico del segno (OMR) nelle immagini utilizzando Java
Per eseguire l’OMR nelle immagini, hai solo bisogno di due cose: il modello OMR preparato (.omr) e le immagini (moduli/fogli compilati dall’utente) su cui eseguire l’OMR. L’API supporta l’OMR per i seguenti formati di immagine:
Di seguito sono riportati i passaggi per eseguire l’OMR nelle immagini:
- Crea un oggetto OmrEngine.
- Crea l’oggetto TemplateProcessor e inizializzalo con il percorso del modello OMR.
- Riconosci le immagini utilizzando il metodo TemplateProcessor.recognizeImage() e ottieni risultati in formato CSV o JSON.
L’esempio di codice seguente mostra come riconoscere i segni 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";
// inizializza il motore e ottieni il processore del modello che fornisce il percorso del file .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// ciclo di immagini
for (int i = 0; i < UserImages.length; i++) {
// percorso verso l'immagine da riconoscere
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// riconoscere l'immagine e ricevere il risultato
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// esporta i risultati come stringa csv
String csvResult = result.getCsv();
String json = result.getJson();
// salva csv nella cartella di output
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Utilizzo di una soglia di riconoscimento personalizzata per OMR
Puoi anche perfezionare i risultati OMR definendo una soglia personalizzata compresa tra 0 e 100. L’aumento della soglia rende l’API più rigorosa nel riconoscere le risposte. I valori di soglia possono essere impostati nel metodo TemplateProcessor.recognizeImage() come secondo parametro, come mostrato nell’esempio di codice Java seguente.
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;
// inizializza il motore e ottieni il processore del modello che fornisce il percorso al file .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// ciclo di immagini
for (int i = 0; i < UserImages.length; i++) {
// percorso verso l'immagine da riconoscere
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// riconoscere l'immagine e ricevere il risultato
RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);
// esporta i risultati come stringa csv
String csvResult = result.getCsv();
String json = result.getJson();
// salva csv nella cartella di output
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
Ricalcolo dei risultati OMR
In alcuni casi, potresti voler ricalcolare i risultati OMR con diversi valori di soglia. Invece di chiamare TemplateProcessor.recognizeImage() ancora e ancora in questi casi, puoi configurare l’API per il ricalcolo automatico usando il metodo TemplateProcessor.recalculate() per migliorare l’efficienza dell’elaborazione delle immagini. Nell’esempio di codice seguente viene illustrato 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 e ottieni template processor
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// Imposta la soglia personalizzata da utilizzare nel ricalcolo
// questo valore è compreso nell'intervallo (da 0 a 100)
// rappresenta la percentuale di pixel neri richiesti sull'immagine bolla da riconoscere
// cioè più basso è il valore, meno pixel neri sono necessari per conteggiare la bolla come riempita e viceversa
int CustomThreshold = 40;
// ciclo di immagini
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = image;
System.out.println("Processing image: " + imagePath);
// riconoscere l'immagine
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// ottieni la stringa csv di esportazione
String stringRes = result.getCsv();
// salva csv nella cartella di output
String outputName = UserImagesNoExt[i] + ".csv";
PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
wr.println(stringRes);
System.out.println("Export done. Path: " + outputName);
// ricalcolare i risultati del riconoscimento con una soglia personalizzata
templateProcessor.recalculate(result, CustomThreshold);
// ottieni la stringa csv di esportazione
stringRes = result.getCsv();
// salvare i risultati ricalcolati
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();
}
In caso di domande o domande relative alla nostra libreria Java OMR, contattaci tramite il nostro forum per qualsiasi domanda o domanda.