Оптическое распознавание меток (OMR) часто используется для проверки опросов, анкет и экзаменационных работ с несколькими вариантами ответов. Это быстрый и точный способ обработки форм. В этой статье вы узнаете, как создавать шаблоны OMR и проверять заполненные листы ответов с помощью Java.

Java API для создания шаблонов OMR и выполнения операции OMR

Aspose.OMR для Java — это API распознавания оптических меток, который может выполнять операции OMR с PNG, GIF, JPEG, TIFF, и т.д. изображения. API также поддерживает создание шаблонов OMR. Вы можете загрузить API напрямую из раздела downloads или установить его, используя следующую конфигурацию Maven.

<repositories>
    <repository>
        <id>AsposeJavaAPI</id>
        <name>Aspose Java API</name>
        <url>http://repository.aspose.com/repo/</url>
    </repository>
</repositories>
<dependency>
	<groupId>com.aspose</groupId>
	<artifactId>aspose-omr</artifactId>
	<version>19.12</version>
	<classifier>jdk6</classifier>
</dependency>

<dependency>
	<groupId>com.aspose</groupId>
	<artifactId>aspose-omr</artifactId>
	<version>19.12</version>
	<classifier>javadoc</classifier>
</dependency>

Создайте шаблон OMR и изображение листа ответов с помощью Java

В этом разделе вы узнаете, как создавать файлы шаблонов OMR и изображения листов ответов с помощью простой текстовой разметки. Мы сохраним текстовую разметку в файле TXT и используем ее в коде Java для создания шаблона OMR. Ниже приведена текстовая разметка, которую мы будем использовать в этом примере для создания шаблона OMR.

?text=Name__________________________________ Date____________

?grid=ID
	sections_count=8
#What is Aspose.OMR main function?
	() OCR () Capture human-marked data
	() There is no main function () Enhance images
