Reconhecer caracteres MRZ em uma imagem usando .NET

Categoria do blog: OCR.NET

17.02.2022

O VintaSoft Imaging .NET SDK com o VintaSoft OCR .NET Plug-in permite o reconhecimento de texto em imagens usando o mecanismo OCR Tesseract. Os diversos dicionários criados para o mecanismo OCR Tesseract possibilitam a execução do reconhecimento de texto em mais de 100 idiomas.

Alguns autores encontrados na internet sugerem seus dicionários gratuitos para reconhecimento de símbolos MRZ (zonas legíveis por máquina) usando o mecanismo OCR Tesseract.
Testamos alguns deles e garantimos que o dicionário "mrz.traineddata" oferece boa qualidade no reconhecimento de símbolos MRZ.
O dicionário "mrz.traineddata" é oferecido sob a licença BSD-3, que permite o uso e a redistribuição gratuitos deste arquivo.
Disponibilizamos o dicionário "mrz.traineddata" para download em nosso site, e o dicionário também pode ser baixado de outros recursos da Internet.

O dicionário "mrz.traineddata" foi adicionado à lista de dicionários suportados (item MRZ na enumeração Vintasoft.Imaging.Ocr.OcrLanguage) desde a versão 11.0.5.1 do VintaSoft OCR .NET Plug-in.

Informações mais detalhadas sobre os símbolos MRZ podem ser encontradas na Wikipédia: https://en.wikipedia.org/wiki/Machine-readable_passport

Aqui está uma imagem da Wikipédia, que representa um documento com zona legível por máquina (MRZ):



Aqui está um código C# que demonstra como reconhecer símbolos MRZ em uma imagem usando o mecanismo 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();
    }
}