Wykonaj OMR i wyodrębnij dane za pomocą C#

Optyczne rozpoznawanie znaków (OMR) umożliwia odczytywanie i przechwytywanie danych oznaczonych na specjalnym formularzu dokumentu. Ten formularz dokumentu może być testem lub ankietą, składającą się z bąbelków lub kwadratów wprowadzanych przez użytkowników. Możemy łatwo wykonywać operacje OMR na zeskanowanych obrazach takich formularzy ankietowych lub arkuszy testowych oraz programowo odczytywać dane wprowadzane przez użytkownika w aplikacjach .NET. W tym artykule dowiemy się, jak wykonać OMR i wyodrębnić dane przy użyciu języka C#.

W tym artykule zostaną omówione następujące tematy:

Interfejs API C# OMR do wykonywania OMR i wyodrębniania danych

Do wykonywania operacji OMR i eksportowania danych z obrazów będziemy używać Aspose.OMR for .NET API. Pozwala projektować, tworzyć i rozpoznawać arkusze odpowiedzi, testy, arkusze MCQ, quizy, formularze zwrotne, ankiety i karty do głosowania. Pobierz bibliotekę DLL interfejsu API lub zainstaluj ją za pomocą NuGet.

PM> Install-Package Aspose.OMR

Wykonaj OMR i wyodrębnij dane z obrazu

Aby wykonać operację OMR na obrazie, potrzebujemy przygotowanego szablonu OMR (.omr) oraz obrazu (formularzy/arkuszy wypełnianych przez użytkownika), na którym ma zostać wykonany OMR. Możemy wykonać operację OMR na obrazie i wyodrębnić dane, wykonując czynności podane poniżej:

  1. Najpierw utwórz instancję klasy OmrEngine.
  2. Następnie wywołaj metodę GetTemplateProcessor() i zainicjuj obiekt klasy TemplateProcessor. Jako argument przyjmuje ścieżkę pliku szablonu OMR.
  3. Następnie pobierz obiekt RecognitionResult, wywołując metodę RecognizeImage() ze ścieżką obrazu jako argumentem.
  4. Następnie uzyskaj wyniki rozpoznawania jako ciągi CSV za pomocą metody GetCsv().
  5. Na koniec zapisz wynik CSV jako plik CSV na dysku lokalnym.

Poniższy przykładowy kod pokazuje, jak wykonać OMR na obrazie i wyodrębnić dane w formacie CSV przy użyciu języka C#.

// Ścieżka pliku szablonu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ścieżka pliku obrazu
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Zainicjuj silnik OMR
OmrEngine engine = new OmrEngine();

// Pobierz procesor szablonów
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Rozpoznaj obraz
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);

// Uzyskaj wyniki w pliku CSV
string csvResult = result.GetCsv();

// Zapisz plik CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Wykonaj OMR i wyodrębnij dane z obrazów

Wykonaj OMR i wyodrębnij dane z obrazów.

Szablon OMR użyty w powyższym przykładzie kodu można pobrać z tutaj.

Wykonaj OMR i wyodrębnij dane z wielu obrazów

Możemy wykonywać operacje OMR na wielu obrazach i wyodrębniać dane w osobnym pliku CSV dla każdego obrazu, wykonując czynności wspomniane wcześniej. Musimy jednak powtórzyć kroki nr 3, 4 i 5 dla wszystkich obrazów jeden po drugim.

Poniższy przykładowy kod pokazuje, jak wykonać OMR na wielu obrazach i wyodrębnić dane w formacie CSV przy użyciu języka C#.

// Ścieżka pliku szablonu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ścieżka pliku folderu obrazów
string imageFolderPath = @"D:\Files\OMR\";

// Ścieżka katalogu wyjściowego
string outputPath = @"D:\Files\OMR\";

// Obrazy do obróbki
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// Zainicjuj silnik OMR
OmrEngine engine = new OmrEngine();

// Pobierz procesor szablonów
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Przetwarzaj obrazy jeden po drugim
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Rozpoznaj obraz
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Uzyskaj wyniki w pliku CSV
    string csvResult = result.GetCsv();

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

API zapewnia również funkcjonalność wykrywania i rozpoznawania wszelkich kodów kreskowych dostępnych na obrazie podczas operacji OMR. Jest to domyślna funkcja operacji OMR. Możemy wykonywać operacje OMR i rozpoznawać kody kreskowe, wykonując czynności wspomniane wcześniej.

