Reconocer caracteres MRZ a partir de una imagen en .NET

Categoría del blog: OCR.NET

17.02.2022

VintaSoft Imaging .NET SDK con VintaSoft OCR .NET Plug-in permite reconocer texto de imágenes utilizando el motor OCR Tesseract. Muchos diccionarios creados para el motor OCR Tesseract brindan la capacidad de ejecutar el reconocimiento de texto en más de 100 idiomas.

Algunos autores encontrados en Internet sugieren sus diccionarios gratuitos para el reconocimiento de símbolos MRZ (zonas legibles por máquina) utilizando el motor OCR Tesseract.
Hemos probado algunos de ellos y nos hemos asegurado de que el diccionario "mrz.traineddata" proporcione una buena calidad de reconocimiento de símbolos MRZ.
El diccionario "mrz.traineddata" se ofrece bajo la licencia BSD-3, que permite el uso y la redistribución gratuitos de este archivo.
El diccionario "mrz.traineddata" está disponible para su descarga desde nuestro sitio web; también puede descargarse desde otros recursos de Internet.

El diccionario "mrz.traineddata" se ha añadido a la lista de diccionarios compatibles (elemento MRZ en la enumeración Vintasoft.Imaging.Ocr.OcrLanguage) desde la versión 11.0.5.1 del VintaSoft OCR .NET Plug-in.

Puede encontrar información más detallada sobre los símbolos MRZ en Wikipedia: https://en.wikipedia.org/wiki/Machine-readable_passport

Aquí tiene una imagen de Wikipedia que representa un documento con una zona legible por máquina (MRZ):



Aquí tiene código C# que demuestra cómo reconocer los símbolos MRZ de imagen que utiliza el motor 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();
    }
}