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

La reconnaissance optique de marques (OMR) permet la lecture et la capture de données marquées sur un type spécial 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 ou feuilles de test et lire les entrées de l’utilisateur par programmation dans les applications .NET. Dans cet article, nous allons apprendre à effectuer une OMR et à extraire des données à l’aide de C#.

Les sujets suivants seront traités dans cet article :

API C# OMR pour effectuer l’OMR et extraire des données

Pour effectuer des opérations OMR et exporter des données à partir d’images, nous utiliserons Aspose.OMR for .NET. 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. Veuillez soit télécharger la DLL de l’API ou l’installer à l’aide de NuGet.

PM> Install-Package Aspose.OMR

Effectuer l’OMR et extraire les données de l’image

Afin d’effectuer une opération OMR sur une image, nous avons besoin du modèle OMR préparé (.omr) et de l’image (formulaires/feuilles remplis par l’utilisateur) sur lesquels effectuer l’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, obtenez 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 effectuer une OMR sur une image et extraire des données au format CSV à l’aide de C#.

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

// Chemin du fichier image
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);
Effectuer l'OMR et extraire les données des images

Effectuez l’OMR et extrayez les données des images.

Le modèle OMR utilisé dans l’exemple de code ci-dessus peut être téléchargé depuis ici.

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 effectuer une OMR sur plusieurs images et extraire des données au format CSV à l’aide de C#.

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

// Chemin d'accès au dossier d'images
string imageFolderPath = @"D:\Files\OMR\";

// Chemin du répertoire de sortie
string outputPath = @"D:\Files\OMR\";

// Images à traiter
string[] UserImages = new string[] { "Sheet1.jpg", "Sheet2.jpg" };

// 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
for (int i = 0; i < UserImages.Length; i++)
{
    string imagePath = Path.Combine(imageFolderPath, UserImages[i]);
    
    // Reconnaître l'image
    RecognitionResult result = templateProcessor.RecognizeImage(imagePath);
    
    // Obtenir les résultats au format CSV
    string csvResult = result.GetCsv();

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

L’API fournit également une fonctionnalité pour détecter et reconnaître tous les codes-barres disponibles sur l’image pendant le fonctionnement OMR. Il s’agit de la fonction par défaut de l’opération OMR. Nous pouvons effectuer des opérations OMR et reconnaître les codes-barres en suivant les étapes mentionnées précédemment.

Obtenir des résultats OMR avec seuil

Nous pouvons appliquer le seuil lors de l’exécution d’opérations OMR sur des images. La valeur du seuil peut être comprise entre 0 et 100 selon les besoins. Plus la valeur du seuil est élevée, plus l’API devient stricte concernant 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 de seuil comme arguments.

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

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

// Chemin du fichier image
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

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

Opération OMR avec recalcul

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, initialisez l’objet Chronomètre et démarrez le chronomètre.
  4. Ensuite, obtenez l’objet RecognitionResult en appelant la méthode RecognizeImage() avec le chemin de l’image comme argument.
  5. Ensuite, arrêtez le minuteur et exportez les résultats de la reconnaissance sous forme de chaîne CSV à l’aide de la méthode GetCsv().
  6. Ensuite, enregistrez le résultat CSV sous forme de fichier CSV sur le disque local.
  7. Ensuite, redémarrez le minuteur à l’aide de la méthode Restart().
  8. Ensuite, appelez la méthode Recalculate(). Il prend l’objet RecognitionResult et la valeur de seuil comme arguments.
  9. Après cela, arrêtez le minuteur et exportez les résultats de la reconnaissance sous forme de chaîne CSV à l’aide de la méthode GetCsv().
  10. 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 C#.

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

// Chemin du fichier image
string imagePath = @"D:\Files\OMR\Sheet1.jpg";

// 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);

// Minuterie pour mesure de performance
Stopwatch sw = Stopwatch.StartNew();

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

sw.Stop();

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

// Enregistrer le fichier CSV
File.WriteAllText(@"D:\Files\OMR\Sheet1.csv", csvResult);

sw.Restart();

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

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

// Enregistrer le fichier CSV résultant recalculé
File.WriteAllText(@"D:\Files\OMR\Sheet1_Recalculerd.csv", 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 des images et extraire des données au format CSV à l’aide de C# ;
  • 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 par programme.

En outre, vous pouvez en savoir plus sur Aspose.OMR for .NET en utilisant la documentation. En cas d’ambiguïté, n’hésitez pas à nous contacter sur le forum.

Voir également