我在Tesseract库中使用c#包装器(如果我没有弄错,则为3.02)(https://github.com/charlesw/tesseract)。我已经让它运行并提供输出,但输出本质上是垃圾。通常它什么都不给,什么时候给它什么东西它往往是一团糟。我知道它在理论上有效,因为我已经在一些非常完美的图像上尝试了它并且它有效。我想知道是否有人可以帮助我诊断问题并提出一些方法来提高Tesseract的准确性。我已将所有图像转换为黑白图像,分辨率设置为300x300。我不会以编程方式进行任何线条矫正,但正如您在下面看到的那样,它们非常直接。
我尝试翻转颜色,认为它可能会产生更大的对比度(因为大多数文本在白色背景上是黑色的,而工作的是黑色背景上的白色文本)。但是:
我怀疑这与" INVOICE中的字母之间的额外间距有关。"但必须有一些方法可以用更紧凑的字体获得不错的结果。欢迎任何建议,我在这里是一个相对的菜鸟。
答案 0 :(得分:2)
如果可能,您应该考虑使用分辨率更高的照片。关于洛克希德马丁和付款图像的另一个问题可能是字母之间的差距太小。如果Tesseract(几乎)连接到单词的下一个字母,则无法检测单个字母。 我会建议像openCV这样的图像处理库来改善你的结果。 你可以尝试侵蚀/扩张。如果正确的参数用于内核,这将分隔字母。使用不同的内核来查看最适合您的内容。
ERROR: null, DOMException{stack: 'Error: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
在我的项目工作中,对我帮助很大的是使用自适应阈值。我发现这比将它变成灰度或二进制图像更有效。 注意:Java代码在C中应该非常相似。
Mat element = getStructuringElement( erosion_type,
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
Point( erosion_size, erosion_size ) );
erode( src, erosion_dst, element );
这是我在Pixtern中选择你的一个图像后获得的,这是我的一个android项目(github上的源代码)。我正在使用适应阈值,但没有扩张/侵蚀,结果已经相当不错。
Image after applying adaptive threshold
Result (图片= Lockheed Martin Aeronautim)
付款方式和类似方式: 尝试使用正常阈值并反转图像(黑色字体,白色背景)。同样,之后可以使用膨胀/侵蚀。 Java代码:
Imgproc.adaptiveThreshold(cropedIm, cropedIm, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 29, 10);