Esegui OMR ed estrai dati utilizzando Java

Il riconoscimento ottico del marchio (OMR) è un processo elettronico che consente la lettura e l’acquisizione di dati contrassegnati da persone su un tipo speciale di modulo di documento. Questo modulo di documento potrebbe essere un test o un sondaggio, costituito da input a bolle o quadrati compilati dagli utenti. Possiamo facilmente eseguire operazioni OMR sulle immagini scansionate di tali moduli di indagine, questionari o fogli di prova e leggere gli input dell’utente in modo programmatico. In questo articolo impareremo come eseguire OMR ed estrarre dati da un’immagine in Java.

In questo articolo verranno trattati i seguenti argomenti:

  1. API Java OMR per estrarre i dati dall’immagine
  2. Estrai i dati da un’immagine
  3. Esegui OMR ed estrai dati da più immagini
  4. Estrai i dati OMR con la soglia
  5. Estrai i dati OMR con il ricalcolo

API Java OMR per estrarre i dati dall’immagine

Per eseguire operazioni OMR ed estrarre dati da formati immagine supportati, utilizzeremo l’Aspose.OMR per Java API. Consente di progettare, creare e riconoscere fogli di risposta, test, documenti MCQ, quiz, moduli di feedback, sondaggi e schede elettorali.

La classe OmrEngine dell’API gestisce la creazione del modello e l’elaborazione dell’immagine. Il metodo getTemplateProcessor(String templatePath) di questa classe crea l’istanza TemplateProcessor per l’elaborazione di modelli e immagini. Possiamo riconoscere un’immagine usando il metodo recognizeImage(String imagePath). Restituisce tutti gli elementi OMR come un’istanza della classe RecognitionResult. Il metodo getCsv() di questa classe genera una stringa CSV con i risultati del riconoscimento. Il metodo recalculate(RecognitionResult result, int recognitionThreshold) aggiorna il risultato del riconoscimento utilizzando parametri ottimizzati.

Si prega di scaricare il JAR dell’API o aggiungere la seguente configurazione pom.xml in un’applicazione Java basata su Maven.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
     <groupId>com.aspose</groupId>
     <artifactId>aspose-omr</artifactId>
     <version>19.12</version>
</dependency>

Estrai dati da un’immagine in Java

Abbiamo bisogno del modello OMR preparato (.omr) insieme all’immagine di moduli/fogli compilati dall’utente per eseguire l’operazione OMR. Possiamo eseguire un’operazione OMR su un’immagine ed estrarre i dati seguendo i passaggi indicati di seguito:

  1. Innanzitutto, crea un’istanza della classe OmrEngine.
  2. Quindi, chiama il metodo getTemplateProcessor() e inizializza l’oggetto classe TemplateProcessor. Prende il percorso del file modello OMR come argomento.
  3. Quindi, ottieni l’oggetto RecognitionResult chiamando il metodo RecognitionResult con il percorso dell’immagine come argomento.
  4. Successivamente, ottieni i risultati del riconoscimento come stringhe CSV utilizzando il metodo getCsv().
  5. Infine, salva il risultato CSV come file CSV sul disco locale.

L’esempio di codice seguente mostra come estrarre i dati OMR da un’immagine in formato CSV utilizzando Java.

// Questo esempio di codice mostra come eseguire OMR su un'immagine ed estrarre i dati
// Percorso file modello OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Percorso del file immagine
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Inizializza il motore OMR
OmrEngine engine = new OmrEngine();

// Ottieni processore modello
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Riconosci l'immagine
RecognitionResult result = templateProcessor.recognizeImage(imagePath);

// Ottieni risultati in CSV
String csvResult = result.getCsv();

// Salva file CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Estrarre-dati-da-un-immagine-in-Java

Esegui OMR ed estrai dati da un’immagine in Java.

Si prega di scaricare il modello OMR utilizzato in questo post del blog.

Esegui OMR ed estrai dati da più immagini

Possiamo eseguire operazioni OMR su più immagini ed estrarre i dati in un file CSV separato per ciascuna immagine seguendo i passaggi menzionati in precedenza. Tuttavia, dobbiamo ripetere i passaggi n. 3, 4 e 5 per tutte le immagini una per una.

L’esempio di codice seguente mostra come estrarre i dati OMR da più immagini utilizzando Java.

// Questo esempio di codice mostra come eseguire OMR su più immagini ed estrarre dati
// Percorso della cartella di lavoro
String folderPath = "C:\\Files\\OMR\\";

