Effectuer OMR et extraire des données à l'aide de Java

La reconnaissance optique de marques (OMR) est un processus électronique qui permet la lecture et la capture de données marquées par des personnes sur un type particulier de formulaire de document. Ce formulaire de document peut être un test ou une enquête, composé de bulles ou de cases remplies par les utilisateurs. Nous pouvons facilement effectuer des opérations OMR sur les images numérisées de tels formulaires d’enquête, questionnaires ou feuilles de test et lire les entrées de l’utilisateur par programmation. Dans cet article, nous allons apprendre à effectuer l’OMR et à extraire les données d’une image en Java.

Les sujets suivants seront traités dans cet article :

  1. API Java OMR pour extraire les données de l’image
  2. Extraire les données d’une image
  3. Effectuer l’OMR et extraire les données de plusieurs images
  4. Extraire les données OMR avec seuil
  5. Extraire les données OMR avec recalcul

API Java OMR pour extraire des données d’une image

Pour effectuer des opérations OMR et extraire des données à partir de formats d’image pris en charge, nous utiliserons Aspose.OMR pour l’API Java. Il permet de concevoir, de créer et de reconnaître des feuilles de réponses, des tests, des documents QCM, des quiz, des formulaires de rétroaction, des sondages et des bulletins de vote.

La classe OmrEngine de l’API gère la création du modèle et le traitement de l’image. La méthode getTemplateProcessor(String templatePath) de cette classe crée l’instance TemplateProcessor pour le traitement des modèles et des images. Nous pouvons reconnaître une image en utilisant la méthode recognizeImage(String imagePath). Il renvoie tous les éléments OMR en tant qu’instance de classe RecognitionResult. La méthode getCsv() de cette classe génère une chaîne CSV avec les résultats de la reconnaissance. La méthode recalculate(RecognitionResult result, int recognitionThreshold) met à jour le résultat de la reconnaissance à l’aide de paramètres affinés.

Veuillez soit télécharger le JAR de l’API ou ajouter la configuration pom.xml suivante dans une application Java basée sur 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>

Extraire des données d’une image en Java

Nous avons besoin du modèle OMR préparé (.omr) ainsi que de l’image des formulaires/feuilles remplis par l’utilisateur pour effectuer l’opération OMR. Nous pouvons effectuer une opération OMR sur une image et extraire des données en suivant les étapes ci-dessous :

  1. Tout d’abord, créez une instance de la classe OmrEngine.
  2. Ensuite, appelez la méthode getTemplateProcessor() et initialisez l’objet de classe TemplateProcessor. Il prend le chemin du fichier de modèle OMR comme argument.
  3. Ensuite, récupérez l’objet RecognitionResult en appelant la méthode recognizeImage() avec le chemin de l’image comme argument.
  4. Après cela, obtenez les résultats de la reconnaissance sous forme de chaînes CSV à l’aide de la méthode getCsv().
  5. Enfin, enregistrez le résultat CSV sous forme de fichier CSV sur le disque local.

L’exemple de code suivant montre comment extraire des données OMR d’une image au format CSV à l’aide de Java.

// Cet exemple de code montre comment effectuer l'OMR sur une image et extraire des données
// Chemin d'accès au fichier de modèle OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Chemin du fichier image
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Initialiser le moteur OMR
OmrEngine engine = new OmrEngine();

// Obtenir le processeur de modèle
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconnaître l'image
RecognitionResult result = templateProcessor.recognizeImage(imagePath);

// Obtenir les résultats au format CSV
String csvResult = result.getCsv();

// Enregistrer le fichier CSV
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
Extraire des données d'une image en Java

Effectuez l’OMR et extrayez les données d’une image en Java.

Veuillez télécharger le modèle OMR utilisé dans cet article de blog.

Effectuer l’OMR et extraire les données de plusieurs images

Nous pouvons effectuer des opérations OMR sur plusieurs images et extraire des données dans un fichier CSV distinct pour chaque image en suivant les étapes mentionnées précédemment. Cependant, nous devons répéter les étapes 3, 4 et 5 pour toutes les images une par une.

L’exemple de code suivant montre comment extraire des données OMR à partir de plusieurs images à l’aide de Java.

// Cet exemple de code montre comment effectuer l'OMR sur plusieurs images et extraire des données
// Chemin du dossier de travail
String folderPath = "C:\\Files\\OMR\\";

// Chemin d'accès au fichier de modèle OMR
String templatePath = folderPath + "Sheet.omr";

// Chemin du fichier image
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };

