Analyse de la mise en page d'une image de document à l'aide de Tesseract OCR en .NET

Catégorie du blog: OCR.NET

17.02.2022

La reconnaissance de texte à partir d'une image de document se déroule en deux étapes. La première étape analyse la mise en page de l'image du document, c'est-à-dire qu'elle détermine la position des paragraphes, des lignes de texte, des mots et des symboles dans l'image du document. La deuxième étape effectue la reconnaissance des caractères dans l'image du document et sépare les caractères en paragraphes, lignes de texte et mots.

VintaSoft Imaging .NET SDK, associé au VintaSoft OCR .NET Plug-in, permet de reconnaître le texte dans une image de document grâce à la méthode TesseractOcr.Recognize. Cette méthode effectue les deux étapes de la reconnaissance de texte: l’analyse de la mise en page et la reconnaissance des caractères.

Il est parfois nécessaire d'analyser la position des paragraphes, des lignes de texte, des mots et des symboles dans l'image du document sans reconnaissance de caractères.
VintaSoft Imaging .NET SDK avec VintaSoft OCR .NET Plug-in permet d'analyser la mise en page d'une image de document (déterminer la position des paragraphes, des lignes de texte, des mots et des symboles dans l'image du document) à l'aide de la méthode TesseractOcr.AnalyzeLayout. La méthode TesseractOcr.AnalyzeLayout est plus rapide que la méthode TesseractOcr.Recognize, car la méthode TesseractOcr.AnalyzeLayout analyse la mise en page de l'image du document, mais n'effectue pas de reconnaissance de caractères.

Voici un code C# qui montre comment analyser la mise en page d'une image de document à l'aide du moteur OCR Tesseract (méthode 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();
    }
}