【问题标题】:Tesseract OCR not splitting lines correctlyTesseract OCR 没有正确分割线
【发布时间】:2020-11-22 02:30:01
【问题描述】:

对于我的应用程序,我需要使用 OCR 从发票中提取文本。为此,我将需要扫描的发票裁剪到各个列,并将这些裁剪后的图像放入 tesseract。对于大多数列,这可以完美运行,但有一些列不会拆分行,而是在同一个字符串中输出所有内容。

我目前正在尝试使用 string.split() 方法,使用“\n”和“\r”作为参数。

下面的代码显示了我是如何尝试将输出拆分为字符串数组:

public string[] ProcessFile(Image InputImage)
        {
            Bitmap WorkImage = new Bitmap(InputImage);
            string[] Output;

            Tesseract.TesseractEngine Engine = new TesseractEngine("./tessdata", "eng", EngineMode.TesseractAndCube);
            Page RawOutput = Engine.Process(WorkImage);
            string ConvertedOutput = RawOutput.GetText();
            Output = ConvertedOutput.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
            Engine.Dispose();
            return Output;
        }

对于包含以下值的列 “产品 1” “产品 2” “产品 3” ETC 这很好用,但是当列包含单个数字时,如下所示: “1” “4” “12” “6”

它只返回“14126”。

我希望有人能够指出我的解决方案。 非常感谢!

【问题讨论】:

  • 你读过 Tesseract 的 GitHub wiki 吗?这有什么帮助吗:github.com/tesseract-ocr/tesseract/wiki/ControlParams?
  • @BernoulliIT 我现在有,我相信这是针对从命令行使用 Tesseract 的人。因此,我一直无法在 C# 中调用这些参数。
  • 您使用的 API 没有提供任何设置属性/类来定义识别期间使用的特定参数?请对 tesseract c# 类/接口做一些逆向工程。
  • @BernoulliIT 在对 pagesegmentationmode 进行了一番摆弄之后,我设法让它工作了。将其设置为 PageSegMode.SingleBlock 就可以了

标签: c# ocr tesseract


【解决方案1】:

你读过 Tesseract 的 GitHub wiki 吗?这有什么帮助吗:github.com/tesseract-ocr/tesseract/wiki/ControlParams?

您可以使用PageSegmentationModePageSegMode.SingleBlock 来完成您要查找的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2015-09-10
    • 2013-07-16
    相关资源
    最近更新 更多