如何用tesseract(预处理或通过特殊的tesseract配置)正确地识别字符分隔符内的文本,尤其是梳状类型(第3个图像),如下三个图像所示:
https://i.stack.imgur.com/Jb5Qd.png
https://i.stack.imgur.com/GhzCa.png
https://i.stack.imgur.com/rI4c1.png
1
11, 9;9j1 | 0,7 4142 |
正如所观察到的,数字被正确地标记并作为提取文本的子集出现。但是,分隔符也被识别为“1”、“、”、“7”、“4”、“”。预期产量为1992.07.12。
2)我对图像识别是新手。图像预处理是OCR之前的一个重要步骤。我已经从左、下、右三个方向尝试了floodfill来删除字符分隔符。概念取自这里:https://www.learnopencv.com/filling-holes-in-an-image-using-opencv-python-c/虽然这个解决方案适用于这个特定的图像,但它肯定不是一个通用的解决方案。因为这些字符分隔符在许多形式中都很常见,所以一定有一个很好的方法来提取文本。
3)我尝试过谷歌搜索,但在前10页的结果中找不到任何可靠的东西(很多无关主题的噪音)。我的搜索词是“Tesseract字符分隔符”。糟糕的结果可能是因为搜索词的选择不佳,与简历社区使用的不同。
4)我试过abbyy finereader,文本识别没有问题。但是,这个应用程序是付费的,源代码是封闭的。
有很多方法可以解决你的问题。例如,如果构成单元格的线是连接的-您可以使用OpenCV过滤大型连接组件。
gray = cv2.imread('path_to_your/image.png', 0)
_, blackAndWhite = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1]
img2 = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if sizes[i] <= 5000: #CHANGE THIS VALUE TO CHANGE THRESHOLD.
img2[labels == i + 1] = 255
res = cv2.bitwise_not(img2)
cv2.imshow('res.png', res)
cv2.waitKey(0)
其他方法包括但不限于通过寻找轮廓或进行形态学操作来检测字母,使用启发式,如字母应该在同一条线上,等等。
问题内容: 我需要在数据库中填充纬度和经度列,但是原始信息存储为单个字符串 例如。 我猜想TRIM命令在这里很有用,但是我不知道如何告诉它每半个部分都精确地停在逗号上。 我希望能够提出一个简单的UPDATE查询,如下所示: 但是显然在LTRIM和RTRIM部分中需要做一些额外的工作,因此我只选择数据,但不包括UDFChar1中的逗号。 关于如何实现这一目标的任何想法? 问题答案: 请试试: 和 样
我试图开发一个简单的车牌识别PC应用程序(Java+OpenCV+Tess4j)。图像不是真的好(在进一步,他们将是好的)。我想为tesseract预处理图像,我被困在车牌检测(矩形检测)上。 我的脚步: 1)源图像 我用油漆从图像(第四步后)中裁剪出所需的区域,并得到: 然后我做了OCR(通过tesseract,tess4j): 而且得到了(足够好?)结果-“Y841OX EH”(几乎正确)
我有输入字符串'~~'作为分隔符。 例如:字符串s=“1~~vijay~~25~~pune”;当我在Java中用'~\\~'拆分它时,它工作得很好。 还有其他人面临同样的问题吗?请就这个问题发表评论。
在逗号处划分字符串的最佳方法是什么,这样每个单词都可以成为ArrayList的一个元素? 例如:
问题内容: 我有一个包含二进制数字的字符串。如何将其分成几对数字? 假设字符串是: 我想在每2个字符后添加一个分隔符,例如“:”(即冒号)。 我希望输出为: 我怎么能在Swift中做到这一点? 问题答案: Swift 5.1•Xcode 11或更高版本 测试中
为什么下面的bash代码不起作用? 预期产出: