Realizar OMR y extraer datos usando C#

El reconocimiento óptico de marcas (OMR) permite la lectura y captura de datos marcados en un tipo especial de formulario de documento. Este formulario de documento podría ser una prueba o una encuesta, que consiste en entradas de burbujas o cuadrados rellenadas por los usuarios. Podemos realizar fácilmente operaciones OMR en las imágenes escaneadas de tales formularios de encuestas u hojas de prueba y leer las entradas del usuario mediante programación en aplicaciones .NET. En este artículo, aprenderemos cómo realizar OMR y extraer datos usando C#.

En este artículo se tratarán los siguientes temas:

API C# OMR para realizar OMR y extraer datos

Para realizar operaciones OMR y exportar datos de imágenes, usaremos Aspose.OMR for .NET API. Permite diseñar, crear y reconocer hojas de respuestas, pruebas, documentos MCQ, cuestionarios, formularios de comentarios, encuestas y boletas. Descargue la DLL de la API o instálela usando NuGet.

PM> Install-Package Aspose.OMR

Realizar OMR y extraer datos de la imagen

Para realizar la operación OMR en una imagen, necesitamos la plantilla OMR preparada (.omr) y la imagen (formularios/hojas rellenados por el usuario) para realizar la OMR. Podemos realizar una operación OMR en una imagen y extraer datos siguiendo los pasos que se detallan a continuación:

  1. En primer lugar, cree una instancia de la clase OmrEngine.
  2. A continuación, llame al método GetTemplateProcessor() e inicialice el objeto de clase TemplateProcessor. Toma la ruta del archivo de la plantilla OMR como argumento.
  3. Luego, obtenga el objeto RecognitionResult llamando al método RecognizeImage() con la ruta de la imagen como argumento.
  4. Después de eso, obtenga resultados de reconocimiento como cadenas CSV usando el método GetCsv().
  5. Finalmente, guarde el resultado CSV como un archivo CSV en el disco local.

El siguiente ejemplo de código muestra cómo realizar OMR en una imagen y extraer datos en formato CSV usando C#.

// Ruta del archivo de la plantilla OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ruta del archivo de imagen
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Inicializar motor OMR
OmrEngine engine = new OmrEngine();

// Obtener procesador de plantillas
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Reconocer imagen
RecognitionResult result = templateProcessor.RecognizeImage(imagePath);

// Obtener resultados en CSV
string csvResult = result.GetCsv();

// Guardar archivo CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Realice OMR y extraiga datos de imágenes

Realice OMR y extraiga datos de imágenes.

La plantilla OMR utilizada en el ejemplo de código anterior se puede descargar desde aquí.

Realice OMR y extraiga datos de múltiples imágenes

Podemos realizar operaciones OMR en múltiples imágenes y extraer datos en un archivo CSV separado para cada imagen siguiendo los pasos mencionados anteriormente. Sin embargo, debemos repetir los pasos 3, 4 y 5 para todas las imágenes una por una.

El siguiente ejemplo de código muestra cómo realizar OMR en varias imágenes y extraer datos en formato CSV mediante C#.

// Ruta del archivo de la plantilla OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ruta del archivo de la carpeta Imágenes
string imageFolderPath = @"D:\Files\OMR\";

// Ruta del directorio de salida
string outputPath = @"D:\Files\OMR\";

// Imágenes a procesar
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// Inicializar motor OMR
OmrEngine engine = new OmrEngine();

// Obtener procesador de plantillas
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Procesar imágenes una por una
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Reconocer imagen
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Obtener resultados en CSV
    string csvResult = result.GetCsv();

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

La API también proporciona funcionalidad para detectar y reconocer cualquier código de barras disponible en la imagen durante la operación OMR. Es la función predeterminada de la operación OMR. Podemos realizar operaciones OMR y reconocer códigos de barras siguiendo los pasos mencionados anteriormente.

Obtener resultados OMR con umbral

