Executar OMR e extrair dados usando Java

O reconhecimento óptico de marcas (OMR) é um processo eletrônico que permite a leitura e captura de dados marcados por pessoas em um tipo especial de formulário de documento. Este formulário de documento pode ser um teste ou uma pesquisa, consistindo em entradas de bolhas ou quadrados preenchidos pelos usuários. Podemos facilmente realizar operações OMR nas imagens digitalizadas de tais formulários de pesquisa, questionários ou folhas de teste e ler as entradas do usuário programaticamente. Neste artigo, aprenderemos como realizar OMR e extrair dados de uma imagem em Java.

Os seguintes tópicos serão abordados neste artigo:

  1. API Java OMR para extrair dados da imagem
  2. Extrair dados de uma imagem
  3. Executar OMR e extrair dados de várias imagens
  4. Extrair dados OMR com limite
  5. Extrair dados OMR com recálculo

API Java OMR para extrair dados da imagem

Para realizar operações OMR e extrair dados de formatos de imagem suportados, usaremos o Aspose.OMR for Java API. Ele permite projetar, criar e reconhecer folhas de respostas, testes, papéis MCQ, questionários, formulários de feedback, pesquisas e cédulas.

A classe OmrEngine da API trata da criação do modelo e do processamento da imagem. O método getTemplateProcessor(String templatePath) dessa classe cria a instância TemplateProcessor para processar modelos e imagens. Podemos reconhecer uma imagem usando o método recognizeImage(String imagePath). Ele retorna todos os elementos OMR como uma instância de classe RecognitionResult. O método getCsv() desta classe gera uma string CSV com resultados de reconhecimento. O método recalculate(RecognitionResult result, int recognitionThreshold) atualiza o resultado do reconhecimento usando parâmetros ajustados.

Por favor, faça o download do JAR da API ou adicione a seguinte configuração pom.xml em um aplicativo Java baseado em 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>

Extrair dados de uma imagem em Java

Precisamos do modelo OMR preparado (.omr) junto com a imagem dos formulários/folhas preenchidos pelo usuário para realizar a operação OMR. Podemos realizar uma operação OMR em uma imagem e extrair dados seguindo as etapas abaixo:

  1. Primeiramente, crie uma instância da classe OmrEngine.
  2. Em seguida, chame o método getTemplateProcessor() e inicialize o objeto da classe TemplateProcessor. Ele usa o caminho do arquivo de modelo OMR como um argumento.
  3. Em seguida, obtenha o objeto RecognitionResult chamando o método recognizeImage() com o caminho da imagem como argumento.
  4. Depois disso, obtenha resultados de reconhecimento como strings CSV usando o método getCsv().
  5. Por fim, salve o resultado CSV como um arquivo CSV no disco local.

O exemplo de código a seguir mostra como extrair dados OMR de uma imagem no formato CSV usando Java.

// Este exemplo de código demonstra como executar OMR em uma imagem e extrair dados
// Caminho do arquivo de modelo OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Caminho do arquivo de imagem
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Inicialize o mecanismo OMR
OmrEngine engine = new OmrEngine();

// Obter processador de modelos
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconhecer imagem
RecognitionResult result = templateProcessor.recognizeImage(imagePath);

// Obter resultados em CSV
String csvResult = result.getCsv();

// Salvar arquivo CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Extrair-dados-de-uma-imagem-em-Java

Execute OMR e Extraia Dados de uma imagem em Java.

Por favor faça o download do modelo OMR usado nesta postagem do blog.

Execute OMR e extraia dados de várias imagens

Podemos realizar operações OMR em várias imagens e extrair dados em um arquivo CSV separado para cada imagem seguindo as etapas mencionadas anteriormente. No entanto, precisamos repetir os passos 3, 4 e 5 para todas as imagens uma a uma.

O exemplo de código a seguir mostra como extrair dados OMR de várias imagens usando Java.

// Este exemplo de código demonstra como executar OMR em várias imagens e extrair dados
// Caminho da pasta de trabalho
String folderPath = "C:\\Files\\OMR\\";

