Bibliothèque OMR Java

Avez-vous besoin d’une bibliothèque OMR Java simple mais riche en fonctionnalités ? Voulez-vous reconnaître les marques optiques dans les images numérisées ? Essayez Aspose.OMR for Java - Une bibliothèque de classes Java pour effectuer les opérations de reconnaissance optique de marque (OMR) dans les applications basées sur Java. Passons rapidement en revue les fonctionnalités de ladite API Java pour voir comment reconnaître les marques optiques dans une variété de formats d’image et capturer des données marquées par l’homme à partir d’enquêtes, de questionnaires ou de tests contenant des QCM.

Créer dynamiquement un modèle OMR à l’aide de la bibliothèque Java OMR

Aspose.OMR for Java fournit un ensemble complet de fonctionnalités allant de la création du modèle OMR à la reconnaissance des marques optiques pour capturer les données. L’API prend en charge la génération du fichier de modèle OMR ou de l’image à partir de simples balises de texte. Vous pouvez simplement transmettre le balisage de texte du modèle à l’API et il générera le modèle pour vous. Voici un exemple de balisage de texte pour un modèle OMR.

?text=Name__________________________________ Date____________

?grid=ID
sections_count=8
#What is Aspose.OMR main function?
() OCR () Capture human-marked data
() There is no main function () Enhance images
#Can Aspose.OMR process photos as well?
() Yes, indeed! () No
#Aspose.OMR is available on any platform, because it is:
() Cross-platform code () Cloud service
#Aspose.OMR works with any kind of OMR forms: tests, exams, questionnaires, surveys, etc.
() Yes, indeed! () No
#Excellent recognition results can be achieved only for filled bubbles at least for:
() 40% () 60% () 75% () 98%
#Do you have to mark up every question on the page?
(Yes) Yes, that will help a lot! (No) No
#Rate your preference from 0 to 9 with "0" being preference towards performance
and "9" being preference towards flexibility.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#I found aspose omr to be a useful tool. (5 - strongly agree, 1 - strongly disagree)
(5) (4) (3) (2) (1)

?text= Answer sheet section
?answer_sheet=MainQuestions
elements_count=10
columns_count=5

?text=Sign________________________________

Vous pouvez simplement enregistrer le balisage de texte dans un fichier texte avec l’extension .txt. Une fois cela fait, vous pouvez générer le modèle en suivant les étapes suivantes :

L’exemple de code suivant montre comment générer le modèle OMR à partir d’un balisage de texte à l’aide de Java.

String outputDirectory = "GenerationResult";

String[] GenerationMarkups = new String[] { "Sheet.txt", "Grid.txt", "AsposeTest.txt" };
String[] GenerationMarkupsNoExt = new String[] { "Sheet", "Grid", "AsposeTest" };

OmrEngine engine = new OmrEngine();

for (int i = 0; i < GenerationMarkups.length; i++)
{
    // génération de modèle d'appel fournissant le chemin d'accès au fichier txt avec le balisage
    GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);

    // vérifier en cas d'erreurs
    if (res.getErrorCode() != 0)
    {
        System.out.println("ERROR CODE: " + res.getErrorCode());
    }

    // enregistrer le résultat de la génération : image et modèle .omr
    res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

Production

Bibliothèque OMR Java

Reconnaissance optique de marques (OMR) dans les images à l’aide de Java

Afin d’effectuer l’OMR dans les images, vous avez juste besoin de deux choses - le modèle OMR préparé (.omr) et les images (formulaires/feuilles remplies par l’utilisateur) sur lesquelles effectuer l’OMR. L’API prend en charge l’OMR pour les formats d’image suivants :

Voici les étapes pour effectuer l’OMR dans les images :

L’exemple de code suivant montre comment reconnaître les marques optiques dans les images à l’aide de Java.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// initialiser le moteur et obtenir le processeur de modèle fournissant le chemin d'accès au fichier .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// boucle d'images
for (int i = 0; i < UserImages.length; i++) {
    // chemin vers l'image à reconnaître
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // reconnaître l'image et recevoir le résultat
    RecognitionResult result = templateProcessor.recognizeImage(imagePath);

    // exporter les résultats sous forme de chaîne csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // enregistrer csv dans le dossier de sortie
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Utilisation d’un seuil de reconnaissance personnalisé pour OMR

Vous pouvez également affiner les résultats OMR en définissant un seuil personnalisé entre 0 et 100. L’augmentation du seuil rend l’API plus stricte dans la reconnaissance des réponses. Les valeurs de seuil peuvent être définies dans la méthode TemplateProcessor.recognizeImage() en tant que deuxième paramètre, comme indiqué dans l’exemple de code Java suivant.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";
int customThreshold = 40;

// initialiser le moteur et obtenir le processeur de modèle fournissant le chemin d'accès au fichier .omr
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// boucle d'images
for (int i = 0; i < UserImages.length; i++) {
    // chemin vers l'image à reconnaître
    String imagePath = UserImages[i];
    System.out.println("Processing image: " + imagePath);

    // reconnaître l'image et recevoir le résultat
    RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);

    // exporter les résultats sous forme de chaîne csv
    String csvResult = result.getCsv();

    String json = result.getJson();

    // enregistrer csv dans le dossier de sortie
    PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
    wr.println(csvResult);
}

Recalcul des résultats OMR

Dans certains cas, vous souhaiterez peut-être recalculer les résultats OMR avec des valeurs de seuil différentes. Au lieu d’appeler TemplateProcessor.recognizeImage() encore et encore dans de tels cas, vous pouvez configurer l’API pour un recalcul automatique à l’aide de la méthode TemplateProcessor.recalculate() afin d’améliorer l’efficacité du traitement des images. L’exemple de code suivant montre comment implémenter le recalcul des résultats OMR.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };

String outputDirectory = "Result";
String templatePath = "Sheet.omr";

// moteur d'initialisation et obtenir le processeur de modèle
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");

// Définir un seuil personnalisé à utiliser dans le recalcul
// cette valeur est dans la plage (0 à 100)
// représente le pourcentage de pixels noirs requis sur l'image à bulles pour être reconnus
// c'est-à-dire que plus la valeur est faible - moins il faut de pixels noirs pour que la bulle soit comptée comme remplie et vice versa
int CustomThreshold = 40;

// boucle d'images
for (int i = 0; i < UserImages.length; i++)
{
    String image = UserImages[i];
    String imagePath = image;
    System.out.println("Processing image: " + imagePath);

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

    // obtenir la chaîne csv d'exportation
    String stringRes = result.getCsv();

    // enregistrer csv dans le dossier de sortie
    String outputName = UserImagesNoExt[i] + ".csv";

    PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Export done. Path: " + outputName);

    // recalculer les résultats de la reconnaissance avec un seuil personnalisé
    templateProcessor.recalculate(result, CustomThreshold);

    // obtenir la chaîne csv d'exportation
    stringRes = result.getCsv();

    // enregistrer les résultats recalculés
    outputName = UserImagesNoExt[i] + "_recalculated.csv";

    wr = new PrintWriter(new FileOutputStream(outputName), true);
    wr.println(stringRes);

    System.out.println("Recalculated result export done. Path: " + outputName);
    System.out.println();
}

Si vous avez des questions ou des requêtes concernant notre bibliothèque Java OMR, contactez-nous via notre forum pour toute question ou requête.

Voir également