Оптичне розпізнавання позначок (OMR) — це електронний процес, який дозволяє зчитувати та фіксувати дані, позначені людьми на спеціальному типі форми документа. Ця форма документа може бути тестом або опитуванням, що складається з бульбашок або квадратів, заповнених користувачами. Ми можемо легко виконувати операції OMR на відсканованих зображеннях таких форм опитування, анкет або тестових аркушів і програмно зчитувати введені користувачем дані. У цій статті ми дізнаємося, як виконувати OMR і витягувати дані із зображення в Java.
У цій статті будуть розглянуті такі теми:
- API Java OMR для вилучення даних із зображення
- Витягти дані із зображення
- Виконайте 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 recognitionThreshold) оновлює результат розпізнавання за допомогою точно налаштованих параметрів.
Завантажте 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, викликавши метод RecognitionImage() із шляхом до зображення як аргументом.
- Після цього отримайте результати розпізнавання у вигляді рядків CSV за допомогою методу getCsv().
- Нарешті, збережіть результат CSV як файл CSV на локальному диску.
У наведеному нижче прикладі коду показано, як витягти дані OMR із зображення у форматі CSV за допомогою Java.
// Цей приклад коду демонструє, як виконувати OMR на зображенні та витягувати дані
// Шлях до файлу шаблону OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Шлях до файлу зображення
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// Ініціалізація OMR Engine
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 Engine
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 за допомогою Threshold у Java
Ми можемо виконувати операції OMR із пороговим значенням (від 0 до 100) залежно від вимог. Чим вище значення порогу, API більш суворо підкреслює відповіді. Будь ласка, виконайте кроки, згадані раніше, щоб виконати OMR із пороговим значенням. Однак нам просто потрібно викликати перевантажений метод acceptImage(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 Engine
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, викликавши метод RecognitionImage() із шляхом до зображення як аргументом.
- Потім експортуйте результати розпізнавання як рядок 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 Engine
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 за допомогою документації. У разі будь-яких неясностей зв’яжіться з нами на нашому безкоштовному форумі підтримки.