SDK di Riconoscimento Ottico dei Marcatori

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:

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

Libreria OMR Java
**.

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:

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.

Vedi anche