Utför OMR och extrahera data från bild i C#

Optisk märkesigenkänning (OMR) gör det möjligt att läsa och fånga data markerade på en speciell typ av dokumentformulär. Detta dokumentformulär kan vara ett test eller en undersökning, bestående av bubblor eller kvadratiska inmatningar som fylls av användare. Vi kan enkelt utföra OMR-operationer på de skannade bilderna av sådana undersökningsformulär eller testblad och läsa användarinmatningarna programmatiskt i .NET-applikationer. I den här artikeln kommer vi att lära oss hur man utför OMR och extraherar data från en bild i C#.

Följande ämnen ska behandlas i den här artikeln:

  1. C# OMR API för att extrahera data från bild
  2. Utför OMR och extrahera data från bild
  3. Utför OMR och extrahera data från flera bilder
  4. Hämta OMR-resultat med tröskel
  5. OMR Operation with Recalculation

C# OMR API för att extrahera data från bild

För att utföra OMR-operationer och exportera data från bilder kommer vi att använda Aspose.OMR for .NET API. Det gör det möjligt att designa, skapa och känna igen svarsblad, tester, MCQ-uppsatser, frågesporter, feedbackformulär, enkäter och omröstningar.

Vänligen antingen ladda ned API:ets DLL eller installera den med NuGet.

PM> Install-Package Aspose.OMR

Utför OMR och extrahera data från bild med C#

För att kunna utföra OMR-operation på en bild behöver vi den förberedda OMR-mallen (.omr) och bilden (användarfyllda formulär/ark) att utföra OMR på. Vi kan utföra en OMR-operation på en bild och extrahera data genom att följa stegen nedan:

  1. Skapa först en instans av klassen OmrEngine.
  2. Anropa sedan metoden GetTemplateProcessor() och initiera klassobjektet TemplateProcessor. Den tar OMR-mallens filsökväg som ett argument.
  3. Hämta sedan objektet RecognitionResult genom att anropa metoden RecognizeImage() med bildsökvägen som argument.
  4. Efter det får du igenkänningsresultat som CSV-strängar med metoden GetCsv().
  5. Spara slutligen CSV-resultatet som en CSV-fil på den lokala disken.

Följande kodexempel visar hur man utför OMR på en bild och extraherar data i CSV-format med C#.

// OMR-mallfilsökväg
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Sökväg till bildfil
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Känner igen bilden
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);

// Få resultat i CSV
string csvResult = result.GetCsv();

// Spara CSV-fil
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Utför OMR och extrahera data från bilder

Utför OMR och extrahera data från bilder.

OMR-mallen som används i ovanstående kodexempel kan laddas ner från här.

Extrahera data från flera bilder i C#

Vi kan utföra OMR-operationer på flera bilder och extrahera data i en separat CSV-fil för varje bild genom att följa stegen som nämnts tidigare. Vi måste dock upprepa steg #3, 4 och 5 för alla bilderna en efter en.

Följande kodexempel visar hur man utför OMR på flera bilder och extraherar data i CSV-format med C#.

// OMR-mallfilsökväg
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Sökväg till mappen för bilder
string imageFolderPath = @"D:\Files\OMR\";

// Utdatakatalogsökväg
string outputPath = @"D:\Files\OMR\";

// Bilder som ska bearbetas
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Bearbeta bilder en efter en
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Känner igen bilden
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Få resultat i CSV
    string csvResult = result.GetCsv();

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

API:et tillhandahåller också funktionalitet för att upptäcka och känna igen alla streckkoder som finns på bilden under OMR-drift. Det är standardfunktionen för OMR-operationen. Vi kan utföra OMR-operationer och känna igen streckkoder genom att följa stegen som nämnts tidigare.

Få OMR-resultat med Threshold i C#

Vi kan tillämpa tröskeln medan vi utför OMR-operationer på bilder. Värdet på tröskeln kan vara från 0 till 100 beroende på kraven. Ju högre tröskelvärdet är, desto strängare blir API:et när det gäller att markera svaren. Följ stegen som nämnts tidigare för att utföra OMR med tröskeln. Men vi behöver bara anropa den överbelastade metoden RecognizeImage(string, int32) i steg #3. Den tar bildfilens sökväg och tröskelvärdet som argument.

Följande kodexempel visar hur man utför OMR med tröskelvärde med C#.

// OMR-mallfilsökväg
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Sökväg till bildfil
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Tröskelvärde
int CustomThreshold = 40;

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Känner igen bilden
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

// Få resultat i CSV
string csvResult = result.GetCsv();

// Spara CSV-fil
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

OMR-operation med omräkning i C#

I vissa fall kan vi behöva räkna om OMR-resultaten med olika tröskelvärden. För detta ändamål kan vi konfigurera API:et för att automatiskt beräkna om med metoden TemplateProcessor.recalculate(). Det gör det möjligt att bearbeta en bild flera gånger genom att ändra tröskelvärdet för att få önskat resultat. Vi kan utföra OMR-operation med omräkning genom att följa stegen nedan:

  1. Skapa först en instans av klassen OmrEngine.
  2. Anropa sedan metoden GetTemplateProcessor() och initiera klassobjektet TemplateProcessor. Den tar OMR-mallens filsökväg som ett argument.
  3. Initiera sedan stoppursobjektet och starta timern.
  4. Hämta sedan objektet RecognitionResult genom att anropa metoden RecognizeImage() med bildsökvägen som argument.
  5. Stoppa sedan timern och exportera igenkänningsresultat som en CSV-sträng med metoden GetCsv().
  6. Spara sedan CSV-resultatet som en CSV-fil på den lokala disken.
  7. Starta sedan om timern med Restart()-metoden.
  8. Anropa sedan metoden Recalculate(). Det tar RecognitionResult-objektet och tröskelvärdet som argument.
  9. Efter det stoppar du timern och exporterar igenkänningsresultaten som en CSV-sträng med metoden GetCsv().
  10. Spara slutligen CSV-resultatet som en CSV-fil på den lokala disken.

Följande kodexempel visar hur man utför OMR med omräkningsmetoden med C#.

// OMR-mallfilsökväg
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Sökväg till bildfil
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Tröskelvärde
int CustomThreshold = 40;

// Initiera OMR Engine
OmrEngine engine = new OmrEngine();

// Skaffa mallprocessor
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Timer för prestationsmått
Stopwatch sw = Stopwatch.StartNew();

// Känner igen bilden
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

sw.Stop();

// Få resultat i CSV
string csvResult = result.GetCsv();

// Spara CSV-fil
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// Räkna om
templateProcessor.Räkna om(result, CustomThreshold);
sw.Stop();

// Få omräknade resultat i CSV
csvResult = result.GetCsv();

// Spara omräknade resulterande CSV-fil
File.WriteAllText(@"D:\Files\OMR\Sheet1_Räkna omd.csv", csvResult);

Skaffa en gratis licens

Du kan få en gratis tillfällig licens för att prova biblioteket utan utvärderingsbegränsningar.

Slutsats

I den här artikeln har vi lärt oss hur man:

  • utföra OMR-operationer på bilder och extrahera data i CSV-format med C#;
  • tillämpa tröskelinställning medan du utför OMR på bilder;
  • räkna om OMR-resultat i en bilprocess programmatiskt.

Förutom att extrahera OMR-data från bilder i C# kan du lära dig mer om Aspose.OMR för .NET API med dokumentation. I händelse av oklarheter är du välkommen att kontakta oss på vårt gratis supportforum.

Se även