Wykonaj OMR i wyodrębnij dane przy użyciu języka Java

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:

  1. Java OMR API do wyodrębniania danych z obrazu
  2. Wyodrębnij dane z obrazu
  3. Wykonaj OMR i wyodrębnij dane z wielu obrazów
  4. Wyodrębnij dane OMR z progiem
  5. 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:

  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ę seekImage() 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 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);
Wyodrębnianie danych z obrazu w Javie

Wykonaj OMR i wyodrębnij dane z obrazu w Javie.

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:

  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ę seekImage() ze ścieżką obrazu jako argumentem.
  4. Następnie wyeksportuj wyniki rozpoznawania jako ciąg CSV za pomocą metody getCsv().
  5. Następnie zapisz wynik CSV jako plik CSV na dysku lokalnym.
  6. Następnie wywołaj metodę recalculate(). Jako argumenty przyjmuje obiekt RecognitionResult i wartość progową.
  7. Następnie wyeksportuj wyniki rozpoznawania jako ciąg CSV przy użyciu metody getCsv().
  8. 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.

Zobacz też