使用 opencv、tesseract 在 python 中遇到数字识别问题
Having problem with digits recognition in python using opencv, tesseract
我正在尝试使用 opencv 裁剪图像,然后让 tesseract 读取它,但即使图像非常清晰,它也无法识别图像中的数字,以下是操作的代码行:
screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
cv2.imwrite(f'data\screenshot{e_name}.png',crop_img)
cv2.imshow('ad',crop_img)
cv2.waitKey(0)
text = pytesseract.image_to_string(crop_img)
print(text)
cv2.imshow('ad',crop_img)
的输出看起来像这样:
但是 print(text)
的输出只是控制台中的一个新的空白行。
非常感谢您的帮助(由于我不是专业程序员,我可能会犯一些愚蠢的错误,对此我深表歉意)。
EDIT1:感谢评论,我添加了几行:
screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
crop_img = cv2.bitwise_not(crop_img)
ret, thresh1 = cv2.threshold(crop_img, 120, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('ad',thresh1)
cv2.waitKey(0)
text = pytesseract.image_to_string(thresh1)
输出现在看起来更有希望了:
但结果似乎保持不变,我从互联网上检查了一些随机文本图像,大多数都工作正常。
添加 config='--psm 6'
.
时会发生神奇的事情
6 Assume a single uniform block of text.
代码示例:
crop_img = cv2.imread('crop_img.png')
text = pytesseract.image_to_string(crop_img, config='--psm 6')
print(text)
结果:
73.9
我正在尝试使用 opencv 裁剪图像,然后让 tesseract 读取它,但即使图像非常清晰,它也无法识别图像中的数字,以下是操作的代码行:
screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
cv2.imwrite(f'data\screenshot{e_name}.png',crop_img)
cv2.imshow('ad',crop_img)
cv2.waitKey(0)
text = pytesseract.image_to_string(crop_img)
print(text)
cv2.imshow('ad',crop_img)
的输出看起来像这样:
但是 print(text)
的输出只是控制台中的一个新的空白行。
非常感谢您的帮助(由于我不是专业程序员,我可能会犯一些愚蠢的错误,对此我深表歉意)。
EDIT1:感谢评论,我添加了几行:
screen_img = cv2.imread(f'data\screenshot\{e_name}.png')
crop_img = screen_img[350:385,185:270]
crop_img = cv2.cvtColor(crop_img,cv2.COLOR_BGR2GRAY)
crop_img = cv2.bitwise_not(crop_img)
ret, thresh1 = cv2.threshold(crop_img, 120, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.imshow('ad',thresh1)
cv2.waitKey(0)
text = pytesseract.image_to_string(thresh1)
输出现在看起来更有希望了:
但结果似乎保持不变,我从互联网上检查了一些随机文本图像,大多数都工作正常。
添加 config='--psm 6'
.
6 Assume a single uniform block of text.
代码示例:
crop_img = cv2.imread('crop_img.png')
text = pytesseract.image_to_string(crop_img, config='--psm 6')
print(text)
结果:
73.9