PyTesseract无法识别图像

时间:2017-11-19 16:02:28

标签: python opencv python-tesseract

我目前正面临pytesseract问题,该软件无法检测到此图片中的数字:

https://i.stack.imgur.com/kmH2R.png

这是从应用了阈值过滤器的较大图像中获取的。

由于某些原因,pytesseract并不想识别此图像中的6。有什么建议?这是我的代码:

image = #Insert raw image here. My code takes a screenshot.
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
image = cv2.medianBlur(image, 3)
rel, gray = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# If you want to use the image from above, start here.
image = Image.fromarray(image)
string = pytesseract.image_to_string(image)
print(string)
编辑:经过进一步的调查,我的代码可以正常工作,包含2位数。但不是那些有单数字的人。

1 个答案:

答案 0 :(得分:3)

pytesseract默认为查找大块文本(PSM_SINGLE_BLOCK或--psm 6)的模式,以便使用选项--psm 10(PSM_SINGLE_CHAR)检测单个字符,然后运行它。但是,由于您提供的图像角落中的黑点,它会将它们检测为随机破折号并且在此模式下不返回任何内容,因为它有多个字符,因此在这种情况下您需要使用--psm 8 (PSM_SINGLE_WORD):

string = pytesseract.image_to_string(image, config='--psm 8')

此输出将包含那些随机字符,因此您需要在pytesseract运行后去除它们或改善数字周围的边界框以消除任何噪音。此外,如果您检测到的所有字符都是数字,则可以添加' -c tessedit_char_whitelist = 0123456789'在' - psm 8'改善检测。

简化代码的其他一些小技巧是cv2.imread有一个选项可以将图像读取为黑色&白色所以你以后不需要运行cvtColor,只需这样做:

image = cv2.imread('/path/to/image/6.png', 0)

您也可以在调用pytesseract时创建PIL图像对象,以便该行简化为:

string = pytesseract.image_to_string(Image.Image.fromarray(img), config='--psm 8')

只要您将PIL导入为图像'在脚本的顶部。