【发布时间】: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 就可以了