SDK de Reconnaissance de Marques Optiques

Vue d’ensemble

Êtes-vous à la recherche d’une bibliothèque OMR Java efficace et riche en fonctionnalités ? Souhaitez-vous identifier des marques optiques dans des images scannées ? Découvrez Aspose.OMR pour Java, une bibliothèque de classes Java conçue pour des solutions SDK de Reconnaissance de Marques Optiques dans des applications basées sur Java. Voici un aperçu rapide des fonctionnalités de cette API Java, démontrant comment elle peut être utilisée pour reconnaître des marques optiques à travers divers formats d’image et obtenir des données marquées par des humains provenant de sondages, de questionnaires ou de tests comportant des QCM.

Créer dynamiquement un modèle OMR en utilisant la bibliothèque OMR Java

Aspose.OMR pour Java offre une suite complète de fonctionnalités allant de la création de modèles OMR à la reconnaissance de marques optiques pour la capture de données. Ce SDK de Reconnaissance de Marques Optiques prend en charge la génération de fichiers ou d’images de modèles OMR à partir de simple balisage texte. Pour générer le modèle, vous pouvez passer le balisage texte à l’API, permettant la création automatique de modèles. Voici un exemple de balisage texte pour un modèle OMR :

?text=Nom__________________________________ Date____________

?grid=ID
sections_count=8
#Quelle est la fonction principale d'Aspose.OMR ?
() OCR () Capturer les données marquées par des humains
() Il n'y a pas de fonction principale () Améliorer les images
#Aspose.OMR peut-il également traiter des photos ?
() Oui, en effet ! () Non
#Aspose.OMR est disponible sur n'importe quelle plateforme, car il est :
() Code multiplateforme () Service cloud
#Aspose.OMR fonctionne avec tous types de formulaires OMR : tests, examens, questionnaires, sondages, etc.
() Oui, en effet ! () Non
#D'excellents résultats de reconnaissance peuvent être obtenus uniquement pour des bulles remplies au moins pour :
() 40% () 60% () 75% () 98%
#Faut-il marquer chaque question sur la page ?
(Oui) Oui, cela aidera beaucoup ! (Non) Non
#Évaluez votre préférence de 0 à 9 avec "0" étant la préférence pour la performance
et "9" étant la préférence pour la flexibilité.
(0) (1) (2) (3) (4) (5) (6) (7) (8) (9)
#J'ai trouvé Aspose OMR être un outil utile. (5 - fortement d'accord, 1 - fortement en désaccord)
(5) (4) (3) (2) (1)

?text= Section de feuille de réponses
?answer_sheet=QuestionsPrincipales
elements_count=10
columns_count=5

?text=Signature________________________________

Vous pouvez enregistrer ce balisage texte dans un fichier texte avec une extension .txt. Une fois cela fait, la génération du modèle suit ces étapes :

Voici comment un extrait de code en Java montre la génération de modèle à partir du balisage texte.

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++)
{
// call template generation providing path to the txt file with markup
GenerationResult res = engine.generateTemplate(GenerationMarkups[i]);
// check in case of errors
if (res.getErrorCode() != 0)
{
System.out.println("ERROR CODE: " + res.getErrorCode());
}
// save generation result: image and .omr template
res.save(outputDirectory, GenerationMarkupsNoExt[i]);
}

Sortie

Bibliothèque OMR Java
**.

Reconnaissance de Marques Optiques (OMR) dans les Images en utilisant Java

Pour effectuer une Reconnaissance de Marques Optiques (OMR) sur des images, vous n’avez besoin que de deux composants : le modèle OMR préparé (.omr) et les formulaires ou feuilles remplis par l’utilisateur que vous souhaitez analyser. Avec le soutien du SDK de Reconnaissance de Marques Optiques, l’API facilite OMR pour divers formats d’image, y compris :

Les étapes pour effectuer OMR sur des images sont les suivantes :

Ci-dessous est un exemple de code démontrant comment reconnaître des marques optiques dans des images en utilisant Java.

String[] UserImages = new String[] { "Sheet1.jpg", "Sheet2.jpg" };
String[] UserImagesNoExt = new String[] { "Sheet1", "Sheet2" };
String outputDirectory = "Result";
String templatePath = "Sheet.omr";
// initialize engine and get template processor providing path to the .omr file
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// images loop
for (int i = 0; i < UserImages.length; i++) {
// path to the image to be recognized
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// recognize image and receive result
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// export results as csv string
String csvResult = result.getCsv();
String json = result.getJson();
// save csv to the output folder
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}

Utiliser 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 lors de l’utilisation du SDK de Reconnaissance de Marques Optiques. Augmenter le 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() comme deuxième paramètre, comme montré 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;
// initialize engine and get template processor providing path to the .omr file
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// images loop
for (int i = 0; i < UserImages.length; i++) {
// path to the image to be recognized
String imagePath = UserImages[i];
System.out.println("Processing image: " + imagePath);
// recognize image and receive result
RecognitionResult result = templateProcessor.recognizeImage(imagePath, customThreshold);
// export results as csv string
String csvResult = result.getCsv();
String json = result.getJson();
// save csv to the output folder
PrintWriter wr = new PrintWriter(new FileOutputStream(UserImagesNoExt[i] + ".csv"), true);
wr.println(csvResult);
}
.

Recalculer les Résultats OMR en utilisant le SDK de Reconnaissance de Marques Optiques

Dans certains cas, vous pourriez vouloir recalculer les résultats OMR en utilisant différentes valeurs de seuil. Au lieu d’invoquer à plusieurs reprises TemplateProcessor.recognizeImage(), vous pouvez améliorer l’efficacité du traitement des images en configurant l’API pour le recalcul automatique avec la méthode TemplateProcessor.recalculate() fournie par le SDK de Reconnaissance de Marques Optiques. L’exemple de code suivant démontre comment mettre en œuvre 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";
// init engine and get template processor
OmrEngine engine = new OmrEngine();
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
System.out.println("Template loaded.");
// Set custom threshold to use in recalculation
// this value is in range (0 to 100)
// represents the percentage of required black pixels on bubble image to be recognized
// i.e. the lower the value - the less black pixels required for bubble to be counted as filled and vice versa
int CustomThreshold = 40;
// images loop
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = image;
System.out.println("Processing image: " + imagePath);
// recognize image
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// get export csv string
String stringRes = result.getCsv();
// save csv to output folder
String outputName = UserImagesNoExt[i] + ".csv";
PrintWriter wr = new PrintWriter(new FileOutputStream(outputName), true);
wr.println(stringRes);
System.out.println("Export done. Path: " + outputName);
// recalculate recognition results with custom threshold
templateProcessor.recalculate(result, CustomThreshold);
// get export csv string
stringRes = result.getCsv();
// save recalculated results
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 avez besoin d’aide concernant notre bibliothèque OMR Java, n’hésitez pas à nous contacter sur notre forum.

Voir aussi