// Caminho do arquivo de modelo OMR
String templatePath = folderPath + "Sheet.omr";

// Caminho do arquivo de imagem
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };

// Inicialize o mecanismo OMR
OmrEngine engine = new OmrEngine();

// Obter processador de modelos
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Processe imagens uma a uma em um loop
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = folderPath + image;

    // Reconhecer imagem
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // Obter resultados em CSV
    String csvResult = result.getCsv();

    // Salvar arquivo CSV
    PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
    wr.println(csvResult);
    System.out.println(csvResult);
}

Extrair dados OMR com limite em Java

Podemos realizar operações OMR com um valor limite (0 a 100) dependendo dos requisitos. Quanto maior o valor do limite, mais rigorosa é a API em destacar as respostas. Siga as etapas mencionadas anteriormente para executar o OMR com o limite. No entanto, só precisamos chamar o método recognizeImage(string, int32) sobrecarregado na etapa 3. Ele usa o caminho do arquivo de imagem e o valor limite como argumentos.

O exemplo de código a seguir mostra como executar OMR com valor limite usando Java.

// Este exemplo de código demonstra como executar OMR com therashold e extrair dados de uma imagem
// Caminho do arquivo de modelo OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Caminho do arquivo de imagem
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valor limiar
int CustomThreshold = 40;

// Inicialize o mecanismo OMR
OmrEngine engine = new OmrEngine();

// Obter processador de modelos
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconhecer imagem
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Obter resultados em CSV
String csvResult = result.getCsv();

// Salvar arquivo CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);

Extrair dados OMR com recálculo em Java

Em certos casos, pode ser necessário recalcular os resultados de OMR com valores de limite diferentes. Para isso, podemos configurar a API para recalcular automaticamente usando o método TemplateProcessor.recalculate(). Ele permite processar uma imagem várias vezes alterando a configuração de limite para obter o resultado desejado. Podemos realizar a operação OMR com recálculo seguindo as etapas abaixo:

  1. Primeiramente, crie uma instância da classe OmrEngine.
  2. Em seguida, chame o método getTemplateProcessor() e inicialize o objeto da classe TemplateProcessor. Ele usa o caminho do arquivo de modelo OMR como um argumento.
  3. Em seguida, obtenha o objeto RecognitionResult chamando o método recognizeImage() com o caminho da imagem como argumento.
  4. Em seguida, exporte os resultados do reconhecimento como uma string CSV usando o método getCsv().
  5. Em seguida, salve o resultado CSV como um arquivo CSV no disco local.
  6. Em seguida, chame o método recalculate(). Ele recebe o objeto RecognitionResult e o valor limite como argumentos.
  7. Depois disso, exporte os resultados do reconhecimento como uma string CSV usando o método getCsv().
  8. Por fim, salve o resultado CSV como um arquivo CSV no disco local.

O exemplo de código a seguir mostra como executar o OMR com o método de recálculo usando Java.

// Caminho do arquivo de modelo OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Caminho do arquivo de imagem
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valor limiar
int CustomThreshold = 40;

// Inicialize o mecanismo OMR
OmrEngine engine = new OmrEngine();

// Obter processador de modelos
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconhecer imagem
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Obter resultados em CSV
String csvResult = result.getCsv();

// Salvar arquivo CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);

// Recalcular
// Você pode aplicar um novo valor limite aqui
templateProcessor.recalculate(result, CustomThreshold);

// Obtenha resultados recalculados em CSV
csvResult = result.getCsv();

// Salvar arquivo CSV resultante recalculado
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);

Obtenha uma licença gratuita

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

Conclusão

Neste artigo, aprendemos como:

  • realizar operação OMR em imagens;
  • extrair dados em formato CSV programaticamente;
  • aplique a configuração de limite durante a execução de OMR em imagens;
  • recalcular resultados de OMR em um processo automotivo usando Java.

Além disso, extraindo dados de uma imagem em Java, você pode aprender mais sobre Aspose.OMR para API Java usando a documentação. Em caso de qualquer ambiguidade, sinta-se à vontade para entrar em contato conosco em nosso fórum de suporte gratuito.

Veja também