gpt4 book ai didi

c# - Tesseract OCR 输出错误

转载 作者:行者123 更新时间:2023-11-30 16:53:16 28 4
gpt4 key购买 nike

我正在为 Tesseract 库使用 c# 包装器(如果我没记错的话是 3.02)( https://github.com/charlesw/tesseract )。我已经让它运行并提供输出,但该输出基本上是垃圾。通常它什么都不给,而当它确实给了一些东西时,它通常是一团糟。我知道它在理论上是有效的,因为我已经在一些非常完美的图像上尝试过它并且它有效。我想知道是否有人可以帮助我诊断问题并提出一些可以提高 Tesseract 准确性的方法。我已经将所有图像转换为黑白图像,分辨率设置为 300x300。我没有以编程方式拉直任何直线,但正如您在下面看到的那样,它们非常直。

enter image description here此图像完美运行

enter image description here这个根本不起作用,要么产生乱码,要么什么都不产生

我尝试翻转一些例子的颜色,认为它可能会产生更大的对比度(因为大多数文本是白底黑字,而有效的是黑底白字)。但是:

enter image description here根本不起作用,而

enter image description here再次完美运行。

我怀疑这与“INVOICE”中字母之间的额外间距有关。但是必须有一些方法可以用更紧凑的字体获得不错的结果。欢迎任何建议,我是这里的相对菜鸟。

最佳答案

如果可能,您应该考虑使用分辨率更高的图片。 Payments 图像的另一个问题可能是字母之间的间隙太小。如果单个字母(几乎)连接到单词的下一个字母,则 Tesseract 无法检测到它们。我会建议像 openCV 这样的图像处理库来改善你的结果。您可以尝试腐 eclipse /膨胀。如果内核使用了正确的参数,这将分隔字母。使用不同的内核,看看哪种内核最适合您。

Mat element = getStructuringElement(erosion_type,
Size(2 * erosion_size + 1, 2 * erosion_size + 1),
Point(erosion_size, erosion_size));

erode(src, erosion_dst, element);

在我处理项目时,对我帮助很大的是使用自适应阈值。我发现这比将其转换为灰度或二值图像更有效。注意:Java 代码,虽然在 C 中应该非常相似。

Imgproc.adaptiveThreshold(cropedIm, cropedIm, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 29, 10);

这是我在 Pixtern 中选择您的一张图片后得到的结果,Pixtern 是我的一个 android 项目(github 上的源代码)。我使用的是自适应阈值,但没有膨胀/腐 eclipse ,结果已经相当不错了。

[删除损坏的链接]

对于付款图像和类似图像:尝试使用正常阈值并反转图像(黑色字体,白色背景)。同样,之后可以使用膨胀/腐 eclipse 。 Java 代码:

//results in binary image
Imgproc.threshold(cropedIm, cropedIm, 127, 255, Imgproc.THRESH_BINARY);
//Inverting image
Core.bitwise_not(cropedIm, cropedIm);

关于c# - Tesseract OCR 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31710146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com