El reconocimiento óptico de marcas (OMR) es un proceso electrónico que permite la lectura y captura de datos marcados por personas 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 dichos formularios de encuestas, cuestionarios u hojas de prueba y leer las entradas del usuario mediante programación. En este artículo, aprenderemos cómo realizar OMR y extraer datos de una imagen en Java.
En este artículo se tratarán los siguientes temas:
- API de Java OMR para extraer datos de la imagen
- Extraer datos de una imagen
- Realizar OMR y extraer datos de varias imágenes
- Extraer datos OMR con umbral
- Extraer datos OMR con recálculo
API de Java OMR para extraer datos de la imagen
Para realizar operaciones OMR y extraer datos de formatos de imagen admitidos, utilizaremos Aspose.OMR para la API de Java. Permite diseñar, crear y reconocer hojas de respuestas, pruebas, documentos MCQ, cuestionarios, formularios de comentarios, encuestas y boletas.
La clase OmrEngine de la API maneja la creación de la plantilla y el procesamiento de imágenes. El método getTemplateProcessor(String templatePath) de esta clase crea la instancia TemplateProcessor para procesar plantillas e imágenes. Podemos reconocer una imagen usando el método recognizeImage(String imagePath). Devuelve todos los elementos OMR como una instancia de clase RecognitionResult. El método getCsv() de esta clase genera una cadena CSV con resultados de reconocimiento. El método recalculate(RecognitionResult result, int connectionsThreshold) actualiza el resultado del reconocimiento usando parámetros ajustados.
Descargue el JAR de la API o agregue la siguiente configuración pom.xml en una aplicación Java basada en 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>
Extraer datos de una imagen en Java
Necesitamos la plantilla OMR preparada (.omr) junto con la imagen de los formularios/hojas rellenados por el usuario para realizar la operación OMR. Podemos realizar una operación OMR en una imagen y extraer datos siguiendo los pasos que se detallan a continuación:
- En primer lugar, cree una instancia de la clase OmrEngine.
- A continuación, llame al método getTemplateProcessor() e inicialice el objeto de la clase TemplateProcessor. Toma la ruta del archivo de la plantilla OMR como argumento.
- Luego, obtén el objeto RecognitionResult llamando al recognizeImage() con la ruta de la imagen como argumento.
- Después de eso, obtenga resultados de reconocimiento como cadenas CSV usando el método getCsv().
- Finalmente, guarde el resultado CSV como un archivo CSV en el disco local.
El siguiente ejemplo de código muestra cómo extraer datos OMR de una imagen en formato CSV usando Java.
// Este ejemplo de código demuestra cómo realizar OMR en una imagen y extraer datos
// Ruta del archivo de la plantilla OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Ruta del archivo de imagen
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// 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
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Descargue la plantilla OMR utilizada en esta publicación de blog.
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 extraer datos OMR de varias imágenes mediante Java.
// Este ejemplo de código demuestra cómo realizar OMR en varias imágenes y extraer datos
// Ruta de la carpeta de trabajo
String folderPath = "C:\\Files\\OMR\\";
// Ruta del archivo de la plantilla OMR
String templatePath = folderPath + "Sheet.omr";
// Ruta del archivo de imagen
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// Inicializar motor OMR
OmrEngine engine = new OmrEngine();
// Obtener procesador de plantillas
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// Procesar imágenes una por una en un bucle
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// Reconocer imagen
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// Obtener resultados en CSV
String csvResult = result.getCsv();
// Guardar archivo CSV
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
Extraer datos OMR con umbral en Java
Podemos realizar operaciones OMR con un valor de umbral (0 a 100) según los requisitos. Cuanto mayor sea el valor del umbral, la API será más estricta al resaltar las respuestas. Siga los pasos mencionados anteriormente para realizar OMR con el umbral. Sin embargo, solo necesitamos llamar al método de reconocimiento de imagen sobrecargado (cadena, 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 Java.
Extraer datos OMR con recálculo en Java
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:
- En primer lugar, cree una instancia de la clase OmrEngine.
- A continuación, llame al método getTemplateProcessor() e inicialice el objeto de la clase TemplateProcessor. Toma la ruta del archivo de la plantilla OMR como argumento.
- Luego, obtén el objeto RecognitionResult llamando al métodoreconoceImage() con la ruta de la imagen como argumento.
- A continuación, exporte los resultados del reconocimiento como una cadena CSV utilizando el método getCsv().
- Luego, guarde el resultado CSV como un archivo CSV en el disco local.
- A continuación, llame al método recalculate(). Toma el objeto RecognitionResult y el valor de umbral como argumentos.
- Después de eso, exporte los resultados del reconocimiento como una cadena CSV utilizando el método getCsv().
- 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 Java.
// Ruta del archivo de la plantilla OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// Ruta del archivo de imagen
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// 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
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// Recalcular
// Puede aplicar un nuevo valor de umbral aquí
templateProcessor.recalculate(result, CustomThreshold);
// Obtener resultados recalculados en CSV
csvResult = result.getCsv();
// Guardar el archivo CSV resultante recalculado
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(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;
- extraer datos en formato CSV mediante programación;
- aplique la configuración de umbral mientras realiza OMR en imágenes;
- recalcular los resultados de OMR en un proceso automotriz utilizando Java.
Además, al extraer datos de una imagen en Java, puede obtener más información sobre Aspose.OMR para la API de Java utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en nuestro foro de soporte gratuito.