【问题标题】:Steps to use tesseract to analyze rectangular area on screen使用tesseract分析屏幕矩形区域的步骤
【发布时间】:2014-03-02 22:09:28
【问题描述】:

我想使用 tesseract OCR 在 Visual Studio C# 上使用 c# 来获取屏幕矩形区域上的文本。

首先,让 tesseract 在 Visual Studio C# 中工作需要什么?我是使用 Visual Studio 和设置包装器的新手。在谷歌上搜索了几个小时后,我发现我需要:a wrapper(charlesw),一个来自官方网站的语言包。我还需要安装 windows tesseract-ocr 吗?

我已按照 charlesw 的 GitHu 上的步骤在我的项目中设置包装器。但是,我仍然不确定如何使用这些功能。

我假设这是声明 OCR 引擎的方法: TesseractEngine engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);

要分析屏幕上的矩形区域,我可以捕获某个区域的屏幕,然后将其保存为 .bmp 或 .tif。接下来,要使用引擎分析图像。 engine.[unkwonapi](imagepath); //what is the api name going to be? I tried to look it up [here][2]. 或者,有人说可以用tesseract的api来实现,我们可以输入矩形区域的坐标。

【问题讨论】:

    标签: c# ocr tesseract region


    【解决方案1】:

    包装器捆绑 Tesseract DLL(如 libtesseract302.dll)。不需要安装windows tesseract-ocr;事实上,您不应该这样做,因为它会干扰包装器。

    您可以使用以下任一方法在图像上指定感兴趣区域:

    engine.Process(Bitmap image, Rect region, PageSegMode? pageSegMode = null)
    

    engine.Process(Pix image, Rect region, PageSegMode? pageSegMode = null)
    

    【讨论】:

    • 感谢您的回复。我可以将多少个参数传递给 Process()?有详细的文件可以看吗?另外,我将如何在 Process() 之后检索文本?
    • Process 返回一个Page 对象,您可以调用该对象来返回 OCRed 文本。检查项目的单元测试的使用情况。
    【解决方案2】:

    这是我的过程。我首先必须栅格化 PDF(这可能不是您的要求)

    1.) 安装 Ghostcript 9.26 from here 更高版本不支持下一步

    2.) 安装 Ghostscript.NET NuGet Install-Package Ghostscript.NET -Version 1.2.1

    3.) 安装 Tesseract NuGet Install-Package Tesseract -Version 3.3.0

    这是我的 PDF 光栅化例程,使用 Ghostscript.NET

    public static List<MemoryStream> GetPdfImages(FileInfo pdfFile, DirectoryInfo workingDir, string fileNamingToken, TextWriter _logger)
    {
        int desired_x_dpi = 150;
        int desired_y_dpi = 150;
    
        string inputPdfPath = pdfFile.FullName;
        var streams = new List<MemoryStream>();
        using (var rasterizer = new GhostscriptRasterizer())
        {
        GhostscriptVersionInfo gsVersionInfo = GhostscriptVersionInfo.GetLastInstalledVersion(GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL);
    
        try
        {
            rasterizer.Open(inputPdfPath, gsVersionInfo, true);
        }
        catch (Ghostscript.NET.GhostscriptAPICallException exc)
        {
            _logger.WriteLine("There is an issue with this version of Ghostscript or how Ghostscript was installed. As of Winter 2020, GS 9.26 will work the best with Ghostscript.NET");
        }
        for (var pageNumber = 1; pageNumber <= rasterizer.PageCount; pageNumber++)
        {
    
            var memoryStrm = new MemoryStream();
    
            var img = rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
                //save to a memory stream to be returned
            img.Save(memoryStrm, System.Drawing.Imaging.ImageFormat.Tiff);
                //or save to the file system to see how well it's working
            img.Save($"{workingDir.FullName}\\{fileNamingToken}_{pageNumber}.TIF");
            _logger.WriteLine($"Image Dimensions: {img.Width} x {img.Height}");
            streams.Add(memoryStrm);
        }
        }
        return streams;
    }
    
    

    创建内存流列表后,我选择循环遍历它们并使用 Tesseract 对其中的一个矩形进行 OCR。如果你有很多文件要处理,你不应该一遍又一遍地调用引擎..你应该把它放在其他地方

    var _engine = new TesseractEngine("./tessdata", "eng", EngineMode.Default, "letters");
    
    var topHalfPageRect = Rect.FromCoords(1, 1, 1275, 825);//at 150 DPI, get top of 8.5x11 page
    
    for(int i =0;i< _streams.Count;i++)
    {
       var imgStm = _streams[i];//my list of memorystreams created by Ghostcript 9.26
    
       imgStm.Position = 0;//set memorystream playhead back to start
    
        using (var imageWithText = Pix.LoadTiffFromMemory(imgStm.ToArray()))
        {
          using (var page = _engine.Process(imageWithText, topHalfPageRect , PageSegMode.SparseText))
          {
            var text = page.GetText();
            var processedText = text.Replace("\n", "").Trim();
            Console.WriteLine(processedText);
    
            if (MyRegexPatterns.Pattern1.IsMatch(processedText))
            {
              Console.WriteLine("*** FOUND IT!! ***");
            }
           }
        
       }
    
       imgStm.Dispose();//but not matter what, disppose of the stream now
    }
    

    【讨论】:

      猜你喜欢
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多