Оптическое распознавание меток (OMR) — это электронный процесс, который позволяет считывать и фиксировать данные, отмеченные людьми в форме документа особого типа. Эта форма документа может быть тестом или опросом, состоящим из кружков или квадратов, заполненных пользователями. Мы можем легко выполнять операции OMR на отсканированных изображениях таких анкет, анкет или тестовых листов и программно считывать вводимые пользователем данные. В этой статье мы узнаем, как выполнять OMR и извлекать данные из изображения в Java.
В этой статье должны быть раскрыты следующие темы:
- Java OMR API для извлечения данных из изображения
- Извлечь данные из изображения
- Выполнение OMR и извлечение данных из нескольких изображений
- Извлечение данных OMR с пороговым значением
- Извлечение данных OMR с пересчетом
Java OMR API для извлечения данных из изображения
Для выполнения операций OMR и извлечения данных из поддерживаемых форматов изображений мы будем использовать Aspose.OMR for Java API. Он позволяет разрабатывать, создавать и распознавать листы ответов, тесты, документы MCQ, викторины, формы обратной связи, опросы и бюллетени.
Класс OmrEngine API отвечает за создание шаблона и обработку изображений. Метод getTemplateProcessor(String templatePath) этого класса создает экземпляр TemplateProcessor для обработки шаблонов и изображений. Мы можем распознать изображение с помощью метода recognizeImage(String imagePath). Он возвращает все элементы OMR как экземпляр класса RecognitionResult. Метод getCsv() этого класса формирует строку CSV с результатами распознавания. Метод recalculate(RecognitionResult result, int authenticationThreshold) обновляет результат распознавания с использованием точных параметров.
Пожалуйста, либо загрузите JAR API, либо добавьте следующую конфигурацию pom.xml в приложение Java на основе 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>
Извлечение данных из изображения в Java
Нам нужен подготовленный шаблон OMR (.omr) вместе с изображением заполненных пользователем форм/листов для выполнения операции OMR. Мы можем выполнить операцию OMR с изображением и извлечь данные, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса OmrEngine.
- Затем вызовите метод getTemplateProcessor() и инициализируйте объект класса TemplateProcessor. В качестве аргумента он принимает путь к файлу шаблона OMR.
- Затем получите объект RecognitionResult, вызвав метод recognizeImage() с путем к изображению в качестве аргумента.
- После этого получить результаты распознавания в виде строк CSV с помощью метода getCsv().
- Наконец, сохраните результат CSV в виде CSV-файла на локальном диске.
В следующем примере кода показано, как извлечь данные OMR из изображения в формате CSV с помощью Java.
// В этом примере кода показано, как выполнять OMR для изображения и извлекать данные.
// Путь к файлу шаблона OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Путь к файлу изображения
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Распознать изображение
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Получить результаты в формате CSV
String csvResult = result.getCsv();
// Сохранить CSV-файл
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Пожалуйста, загрузите шаблон OMR, использованный в этом сообщении в блоге.
Выполнение OMR и извлечение данных из нескольких изображений
Мы можем выполнять операции OMR с несколькими изображениями и извлекать данные в отдельный файл CSV для каждого изображения, выполнив шаги, упомянутые ранее. Однако нам нужно повторить шаги № 3, 4 и 5 для всех изображений по одному.
В следующем примере кода показано, как извлечь данные OMR из нескольких изображений с помощью Java.
// В этом примере кода показано, как выполнять OMR для нескольких изображений и извлекать данные.
// Путь к рабочей папке
String folderPath = "C:\\Files\\OMR\\";
// Путь к файлу шаблона OMR
String templatePath = folderPath + "Sheet.omr";
// Путь к файлу изображения
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Обрабатывайте изображения одно за другим в цикле
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// Распознать изображение
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Получить результаты в формате CSV
String csvResult = result.getCsv();
// Сохранить CSV-файл
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
Извлечение данных OMR с порогом в Java
Мы можем выполнять операции OMR с пороговым значением (от 0 до 100) в зависимости от требований. Чем выше значение порога, тем более строго API выделяет ответы. Выполните шаги, упомянутые ранее, чтобы выполнить OMR с порогом. Однако нам просто нужно вызвать перегруженный метод recognizeImage(string, int32) на шаге № 3. Он принимает путь к файлу изображения и пороговое значение в качестве аргументов.
В следующем примере кода показано, как выполнить OMR с пороговым значением с помощью Java.
// В этом примере кода показано, как выполнять OMR с помощью therashold и извлекать данные из изображения.
// Путь к файлу шаблона OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Путь к файлу изображения
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Пороговое значение
int CustomThreshold = 40;
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Распознать изображение
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Получить результаты в формате CSV
String csvResult = result.getCsv();
// Сохранить CSV-файл
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
Извлечение данных OMR с пересчетом в Java
В некоторых случаях нам может потребоваться пересчитать результаты OMR с другими пороговыми значениями. Для этого мы можем настроить API для автоматического пересчета с использованием метода TemplateProcessor.recalculate(). Это позволяет обрабатывать изображение несколько раз, изменяя настройку порога, чтобы получить желаемый результат. Мы можем выполнить операцию OMR с пересчетом, выполнив следующие шаги:
- Во-первых, создайте экземпляр класса OmrEngine.
- Затем вызовите метод getTemplateProcessor() и инициализируйте объект класса TemplateProcessor. В качестве аргумента он принимает путь к файлу шаблона OMR.
- Затем получите объект RecognitionResult, вызвав метод recognizeImage() с путем к изображению в качестве аргумента.
- Затем экспортируйте результаты распознавания в виде строки CSV с помощью метода getCsv().
- Затем сохраните результат CSV в виде CSV-файла на локальном диске.
- Затем вызовите метод recalculate(). Он принимает объект RecognitionResult и пороговое значение в качестве аргументов.
- После этого экспортируйте результаты распознавания в виде строки CSV с помощью метода getCsv().
- Наконец, сохраните результат CSV в виде CSV-файла на локальном диске.
В следующем примере кода показано, как выполнить OMR с методом пересчета с помощью Java.
// Путь к файлу шаблона OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Путь к файлу изображения
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Пороговое значение
int CustomThreshold = 40;
// Инициализировать механизм OMR
OmrEngine engine = new OmrEngine();
// Получить обработчик шаблонов
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Распознать изображение
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// Получить результаты в формате CSV
String csvResult = result.getCsv();
// Сохранить CSV-файл
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// Пересчитать
// Вы можете применить новое пороговое значение здесь
templateProcessor.recalculate(result, CustomThreshold);
// Получить пересчитанные результаты в CSV
csvResult = result.getCsv();
// Сохранить пересчитанный результирующий CSV-файл
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);
Получить бесплатную лицензию
Вы можете получить бесплатную временную лицензию, чтобы попробовать библиотеку без ограничений пробной версии.
Вывод
В этой статье мы узнали, как:
- выполнять операцию OMR над изображениями;
- извлекать данные в формате CSV программно;
- применять настройку порога при выполнении OMR на изображениях;
- пересчитать результаты OMR в автомобильном процессе с помощью Java.
Кроме того, извлекая данные из изображения на Java, вы можете узнать больше об Aspose.OMR for Java API, используя документацию. В случае возникновения каких-либо неясностей, пожалуйста, свяжитесь с нами на нашем бесплатном форуме поддержки.