Analizar el diseño de la imagen de un documento con Tesseract OCR en .NET

Categoría del blog: OCR.NET

17.02.2022

El reconocimiento de texto de una imagen de un documento consta de dos pasos. El primero analiza el diseño de la imagen; es decir, determina la posición de los párrafos, las líneas de texto, las palabras y los símbolos. El segundo paso realiza el reconocimiento de caracteres en la imagen del documento y los separa en párrafos, líneas de texto y palabras.

VintaSoft Imaging .NET SDK con el VintaSoft OCR .NET Plug-in permite reconocer texto en la imagen de un documento mediante el método TesseractOcr.Recognize. Este método realiza ambos pasos del reconocimiento de texto, es decir, analiza el diseño y realiza el reconocimiento de caracteres.

A veces es necesario analizar la posición de párrafos, líneas de texto, palabras y símbolos en la imagen del documento sin reconocimiento de caracteres.
VintaSoft Imaging .NET SDK con el VintaSoft OCR .NET Plug-in permite analizar el diseño de la imagen del documento (determinar la posición de párrafos, líneas de texto, palabras y símbolos en la imagen del documento) utilizando el método TesseractOcr.AnalyzeLayout. El método TesseractOcr.AnalyzeLayout funciona más rápido que el método TesseractOcr.Recognize porque el método TesseractOcr.AnalyzeLayout analiza el diseño de la imagen del documento, pero no realiza el reconocimiento de caracteres.

Aquí se muestra código C# que demuestra cómo analizar el diseño de la imagen de un documento con el motor de OCR Tesseract (método TesseractOcr.AnalyzeLayout):
/// <summary>
/// Analyzes page layout using Tesseract OCR engine.
/// </summary>
/// <param name="filename">The name of document image file.</param>
public static void AnalyzePageLayoutUsingTesseractOCR(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 English characters
            tesseractOcr.Init(new Vintasoft.Imaging.Ocr.OcrEngineSettings(Vintasoft.Imaging.Ocr.OcrLanguage.English));

            // for each image in image collection
            foreach (Vintasoft.Imaging.VintasoftImage image in images)
            {
                System.Console.WriteLine("Recognize the image...");

                // set image for Tesseract OCR engine
                tesseractOcr.SetImage(image);

                // analyze page layout and get result as OCR page
                Vintasoft.Imaging.Ocr.Results.OcrPage ocrPage = tesseractOcr.AnalyzeLayout();

                // clear image in Tesseract OCR engine
                tesseractOcr.ClearImage();

                // calculate count of regions, paragraphs, lines, words, symbols

                int regionCount = ocrPage.Regions.Count;
                int paragraphCount = 0;
                int lineCount = 0;
                int wordCount = 0;
                int symbolCount = 0;

                foreach (Vintasoft.Imaging.Ocr.Results.OcrRegion region in ocrPage.Regions)
                {
                    Vintasoft.Imaging.Ocr.Results.OcrTextRegion textRegion =
                        region as Vintasoft.Imaging.Ocr.Results.OcrTextRegion;
                    paragraphCount += textRegion.Paragraphs.Count;
                    foreach (Vintasoft.Imaging.Ocr.Results.OcrParagraph paragraph in textRegion.Paragraphs)
                    {
                        lineCount += paragraph.TextLines.Count;
                        foreach (Vintasoft.Imaging.Ocr.Results.OcrTextLine line in paragraph.TextLines)
                        {
                            wordCount += line.Words.Count;
                            foreach (Vintasoft.Imaging.Ocr.Results.OcrWord word in line.Words)
                            {
                                symbolCount += word.Symbols.Count;
                            }
                        }
                    }
                }

                // output information about count of regions, paragraphs, lines, words, symbols

                System.Console.WriteLine("Layout result:");
                System.Console.WriteLine(string.Format("- Region count: {0}", regionCount));
                System.Console.WriteLine(string.Format("- Paragraph count: {0}", paragraphCount));
                System.Console.WriteLine(string.Format("- Line count: {0}", lineCount));
                System.Console.WriteLine(string.Format("- Word count: {0}", wordCount));
                System.Console.WriteLine(string.Format("- Symbol count: {0}", symbolCount));
                System.Console.WriteLine();
                System.Console.ReadKey();
            }

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

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