// Initialiser le moteur OMR
OmrEngine engine = new OmrEngine();

// Obtenir le processeur de modèle
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Traiter les images une par une en boucle
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = folderPath + image;

    // Reconnaître l'image
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // Obtenir les résultats au format CSV
    String csvResult = result.getCsv();

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

Extraire des données OMR avec seuil en Java

Nous pouvons effectuer des opérations OMR avec une valeur seuil (0 à 100) en fonction des besoins. Plus la valeur du seuil est élevée, plus l’API est stricte dans la mise en évidence des réponses. Veuillez suivre les étapes mentionnées précédemment pour effectuer l’OMR avec le seuil. Cependant, nous avons juste besoin d’appeler la méthode surchargée recognizeImage(string, int32) à l’étape 3. Elle prend le chemin du fichier image et la valeur seuil comme arguments.

L’exemple de code suivant montre comment effectuer une OMR avec une valeur de seuil à l’aide de Java.

// Cet exemple de code montre comment effectuer l'OMR avec therashold et extraire les données d'une image
// Chemin d'accès au fichier de modèle OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Chemin du fichier image
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valeur de seuil
int CustomThreshold = 40;

// Initialiser le moteur OMR
OmrEngine engine = new OmrEngine();

// Obtenir le processeur de modèle
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconnaître l'image
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Obtenir les résultats au format CSV
String csvResult = result.getCsv();

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

Extraire des données OMR avec recalcul en Java

Dans certains cas, il peut être nécessaire de recalculer les résultats OMR avec des valeurs de seuil différentes. À cette fin, nous pouvons configurer l’API pour qu’elle recalcule automatiquement à l’aide de la méthode TemplateProcessor.recalculate(). Il permet de traiter une image plusieurs fois en modifiant le paramètre de seuil pour obtenir le résultat souhaité. Nous pouvons effectuer une opération OMR avec recalcul en suivant les étapes ci-dessous :

  1. Tout d’abord, créez une instance de la classe OmrEngine.
  2. Ensuite, appelez la méthode getTemplateProcessor() et initialisez l’objet de classe TemplateProcessor. Il prend le chemin du fichier de modèle OMR comme argument.
  3. Ensuite, récupérez l’objet RecognitionResult en appelant la méthode recognizeImage() avec le chemin de l’image comme argument.
  4. Ensuite, exportez les résultats de la reconnaissance sous forme de chaîne CSV à l’aide de la méthode getCsv().
  5. Ensuite, enregistrez le résultat CSV sous forme de fichier CSV sur le disque local.
  6. Ensuite, appelez la méthode recalculate(). Il prend l’objet RecognitionResult et la valeur de seuil comme arguments.
  7. Après cela, exportez les résultats de la reconnaissance sous forme de chaîne CSV à l’aide de la méthode getCsv().
  8. Enfin, enregistrez le résultat CSV sous forme de fichier CSV sur le disque local.

L’exemple de code suivant montre comment effectuer l’OMR avec la méthode de recalcul à l’aide de Java.

// Chemin d'accès au fichier de modèle OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";

// Chemin du fichier image
String imagePath = "C:\\Files\\OMR\\Sheet1.png";

// Valeur de seuil
int CustomThreshold = 40;

// Initialiser le moteur OMR
OmrEngine engine = new OmrEngine();

// Obtenir le processeur de modèle
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);

// Reconnaître l'image
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);

// Obtenir les résultats au format CSV
String csvResult = result.getCsv();

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

// Recalculer
// Vous pouvez appliquer une nouvelle valeur de seuil ici
templateProcessor.recalculate(result, CustomThreshold);

// Obtenez des résultats recalculés au format CSV
csvResult = result.getCsv();

// Enregistrer le fichier CSV résultant recalculé
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);

Obtenez une licence gratuite

Vous pouvez obtenir une licence temporaire gratuite pour essayer la bibliothèque sans limitation d’évaluation.

Conclusion

Dans cet article, nous avons appris à :

  • effectuer une opération OMR sur les images ;
  • extraire les données au format CSV par programmation ;
  • appliquer le paramètre de seuil lors de l’exécution de l’OMR sur les images ;
  • recalculer les résultats OMR dans un processus automobile utilisant Java.

En outre, en extrayant des données d’une image en Java, vous pouvez en savoir plus sur l’API Aspose.OMR pour Java à l’aide de la documentation. En cas d’ambiguïté, n’hésitez pas à nous contacter sur notre forum d’assistance gratuit.

Voir également