#Can Aspose.OMR process not only scans, but also photos?
	() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
	() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
	() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
	() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
	(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
	(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
	(5) (4) (3) (2) (1)

?text= Answer sheet section
?answer_sheet=MainQuestions
	elements_count=10
	columns_count=5

?text=Sign________________________________

Теперь, когда у нас есть готовая текстовая разметка, мы выполним шаги, указанные ниже, для создания шаблона OMR.

В следующем примере кода показано, как создать шаблон OMR с помощью текстовой разметки с помощью Java.

// Пути к исходному и выходному каталогу
String sourceDirectory = "SourceDirectory\\OMR\\Generation\\";
String outputDirectory = "OutputDirectory\\";

// Создайте экземпляр класса OmrEngine.
OmrEngine engine = new OmrEngine();

// Генерация шаблона с использованием текстовой разметки
GenerationResult res = engine.generateTemplate(sourceDirectory + "Grid.txt");

// Проверить в случае ошибок
if (res.getErrorCode() != 0)
{
    System.out.println("ERROR CODE: " + res.getErrorCode());
}

// Сохраните результат генерации: изображение и шаблон .omr
res.save(outputDirectory, "Grid");

Приведенный выше код создаст файл шаблона OMR и изображение листа ответов. Ниже приведено изображение сгенерированного листа ответов.

Изображение листа ответов, созданного с помощью примера кода

Изображение листа ответов, созданного с помощью примера кода

Выполнение операции OMR на листах ответов в виде пузырей с использованием Java

После того, как вы собрали ответы на сгенерированном листе ответов, вы можете захватить их изображения, а затем выполнить над ними операции OMR. В этом примере мы выполним операцию OMR на двух изображениях; первый показан ниже.

Ниже приведены шаги для выполнения операции OMR с изображениями.

В следующем примере кода показано, как выполнить операцию OMR с изображениями с помощью Java.

// Пути к исходному и выходному каталогу
String sourceDirectory = "SourceDirectory\\OMR\\";
String outputDirectory = "OutputDirectory\\";

String TemplateName = "Sheet.omr";
String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

// Создайте экземпляр класса OmrEngine.
OmrEngine engine = new OmrEngine();

// Загрузите файл шаблона
TemplateProcessor templateProcessor = engine.getTemplateProcessor(sourceDirectory + "Sheet.omr");
System.out.println("Template loaded.");

// Перебирать изображения
for (int i = 0; i < UserImages.length; i++) {

    // Распознать изображение и получить результат
    RecognitionResult result = templateProcessor.recognizeImage(sourceDirectory + UserImages[i]);

    // Экспорт результатов в виде строки csv
    String csvResult = result.getCsv();

    // Сохраните csv в выходную папку
    PrintWriter wr = new PrintWriter(new FileOutputStream(outputDirectory + UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Ниже приведен вывод в формате CSV для первого изображения, сгенерированного приведенным выше кодом.

Element Name,Value,
MainQuestions1,"A"
MainQuestions2,"B"
MainQuestions3,"D"
MainQuestions4,"C"
MainQuestions5,"C"
MainQuestions6,"A"
MainQuestions7,"B"
MainQuestions8,"B"
MainQuestions9,"C"
MainQuestions10,"B"
MainQuestions11,"D"
MainQuestions12,"A"
MainQuestions13,"C"
MainQuestions14,"B"
MainQuestions15,"D"
MainQuestions16,"A"
MainQuestions17,"C"
MainQuestions18,"B"
MainQuestions19,"A"
MainQuestions20,"A"
MainQuestions21,"A"
MainQuestions22,"C"
MainQuestions23,"D"
MainQuestions24,"B"
MainQuestions25,"A"
MainQuestions26,"C"
MainQuestions27,"B"
MainQuestions28,"D"
MainQuestions29,"C"
MainQuestions30,"A"
MainQuestions31,"C"
MainQuestions32,"B"
MainQuestions33,"D"
MainQuestions34,"A"
MainQuestions35,"C"
MainQuestions36,"B"
MainQuestions37,"D"
MainQuestions38,"C"
MainQuestions39,"B"
MainQuestions40,"A"
MainQuestions41,"D"
MainQuestions42,"C"
MainQuestions43,"B"
MainQuestions44,"A"
MainQuestions45,"C"
MainQuestions46,"B"
MainQuestions47,"D"
MainQuestions48,"C"
MainQuestions49,"A"
MainQuestions50,"C"
MainQuestions51,"B"
MainQuestions52,"D"
MainQuestions53,"B"
MainQuestions54,"C"
MainQuestions55,"B"
MainQuestions56,"A"
MainQuestions57,"C"
MainQuestions58,"B"
MainQuestions59,"D"
MainQuestions60,"B"
MainQuestions61,"A"
MainQuestions62,"C"
MainQuestions63,"B"
MainQuestions64,"D"
MainQuestions65,"C"
MainQuestions66,"B"
MainQuestions67,"A"
MainQuestions68,"C"
MainQuestions69,"B"
MainQuestions70,"D"
MainQuestions71,"C"
MainQuestions72,"B"
MainQuestions73,"B"
MainQuestions74,"A"
MainQuestions75,"C"
MainQuestions76,"B"
MainQuestions77,"D"
MainQuestions78,"D"
MainQuestions79,"C"
MainQuestions80,"B"
ID,"27860000" 

Получить бесплатную лицензию

Вы можете попробовать API без ограничений по ознакомительной версии, запросив бесплатную временную лицензию.

Вывод

В этой статье вы узнали, как создавать шаблоны OMR и изображения листа ответов с помощью Java. Кроме того, вы узнали, как выполнять операции OMR с изображениями и получать результат в формате CSV. Aspose.OMR для Java — это надежный API для ваших задач, связанных с OMR, который вы можете подробно изучить, посетив официальную документацию. Если у вас есть какие-либо вопросы относительно любого аспекта API, обращайтесь к нам на наш бесплатный форум поддержки.

Смотрите также