Execute OMR e Extraia Dados usando C#

O reconhecimento óptico de marcas (OMR) permite a leitura e captura de dados marcados 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 ou folhas de teste e ler as entradas do usuário programaticamente em aplicativos .NET. Neste artigo, aprenderemos como executar OMR e extrair dados usando C#.

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

API C# OMR para executar OMR e extrair dados

Para realizar operações OMR e exportar dados de imagens, usaremos o Aspose.OMR for .NET API. Ele permite projetar, criar e reconhecer folhas de respostas, testes, papéis MCQ, questionários, formulários de feedback, pesquisas e cédulas. Por favor, baixe a DLL da API ou instale-a usando NuGet.

PM> Install-Package Aspose.OMR

Executar OMR e extrair dados da imagem

Para realizar a operação OMR em uma imagem, precisamos do modelo OMR preparado (.omr) e da imagem (formulários/folhas preenchidos pelo usuário) para executar 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 de 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 executar o OMR em uma imagem e extrair dados no formato CSV usando C#.

// Caminho do arquivo de modelo OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Caminho do arquivo de imagem
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Executar OMR e extrair dados de imagens

Execute OMR e Extraia Dados de imagens.

O modelo OMR usado no exemplo de código acima pode ser baixado de aqui.

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 executar o OMR em várias imagens e extrair dados no formato CSV usando C#.

// Caminho do arquivo de modelo OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Caminho do arquivo da pasta de imagens
string imageFolderPath = @"D:\Files\OMR\";

// Caminho do diretório de saída
string outputPath = @"D:\Files\OMR\";

// Imagens a serem processadas
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

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

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

// Processe imagens uma a uma
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Reconhecer imagem
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Obter resultados em CSV
    string csvResult = result.GetCsv();

    // Salvar arquivo CSV
    File.WriteAllText(Path.Combine(outputPath, Path.GetFileNameWithoutExtension(UserImages[i]) + ".csv"), csvResult);
}

A API também fornece funcionalidade para detectar e reconhecer quaisquer códigos de barras disponíveis na imagem durante a operação OMR. É o recurso padrão da operação OMR. Podemos realizar operações OMR e reconhecer códigos de barras seguindo as etapas mencionadas anteriormente.

Obtenha resultados de OMR com limite

Podemos aplicar o limite ao realizar operações OMR em imagens. O valor do limite pode ser de 0 a 100, dependendo dos requisitos. Quanto maior o valor do limite, a API se torna mais rigorosa quanto ao destaque das respostas. Siga as etapas mencionadas anteriormente para executar o OMR com o limite. No entanto, só precisamos chamar o método sobrecarregado RecognizeImage(string, int32) 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 C#.

// Caminho do arquivo de modelo OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Caminho do arquivo de imagem
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

Operação OMR com Recálculo

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 de classe TemplateProcessor. Ele usa o caminho do arquivo de modelo OMR como um argumento.
  3. Em seguida, inicialize o objeto Stopwatch e inicie o cronômetro.
  4. Em seguida, obtenha o objeto RecognitionResult chamando o método RecognizeImage() com o caminho da imagem como argumento.
  5. Em seguida, pare o cronômetro e exporte os resultados do reconhecimento como uma string CSV usando o método GetCsv().
  6. Em seguida, salve o resultado CSV como um arquivo CSV no disco local.
  7. Em seguida, reinicie o cronômetro usando o método Restart().
  8. Em seguida, chame o método Recalculate(). Ele recebe o objeto RecognitionResult e o valor limite como argumentos.
  9. Depois disso, pare o cronômetro e exporte os resultados do reconhecimento como uma string CSV usando o método GetCsv().
  10. 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 C#.

// Caminho do arquivo de modelo OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Caminho do arquivo de imagem
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Valor limiar
int CustomThreshold = 40;

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

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

// Temporizador para medida de desempenho
Stopwatch sw = Stopwatch.StartNew();

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

sw.Stop();

// Obter resultados em CSV
string csvResult = result.GetCsv();

// Salvar arquivo CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

// Recalcular
templateProcessor.Recalcular(result, CustomThreshold);
sw.Stop();

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

// Salvar arquivo CSV resultante recalculado
File.WriteAllText(@"D:\Files\OMR\Sheet1_Recalculard.csv", 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 e extrair dados em formato CSV usando C#;
  • aplique a configuração de limite durante a execução de OMR em imagens;
  • recalcular resultados OMR em um processo automotivo programaticamente.

Além disso, você pode aprender mais sobre Aspose.OMR para .NET API usando a documentação. Em caso de qualquer ambiguidade, não hesite em contactar-nos no fórum.

Veja também