c# - Tesseract OCR 文本位置

标签 c# asp.net ocr tesseract

我正在使用 tesseract 处理 OCR。我能够使应用程序运行并获得输出。在这里,我试图从发票账单中提取数据并获取提取的数据。但是输入中单词之间的间距在输出文件中必须相似。我现在正在获取每个单词和坐标。我需要根据坐标导出到文本文件

代码示例:

            using (var engine = new TesseractEngine(Server.MapPath(@"~/tessdata"), "eng", EngineMode.Default))
            {
                engine.DefaultPageSegMode = PageSegMode.AutoOsd;
                // have to load Pix via a bitmap since Pix doesn't support loading a stream.

                using (var image = new System.Drawing.Bitmap(imageFile.PostedFile.InputStream))
                {

                    Bitmap bmp = Resize(image, 1920, 1080);

                    using (var pix = PixConverter.ToPix(image))
                    {
                        using (var page = engine.Process(pix))
                        {
                            using (var iter = page.GetIterator())
                            {
                                iter.Begin();
                                do
                                {
                                    Rect symbolBounds;
                                    string path = Server.MapPath("~/Output/data.txt");
                                    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out symbolBounds))
                                    {
                                        // do whatever you want with bounding box for the symbol

                                    var curText = iter.GetText(PageIteratorLevel.Word);

                                        //WriteToTextFile(curText, symbolBounds, path);
                                        resultText.InnerText += curText;
                                        // Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
                                    }
                                } while (iter.Next(PageIteratorLevel.Word));
                            }


                            meanConfidenceLabel.InnerText = String.Format("{0:P}", page.GetMeanConfidence());

                        }
                    }
                }
            }

这是显示错误间距的输入和输出示例。

Input Output

最佳答案

您可以使用 page.GetIterator() 遍历页面中找到的项目。对于单个项目,您可以获得一个“边界框”,这是一个 Tesseract.Rect(矩形结构),其中包含:X1Y1 , X2, Y2 坐标。

Tesseract.PageIteratorLevel myLevel = /*TODO*/;
using (var page = Engine.Process(img))
using (var iter = page.GetIterator())
{
    iter.Begin();
    do
    {
        if (iter.TryGetBoundingBox(myLevel, out var rect))
        {
            var curText = iter.GetText(myLevel);
            // Your code here, 'rect' should containt the location of the text, 'curText' contains the actual text itself
        }
    } while (iter.Next(myLevel));
}

没有明确的方法可以使用输入中的位置来分隔输出中的文本。您将不得不为此编写一些自定义逻辑。

您可以使用以下方法估算文本左侧所需的空格数:

var padLeftSpaces = (int)Math.Round((rect.X1 / inputWidth) * outputWidthSpaces);

关于c# - Tesseract OCR 文本位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51282214/

相关文章:

java - 替换图像中的嘈杂颜色以从验证码中获取带有 OCR 的文本

ios - 扫描名片 Tesseract 和 Leptonica iOS

c# - 如何创建包含一个字符串变量和三个 int 变量的字典

c# - Entity Framework - 包含在子查询中? - 第2部分

.net - 如果使用customErrors,则在Application_Error中重定向是否冗余?

带复选框的 asp.net mvc TreeView

c# - Autofac 相当于 StructureMap 的 WhatDoIHave()

c# - Odbc 连接到 .tps 数据库不工作

asp.net - 创建过期的 ASP.NET session 值

ios - 如何在 iOS 应用中识别图像中的手写数字?