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
- Wykonaj OMR i wyodrębnij dane z obrazu
- Wykonaj OMR i wyodrębnij dane z wielu obrazów
- Uzyskaj wyniki OMR z progiem
- Operacja OMR z przeliczeniem
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:
- Najpierw utwórz instancję klasy OmrEngine.
- Następnie wywołaj metodę GetTemplateProcessor() i zainicjuj obiekt klasy TemplateProcessor. Jako argument przyjmuje ścieżkę pliku szablonu OMR.
- Następnie pobierz obiekt RecognitionResult, wywołując metodę RecognizeImage() ze ścieżką obrazu jako argumentem.
- Następnie uzyskaj wyniki rozpoznawania jako ciągi CSV za pomocą metody GetCsv().
- 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);
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:
- Najpierw utwórz instancję klasy OmrEngine.
- Następnie wywołaj metodę GetTemplateProcessor() i zainicjuj obiekt klasy TemplateProcessor. Jako argument przyjmuje ścieżkę pliku szablonu OMR.
- Następnie zainicjuj obiekt Stopwatch i uruchom stoper.
- Następnie pobierz obiekt RecognitionResult, wywołując metodę RecognizeImage() ze ścieżką obrazu jako argumentem.
- Następnie zatrzymaj stoper i wyeksportuj wyniki rozpoznawania jako ciąg CSV przy użyciu metody GetCsv().
- Następnie zapisz wynik CSV jako plik CSV na dysku lokalnym.
- Następnie zrestartuj stoper za pomocą metody Restart().
- Następnie wywołaj metodę Recalculate(). Jako argumenty przyjmuje obiekt RecognitionResult i wartość progową.
- Następnie zatrzymaj stoper i wyeksportuj wyniki rozpoznawania jako ciąg znaków CSV przy użyciu metody GetCsv().
- 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.