Reconnaissance des caractères MRZ à partir d'une image en .NET

Catégorie du blog: OCR.NET

17.02.2022

VintaSoft Imaging .NET SDK, associé au VintaSoft OCR .NET Plug-in, permet de reconnaître du texte à partir d'images grâce au moteur OCR Tesseract. De nombreux dictionnaires créés pour ce moteur permettent d'effectuer la reconnaissance de texte dans plus de 100 langues.

Plusieurs auteurs proposent sur Internet des dictionnaires gratuits pour la reconnaissance des symboles MRZ (zones de lecture automatique) à l'aide du moteur OCR Tesseract.
Nous en avons testé certains et nous nous sommes assurés que le dictionnaire "mrz.traineddata" offre une bonne qualité de reconnaissance des symboles MRZ.
Le dictionnaire "mrz.traineddata" est proposé sous licence BSD-3, ce qui autorise son utilisation et sa redistribution gratuites.
Nous mettons le dictionnaire "mrz.traineddata" à disposition en téléchargement sur notre site web. Ce dictionnaire peut également être téléchargé depuis d’autres ressources Internet.

Le dictionnaire "mrz.traineddata" a été ajouté à la liste des dictionnaires pris en charge (élément MRZ dans l'énumération Vintasoft.Imaging.Ocr.OcrLanguage) depuis la version 11.0.5.1 du VintaSoft OCR .NET Plug-in.

Vous pouvez lire des informations plus détaillées sur les symboles MRZ sur Wikipédia: https://en.wikipedia.org/wiki/Machine-readable_passport

Voici une image de Wikipédia représentant un document avec une zone de lecture automatique (ZLA):



Voici un code C# illustrant la reconnaissance des symboles ZLA dans une image à l'aide du moteur OCR Tesseract:
/// <summary>
/// Recognizes MRZ characters from image using Tesseract OCR engine.
/// </summary>
/// <param name="filename">The name of file, which stores image with MRZ characters.</param>
public static void RecognizeMRZCharactersUsingTesseractOCR(string filename)
{
    // create an image collection
    using (Vintasoft.Imaging.ImageCollection images = 
        new Vintasoft.Imaging.ImageCollection())
    {
        // add images from file to the image collection
        images.Add(filename);

        System.Console.WriteLine("Create Tesseract OCR engine...");
        // create the Tesseract OCR engine
        using (Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr tesseractOcr = 
            new Vintasoft.Imaging.Ocr.Tesseract.TesseractOcr())
        {
            System.Console.WriteLine("Initialize OCR engine...");
            // init the Tesseract OCR engine for recognition of MRZ characters (machine-readable zones)
            tesseractOcr.Init(new Vintasoft.Imaging.Ocr.OcrEngineSettings(Vintasoft.Imaging.Ocr.OcrLanguage.MRZ));

            // for each image in image collection
            foreach (Vintasoft.Imaging.VintasoftImage image in images)
            {
                System.Console.WriteLine("Recognize the image...");
                
                // recognize text in image
                Vintasoft.Imaging.Ocr.Results.OcrPage ocrResult = tesseractOcr.Recognize(image);

                // output the recognized text

                System.Console.WriteLine("Page Text:");
                System.Console.WriteLine(ocrResult.GetText());
                System.Console.WriteLine();
            }

            // shutdown the Tesseract OCR engine
            tesseractOcr.Shutdown();
        }

        // free images
        images.ClearAndDisposeItems();
    }
}