Python 在pytesseract中应用用户模式
我正在使用pytesseract来检测图像中字符串的特定模式。 据我所知,正确使用Python 在pytesseract中应用用户模式,python,tesseract,python-tesseract,Python,Tesseract,Python Tesseract,我正在使用pytesseract来检测图像中字符串的特定模式。 据我所知,正确使用用户模式将有助于pytesseract更好地扫描特定的字符串模式。然而,我想不出如何让它发挥作用。有助于澄清要使用,我必须使用config参数(pytesseract.pytesseract.image_to_字符串(image,config=')),但我不知道如何将其应用到我的案例中 我试图找到这个正则表达式模式:\d{5}\.?\d{5}\.?\d{6}?\d{5}\.?\d{6}\d?\d{14}。我应该如何
用户模式将有助于pytesseract更好地扫描特定的字符串模式。然而,我想不出如何让它发挥作用。有助于澄清要使用,我必须使用config
参数(pytesseract.pytesseract.image_to_字符串(image,config=')),但我不知道如何将其应用到我的案例中
我试图找到这个正则表达式模式:\d{5}\.?\d{5}\.?\d{6}?\d{5}\.?\d{6}\d?\d{14}
。我应该如何在用户模式中应用这一点来帮助tesseract更好地进行OCR扫描?这可能不是您想要的答案,但几个月前我在tesseract中遇到了类似的问题。您可能想看看白名单,更具体地说,白名单中的所有数字。像这样
pytesseract.image_to_string(question_img, config="-c tessedit_char_whitelist=0123456789. -psm 6")
但是,这对我来说不起作用,所以我最终使用了opencv knn,这意味着您需要知道每个字符的位置……首先,我存储了一些我想要识别的字符的图像。并将这些检测添加到了一个临时文件中:
frame[y:y + h, x:x + w].copy().flatten()
在标记所有这些检测之后,我使用前面提到的knn对它们进行了训练
network = cv2.ml.KNearest_create()
network.train(data, cv2.ml.ROW_SAMPLE, labels)
network.save('pattern')
现在,所有的字符都可以使用
chars = [
frame[y1:y1 + h, x1:x1 + w].copy().flatten(), #char 1
frame[y2:y2 + h, x2:x2 + w].copy().flatten(), #char 2
frame[yn:yn + h, xn:xn + w].copy().flatten(), #char n
]
output = ''
network = cv2.ml.KNearest_create()
network.load('pattern')
for char in chars:
ret, results, neighbours, dist = network.findNearest([char.astype(np.float32)], 3)
output = '{0}'.format(result)
在此之后,您可以在字符串上执行正则表达式。总的训练和标记只花了我大约2个小时,所以应该是可行的。要找到它有点困难。
是的,tesseract
中的用户模式在旧版本的tesseract
中无法正常工作
参考
最后,我在tesseract
中找到了如何使用用户模式的示例
首先,确保tesseract
>>的版本=4.0。(我建议您安装tesseract
5.x,因为我在电脑中使用了5.x)
创建一个名为xxx.patterns
的文件。内容(带有UNIX行尾(换行字符)和结尾处的空行):
然后尝试使用:
最后,它对我起了作用(这是文档中的一个示例):
你也可以参考这一点。谢谢@jizhaosama。你知道应用用户模式是否有助于Pyteseract AI找到这些模式,或者这只是一个嵌入的正则表达式吗?@abutemutate不确定,但我认为应该。my.patterns应该是一个什么格式的文件?txt?@abutemutate在我的PC上,我创建了一个txt,并将其重命名为xx.patterns
。
\d{5}\.?\d{5} \.?\d{6} ?\d{5}\.?\d{6} ?\d ?\d{14}
pytesseract.image_to_string("test.png", config="--user-patterns yourpath/xxx.patterns")