Optyczne rozpoznawanie znaków (OMR) to proces elektroniczny, który umożliwia odczytywanie i przechwytywanie danych oznaczonych przez ludzi 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 ankiet, kwestionariuszy lub arkuszy testowych i programowo odczytywać dane wprowadzane przez użytkownika. W tym artykule nauczymy się, jak wykonać OMR i wyodrębnić dane z obrazu w Javie.
W tym artykule zostaną omówione następujące tematy:
- Java OMR API do wyodrębniania danych z obrazu
- Wyodrębnij dane z obrazu
- Wykonaj OMR i wyodrębnij dane z wielu obrazów
- Wyodrębnij dane OMR z progiem
- Wyodrębnij dane OMR z ponownym obliczeniem
Java OMR API do wyodrębniania danych z obrazu
Aby wykonać operacje OMR i wyodrębnić dane z obsługiwanych formatów obrazów, będziemy używać Aspose.OMR for Java API. Pozwala projektować, tworzyć i rozpoznawać arkusze odpowiedzi, testy, arkusze MCQ, quizy, formularze zwrotne, ankiety i karty do głosowania.
Klasa OmrEngine API obsługuje tworzenie szablonu i przetwarzanie obrazu. Metoda getTemplateProcessor(String templatePath) tej klasy tworzy instancję TemplateProcessor do przetwarzania szablonów i obrazów. Obraz możemy rozpoznać za pomocą metody recognizeImage(String imagePath). Zwraca wszystkie elementy OMR jako instancję klasy RecognitionResult. Metoda getCsv() tej klasy generuje ciąg znaków CSV z wynikami rozpoznawania. Metoda recalculate(RecognitionResult result, int RecognitionThreshold) aktualizuje wynik rozpoznawania przy użyciu precyzyjnie dostrojonych parametrów.
Pobierz plik JAR interfejsu API lub dodaj następującą konfigurację pom.xml w aplikacji Java opartej na 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>
Wyodrębnij dane z obrazu w Javie
Do wykonania operacji OMR potrzebujemy przygotowanego szablonu OMR (.omr) wraz z obrazem wypełnionych przez użytkownika formularzy/arkuszy. 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ę seekImage() 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 wyodrębnić dane OMR z obrazu w formacie CSV przy użyciu języka Java.
// Ten przykład kodu demonstruje, jak wykonać OMR na obrazie i wyodrębnić dane
// Ścieżka pliku szablonu OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Ścieżka pliku obrazu
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// 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
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Proszę pobierz szablon OMR użyty w tym poście na blogu.
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 wyodrębnić dane OMR z wielu obrazów przy użyciu języka Java.
// Ten przykład kodu demonstruje, jak wykonać OMR na wielu obrazach i wyodrębnić dane
// Ścieżka folderu roboczego
String folderPath = "C:\\Files\\OMR\\";
// Ścieżka pliku szablonu OMR
String templatePath = folderPath + "Sheet.omr";
// Ścieżka pliku obrazu
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// Zainicjuj silnik OMR
OmrEngine engine = new OmrEngine();
// Pobierz procesor szablonów
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Przetwarzaj obrazy jeden po drugim w pętli
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// Rozpoznaj obraz
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Uzyskaj wyniki w pliku CSV
String csvResult = result.getCsv();
// Zapisz plik CSV
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
Wyodrębnij dane OMR z progiem w Javie
W zależności od wymagań możemy wykonać operacje OMR z wartością progową (od 0 do 100). Im wyższa wartość progu, tym API bardziej rygorystycznie zaznacza odpowiedzi. Wykonaj czynności wymienione wcześniej, aby wykonać OMR z progiem. Jednak wystarczy, że w kroku 3 wywołamy przeciążoną metodę seekImage(string, int32). Jako argumenty pobiera ona ścieżkę do pliku obrazu i wartość progową.
Poniższy przykładowy kod pokazuje, jak wykonać OMR z wartością progową przy użyciu języka Java.
// Ten przykład kodu demonstruje, jak wykonać OMR z therashold i wyodrębnić dane z obrazu
// Ścieżka pliku szablonu OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Ścieżka pliku obrazu
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// 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
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
Wyodrębnij dane OMR z ponownym obliczeniem w Javie
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 przy użyciu metody 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 pobierz obiekt RecognitionResult, wywołując metodę seekImage() ze ścieżką obrazu jako argumentem.
- Następnie wyeksportuj wyniki rozpoznawania jako ciąg CSV za pomocą metody getCsv().
- Następnie zapisz wynik CSV jako plik CSV na dysku lokalnym.
- Następnie wywołaj metodę recalculate(). Jako argumenty przyjmuje obiekt RecognitionResult i wartość progową.
- Następnie wyeksportuj wyniki rozpoznawania jako ciąg 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 Java.
// Ścieżka pliku szablonu OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Ścieżka pliku obrazu
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// 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
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// Przelicz
// Tutaj możesz zastosować nową wartość progową
templateProcessor.recalculate(result, CustomThreshold);
// Uzyskaj przeliczone wyniki w pliku CSV
csvResult = result.getCsv();
// Zapisz ponownie obliczony wynikowy plik CSV
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(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;
- programowo wyodrębniać dane w formacie CSV;
- zastosuj ustawienie progu podczas wykonywania OMR na obrazach;
- przeliczyć wyniki OMR w procesie motoryzacyjnym przy użyciu języka Java.
Poza tym, wydobywając dane z obrazu w Javie, możesz dowiedzieć się więcej o Aspose.OMR for Java API korzystając z dokumentacji. W przypadku jakichkolwiek niejasności prosimy o kontakt na naszym bezpłatnym forum pomocy technicznej.