Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pytesseract中应用用户模式_Python_Tesseract_Python Tesseract - Fatal编程技术网

Python 在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来检测图像中字符串的特定模式。 据我所知,正确使用
用户模式将有助于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")