// Percorso file modello OMR
String templatePath = folderPath + "Sheet.omr";

// Percorso del file immagine
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };

// Inizializza il motore OMR
OmrEngine engine = new OmrEngine();

// Ottieni processore modello
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Elabora le immagini una per una in un ciclo
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = folderPath + image;

    // Riconosci l'immagine
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // Ottieni risultati in CSV
    String csvResult = result.getCsv();

    // Salva file CSV
    PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
    wr.println(csvResult);
    System.out.println(csvResult);
}

Estrai dati OMR con soglia in Java

Possiamo eseguire operazioni OMR con un valore di soglia (da 0 a 100) a seconda delle esigenze. Più alto è il valore della soglia rende l’API più rigorosa nell’evidenziare le risposte. Segui i passaggi menzionati in precedenza per eseguire l’OMR con la soglia. Tuttavia, abbiamo solo bisogno di chiamare il metodo sovraccaricato recognizeImage(string, int32) nel passaggio n. 3. Prende il percorso del file immagine e il valore di soglia come argomenti.

L’esempio di codice seguente mostra come eseguire OMR con valore di soglia utilizzando Java.

// Questo esempio di codice mostra come eseguire OMR con therashold ed estrarre i dati da un'immagine
// Percorso file modello OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Percorso del file immagine
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valore di soglia
int CustomThreshold = 40;

// Inizializza il motore OMR
OmrEngine engine = new OmrEngine();

// Ottieni processore modello
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Riconosci l'immagine
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Ottieni risultati in CSV
String csvResult = result.getCsv();

// Salva file CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);

Estrai dati OMR con ricalcolo in Java

In alcuni casi, potrebbe essere necessario ricalcolare i risultati OMR con valori di soglia diversi. A tale scopo, possiamo configurare l’API per ricalcolare automaticamente utilizzando il metodo TemplateProcessor.recalculate(). Consente di elaborare un’immagine più volte modificando l’impostazione della soglia per ottenere il risultato desiderato. Possiamo eseguire l’operazione OMR con ricalcolo seguendo i passaggi indicati di seguito:

  1. Innanzitutto, crea un’istanza della classe OmrEngine.
  2. Quindi, chiama il metodo getTemplateProcessor() e inizializza l’oggetto classe TemplateProcessor. Prende il percorso del file modello OMR come argomento.
  3. Quindi, ottieni l’oggetto RecognitionResult chiamando il metodo RecognitionResult con il percorso dell’immagine come argomento.
  4. Quindi, esporta i risultati del riconoscimento come stringa CSV usando il metodo getCsv().
  5. Quindi, salva il risultato CSV come file CSV sul disco locale.
  6. Quindi, chiama il metodo recalculate(). Prende l’oggetto RecognitionResult e il valore di soglia come argomenti.
  7. Successivamente, esporta i risultati del riconoscimento come stringa CSV utilizzando il metodo getCsv().
  8. Infine, salva il risultato CSV come file CSV sul disco locale.

L’esempio di codice seguente mostra come eseguire OMR con il metodo di ricalcolo utilizzando Java.

// Percorso file modello OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Percorso del file immagine
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valore di soglia
int CustomThreshold = 40;

// Inizializza il motore OMR
OmrEngine engine = new OmrEngine();

// Ottieni processore modello
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Riconosci l'immagine
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Ottieni risultati in CSV
String csvResult = result.getCsv();

// Salva file CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);

// Ricalcola
// È possibile applicare un nuovo valore di soglia qui
templateProcessor.recalculate(result, CustomThreshold);

// Ottieni risultati ricalcolati in CSV
csvResult = result.getCsv();

// Salva il file CSV risultante ricalcolato
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);

Ottieni una licenza gratuita

Puoi ottenere una licenza temporanea gratuita per provare la libreria senza limitazioni di valutazione.

Conclusione

In questo articolo abbiamo imparato a:

  • eseguire operazioni OMR sulle immagini;
  • estrarre i dati in formato CSV in modo programmatico;
  • applicare l’impostazione della soglia durante l’esecuzione di OMR sulle immagini;
  • ricalcolare i risultati OMR in un processo automobilistico utilizzando Java.

Inoltre, estraendo dati da un’immagine in Java, puoi saperne di più su Aspose.OMR per l’API Java usando la documentazione. In caso di ambiguità, non esitare a contattarci sul nostro forum di supporto gratuito.

Guarda anche