Uzyskaj wyniki OMR z progiem

Próg możemy zastosować podczas wykonywania operacji OMR na obrazach. Wartość progu może wynosić od 0 do 100 w zależności od wymagań. Im wyższa wartość progu, tym API staje się bardziej restrykcyjne pod względem podświetlania odpowiedzi. Wykonaj czynności wymienione wcześniej, aby wykonać OMR z progiem. Jednak wystarczy wywołać przeciążoną metodę RecognizeImage(string, int32) w kroku nr 3. Pobiera ona ścieżkę do pliku obrazu i wartość progową jako argumenty.

Poniższy przykładowy kod pokazuje, jak wykonać OMR z wartością progową przy użyciu języka C#.

// Ścieżka pliku szablonu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ścieżka pliku obrazu
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Wartość progowa
int CustomThreshold = 40;

// Zainicjuj silnik OMR
OmrEngine engine = new OmrEngine();

// Pobierz procesor szablonów
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Rozpoznaj obraz
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

// Uzyskaj wyniki w pliku CSV
string csvResult = result.GetCsv();

// Zapisz plik CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

Operacja OMR z przeliczeniem

W niektórych przypadkach może być konieczne ponowne obliczenie wyników OMR z innymi wartościami progowymi. W tym celu możemy skonfigurować API do automatycznego przeliczania metodą TemplateProcessor.recalculate(). Pozwala na wielokrotne przetwarzanie obrazu poprzez zmianę ustawienia progu w celu uzyskania pożądanego rezultatu. Możemy wykonać operację OMR z ponownym obliczeniem, wykonując następujące czynności:

  1. Najpierw utwórz instancję klasy OmrEngine.
  2. Następnie wywołaj metodę GetTemplateProcessor() i zainicjuj obiekt klasy TemplateProcessor. Jako argument przyjmuje ścieżkę pliku szablonu OMR.
  3. Następnie zainicjuj obiekt Stopwatch i uruchom stoper.
  4. Następnie pobierz obiekt RecognitionResult, wywołując metodę RecognizeImage() ze ścieżką obrazu jako argumentem.
  5. Następnie zatrzymaj stoper i wyeksportuj wyniki rozpoznawania jako ciąg CSV przy użyciu metody GetCsv().
  6. Następnie zapisz wynik CSV jako plik CSV na dysku lokalnym.
  7. Następnie zrestartuj stoper za pomocą metody Restart().
  8. Następnie wywołaj metodę Recalculate(). Jako argumenty przyjmuje obiekt RecognitionResult i wartość progową.
  9. Następnie zatrzymaj stoper i wyeksportuj wyniki rozpoznawania jako ciąg znaków CSV przy użyciu metody GetCsv().
  10. Na koniec zapisz wynik CSV jako plik CSV na dysku lokalnym.

Poniższy przykładowy kod pokazuje, jak wykonać OMR przy użyciu metody ponownego obliczania przy użyciu języka C#.

// Ścieżka pliku szablonu OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ścieżka pliku obrazu
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Wartość progowa
int CustomThreshold = 40;

// Zainicjuj silnik OMR
OmrEngine engine = new OmrEngine();

// Pobierz procesor szablonów
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Timer do mierzenia wydajności
Stopwatch sw = Stopwatch.StartNew();

// Rozpoznaj obraz
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

sw.Stop();

// Uzyskaj wyniki w pliku CSV
string csvResult = result.GetCsv();

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

sw.Restart();

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

// Uzyskaj przeliczone wyniki w pliku CSV
csvResult = result.GetCsv();

// Zapisz ponownie obliczony wynikowy plik CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1_Przeliczd.csv", csvResult);

Uzyskaj bezpłatną licencję

Możesz uzyskać bezpłatną tymczasową licencję, aby wypróbować bibliotekę bez ograniczeń ewaluacyjnych.

Wniosek

W tym artykule dowiedzieliśmy się, jak:

  • wykonać operację OMR na obrazach i wyodrębnić dane w formacie CSV za pomocą C#;
  • zastosuj ustawienie progu podczas wykonywania OMR na obrazach;
  • programowo przeliczyć wyniki OMR w procesie motoryzacyjnym.

Poza tym możesz dowiedzieć się więcej o Aspose.OMR for .NET API korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na forum.

Zobacz też