Podemos aplicar el umbral mientras realizamos operaciones OMR en imágenes. El valor del umbral puede ser de 0 a 100 dependiendo de los requisitos. Cuanto mayor sea el valor del umbral, la API se vuelve más estricta con respecto a resaltar las respuestas. Siga los pasos mencionados anteriormente para realizar OMR con el umbral. Sin embargo, solo necesitamos llamar al método sobrecargado RecognizeImage(string, int32) en el paso # 3. Toma la ruta del archivo de imagen y el valor de umbral como argumentos.

El siguiente ejemplo de código muestra cómo realizar OMR con valor de umbral mediante C#.

// Ruta del archivo de la plantilla OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ruta del archivo de imagen
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Valor umbral
int CustomThreshold = 40;

// Inicializar motor OMR
OmrEngine engine = new OmrEngine();

// Obtener procesador de plantillas
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Reconocer imagen
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

// Obtener resultados en CSV
string csvResult = result.GetCsv();

// Guardar archivo CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1_threshold.csv", csvResult);

Operación OMR con Recálculo

En ciertos casos, es posible que necesitemos volver a calcular los resultados de OMR con diferentes valores de umbral. Para este propósito, podemos configurar la API para que recalcule automáticamente usando el método TemplateProcessor.recalculate(). Permite procesar una imagen varias veces cambiando la configuración del umbral para obtener el resultado deseado. Podemos realizar la operación OMR con recálculo siguiendo los pasos que se indican a continuación:

  1. En primer lugar, cree una instancia de la clase OmrEngine.
  2. A continuación, llame al método GetTemplateProcessor() e inicialice el objeto de clase TemplateProcessor. Toma la ruta del archivo de la plantilla OMR como argumento.
  3. Luego, inicialice el objeto Cronómetro e inicie el cronómetro.
  4. A continuación, obtenga el objeto RecognitionResult llamando al método RecognizeImage() con la ruta de la imagen como argumento.
  5. Luego, detenga el temporizador y exporte los resultados del reconocimiento como una cadena CSV usando el método GetCsv().
  6. A continuación, guarde el resultado CSV como un archivo CSV en el disco local.
  7. Luego, reinicie el temporizador usando el método Restart().
  8. A continuación, llame al método Recalculate(). Toma el objeto RecognitionResult y el valor de umbral como argumentos.
  9. Después de eso, detenga el temporizador y exporte los resultados del reconocimiento como una cadena CSV usando el método GetCsv().
  10. Finalmente, guarde el resultado CSV como un archivo CSV en el disco local.

El siguiente ejemplo de código muestra cómo realizar OMR con el método de recálculo mediante C#.

// Ruta del archivo de la plantilla OMR
string templatePath = @"D:\Files\OMR\Sheet.omr";

// Ruta del archivo de imagen
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// Valor umbral
int CustomThreshold = 40;

// Inicializar motor OMR
OmrEngine engine = new OmrEngine();

// Obtener procesador de plantillas
TemplateProcessor templateProcessor = engine.GetTemplateProcessor(templatePath);

// Temporizador para medir el rendimiento
Stopwatch sw = Stopwatch.StartNew();

// Reconocer imagen
RecognitionResult result = templateProcessor.RecognizeImage(imagePath, CustomThreshold);

sw.Stop();

// Obtener resultados en CSV
string csvResult = result.GetCsv();

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

sw.Restart();

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

// Obtener resultados recalculados en CSV
csvResult = result.GetCsv();

// Guardar el archivo CSV resultante recalculado
File.WriteAllText(@"D:\Files\OMR\Sheet1_Recalculard.csv", csvResult);

Obtenga una licencia gratis

Puede obtener una licencia temporal gratuita para probar la biblioteca sin limitaciones de evaluación.

Conclusión

En este artículo, hemos aprendido a:

  • realizar operaciones OMR en imágenes y extraer datos en formato CSV usando C#;
  • aplique la configuración de umbral mientras realiza OMR en imágenes;
  • recalcular los resultados de OMR en un proceso automotriz programáticamente.

Además, puede obtener más información sobre Aspose.OMR for .NET API utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en el foro.

Ver también