Esegui OMR ed estrai dati usando C#

Il riconoscimento ottico del marchio (OMR) consente la lettura e l’acquisizione di dati contrassegnati su un tipo speciale di modulo di documento. Questo modulo del 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 o fogli di prova e leggere gli input dell’utente in modo programmatico nelle applicazioni .NET. In questo articolo impareremo come eseguire OMR ed estrarre i dati usando C#.

In questo articolo verranno trattati i seguenti argomenti:

API C# OMR per eseguire OMR ed estrarre dati

Per eseguire operazioni OMR ed esportare dati dalle immagini, utilizzeremo Aspose.OMR for .NET API. Consente di progettare, creare e riconoscere fogli di risposta, test, documenti MCQ, quiz, moduli di feedback, sondaggi e schede elettorali. Si prega di scaricare la DLL dell’API o installarla utilizzando NuGet.

PM> Install-Package Aspose.OMR

Esegui OMR ed estrai dati dall’immagine

Per eseguire l’operazione OMR su un’immagine, abbiamo bisogno del modello OMR preparato (.omr) e dell’immagine (moduli/fogli compilati dall’utente) su cui eseguire l’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 RecognizeImage() 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 eseguire OMR su un’immagine ed estrarre i dati in formato CSV usando C#.

// Percorso file modello OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Percorso del file immagine
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Esegui OMR ed estrai dati dalle immagini

Esegui OMR ed estrai dati dalle immagini.

Il modello OMR utilizzato nell’esempio di codice sopra può essere scaricato da qui.

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 eseguire OMR su più immagini ed estrarre i dati in formato CSV usando C#.

// Percorso file modello OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Percorso del file della cartella Immagini
string imageFolderPath = @"D:\Files\OMR\";

// Percorso della directory di output
string outputPath = @"D:\Files\OMR\";

// Immagini da elaborare
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

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

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

// Elabora le immagini una per una
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Riconosci l'immagine
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Ottieni risultati in CSV
    string csvResult = result.GetCsv();

    // Salva file CSV
    File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}

L’API fornisce anche funzionalità per rilevare e riconoscere eventuali codici a barre disponibili sull’immagine durante il funzionamento OMR. È la funzione predefinita dell’operazione OMR. Possiamo eseguire operazioni OMR e riconoscere codici a barre seguendo i passaggi indicati in precedenza.

Ottieni risultati OMR con Soglia

Possiamo applicare la soglia durante l’esecuzione di operazioni OMR sulle immagini. Il valore della soglia può variare da 0 a 100 a seconda delle esigenze. Maggiore è il valore della soglia, l’API diventa più rigorosa per quanto riguarda l’evidenziazione delle risposte. Segui i passaggi menzionati in precedenza per eseguire l’OMR con la soglia. Tuttavia, dobbiamo solo chiamare il metodo sovraccarico 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 un valore di soglia usando C#.

// Percorso file modello OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Percorso del file immagine
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

Operazione OMR con ricalcolo

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, inizializza l’oggetto Stopwatch e avvia il timer.
  4. Quindi, ottieni l’oggetto RecognitionResult chiamando il metodo RecognizeImage() con il percorso dell’immagine come argomento.
  5. Quindi, arresta il timer ed esporta i risultati del riconoscimento come stringa CSV utilizzando il metodo GetCsv().
  6. Quindi, salva il risultato CSV come file CSV sul disco locale.
  7. Quindi, riavvia il timer usando il metodo Restart().
  8. Quindi, chiama il metodo Recalculate(). Prende l’oggetto RecognitionResult e il valore di soglia come argomenti.
  9. Successivamente, arresta il timer ed esporta i risultati del riconoscimento come stringa CSV utilizzando il metodo GetCsv().
  10. 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 usando C#.

// Percorso file modello OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Percorso del file immagine
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Valore di soglia
int CustomThreshold = 40;

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

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

// Timer per la misurazione delle prestazioni
Stopwatch sw = Stopwatch.StartNew();

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

sw.Stop();

// Ottieni risultati in CSV
string csvResult = result.GetCsv();

// Salva file CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// Ricalcola
templateProcessor.Ricalcola(result, CustomThreshold);
sw.Stop();

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

// Salva il file CSV risultante ricalcolato
File.WriteAllText(@"D:\Files\OMR\Sheet1_Ricalcolad.csv", 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 ed estrarre i dati in formato CSV utilizzando C#;
  • applicare l’impostazione della soglia durante l’esecuzione di OMR sulle immagini;
  • ricalcolare i risultati OMR in un processo automobilistico in modo programmatico.

Inoltre, puoi saperne di più su Aspose.OMR per .NET API usando la documentazione. In caso di ambiguità, non esitare a contattarci sul forum.

Guarda anche