O Optical Mark Recognition (OMR) é frequentemente usado para verificar pesquisas, questionários e exames de múltipla escolha. É uma forma rápida e precisa de processamento de formulários. Neste artigo, você aprenderá como criar modelos OMR e verificar folhas de respostas preenchidas usando Java.

API Java para geração de modelos OMR e execução da operação OMR

Aspose.OMR for Java é uma API de reconhecimento de marca óptica que pode executar operações OMR em PNG, GIF, JPEG, TIFF, etc. imagens. A API também suporta a geração de modelos OMR. Você pode baixar a API diretamente da seção downloads ou instalá-la usando a seguinte configuração do 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>

Criar modelo OMR e imagem da folha de respostas usando Java

Nesta seção, você aprenderá como gerar arquivos de modelo OMR e imagens de folha de respostas usando marcação de texto simples. Armazenaremos a marcação de texto em um arquivo TXT e a usaremos no código Java para gerar o modelo OMR. Abaixo está a marcação de texto que usaremos neste exemplo para gerar o modelo 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________________________________

Agora que temos a marcação de texto pronta, seguiremos as etapas abaixo para gerar o modelo OMR.

O código de exemplo a seguir mostra como gerar um modelo OMR usando marcação de texto com Java.

// Caminhos de diretório de origem e saída
String sourceDirectory = "SourceDirectory\\OMR\\Generation\\";
String outputDirectory = "OutputDirectory\\";

// Crie uma instância da classe OmrEngine
OmrEngine engine = new OmrEngine();

// Gerar modelo usando a marcação de texto
GenerationResult res = engine.generateTemplate(sourceDirectory + "Grid.txt");

// Verifique em caso de erros
if (res.getErrorCode() != 0)
{
    System.out.println("ERROR CODE: " + res.getErrorCode());
}

// Salve o resultado da geração: imagem e modelo .omr
res.save(outputDirectory, "Grid");

O código acima irá gerar um arquivo de modelo OMR e uma imagem da folha de respostas. Segue a imagem da folha de respostas gerada.

Imagem da folha de respostas gerada pelo código de exemplo

Imagem da folha de respostas gerada pelo código de exemplo

Execute a operação OMR em folhas de respostas de bolhas usando Java

Depois de coletar as respostas na folha de respostas gerada, você pode capturar suas imagens e realizar operações OMR nelas. Neste exemplo, realizaremos a operação OMR em duas imagens; o primeiro é mostrado abaixo.

A seguir estão as etapas para realizar a operação OMR em imagens.

O código de exemplo a seguir mostra como executar a operação OMR em imagens usando Java.

// Caminhos de diretório de origem e saída
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" };

// Crie uma instância da classe OmrEngine
OmrEngine engine = new OmrEngine();

// Carregar o arquivo de modelo
TemplateProcessor templateProcessor = engine.getTemplateProcessor(sourceDirectory + "Sheet.omr");
System.out.println("Template loaded.");

// Percorra as imagens
for (int i = 0; i < UserImages.length; i++) {

    // Reconhecer imagem e receber resultado
    RecognitionResult result = templateProcessor.recognizeImage(sourceDirectory + UserImages[i]);

    // Exportar resultados como string csv
    String csvResult = result.getCsv();

    // Salve csv na pasta de saída
    PrintWriter wr = new PrintWriter(new FileOutputStream(outputDirectory + UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

A seguir está a saída CSV para a primeira imagem gerada pelo código acima.

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" 

Obtenha uma licença gratuita

Você pode experimentar a API sem limitações de avaliação solicitando uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu como gerar modelos OMR e imagens de folha de respostas usando Java. Além disso, você aprendeu como realizar operações OMR em imagens e obter o resultado como CSV. Aspose.OMR para Java é uma API robusta para suas tarefas relacionadas ao OMR que você pode explorar em detalhes visitando a documentação oficial. Se você tiver alguma dúvida sobre qualquer aspecto da API, sinta-se à vontade para entrar em contato conosco em nosso fórum de suporte gratuito.

Veja também