尝试在 python 中使用 OpenCV 和 Tesseract 识别验证码,但准确性不高
Trying to recognize Captcha with OpenCV & Tesseract in python, but not good Accuracy
我正在尝试将验证码识别为文本。
这个验证码不是很难。 (如我所想)
我打开图片,用OpenCV转换,方便识别。
我给你举个例子。
示例验证码
在 OpenCV Catpcha 之后
image = cv2.imread(filename)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
cv2.imwrite('OPENCV.png', gray)
# Get Text From Image
pytesseract.image_to_string(Image.open('OPENCV.png'), lang='eng', config="-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 8")
很简单。但结果是 'PLLY2',但我想要 'PLLVI2' 或 'PLLV12'。
我可以使用任何选项或其他方法来获得更高的准确性吗?
我使用'psm 8'的一个词选项。我曾试图让 tesseract 找到固定数量的字符,但这是不可能的。
如果你给我一个提示,我将不胜感激。非常感谢您阅读这个问题。
您可以将图像切片以制作每个字母并使用 --psm 10:
image = cv2.imread(filename)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
gray1 = gray[:, :25]
gray2 = gray[:, 25:50]
gray3 = gray[:, 50:75]
gray4 = gray[:, 75:100]
gray5 = gray[:, 100:125]
gray6 = gray[:, 125:]
print(''.join([pytesseract.image_to_string(i, config='--psm 10 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in [gray1, gray2, gray3, gray4, gray5, gray6]])
我正在尝试将验证码识别为文本。
这个验证码不是很难。 (如我所想)
我打开图片,用OpenCV转换,方便识别。
我给你举个例子。 示例验证码
在 OpenCV Catpcha 之后
image = cv2.imread(filename)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
cv2.imwrite('OPENCV.png', gray)
# Get Text From Image
pytesseract.image_to_string(Image.open('OPENCV.png'), lang='eng', config="-c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ --psm 8")
很简单。但结果是 'PLLY2',但我想要 'PLLVI2' 或 'PLLV12'。
我可以使用任何选项或其他方法来获得更高的准确性吗?
我使用'psm 8'的一个词选项。我曾试图让 tesseract 找到固定数量的字符,但这是不可能的。
如果你给我一个提示,我将不胜感激。非常感谢您阅读这个问题。
您可以将图像切片以制作每个字母并使用 --psm 10:
image = cv2.imread(filename)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
gray1 = gray[:, :25]
gray2 = gray[:, 25:50]
gray3 = gray[:, 50:75]
gray4 = gray[:, 75:100]
gray5 = gray[:, 100:125]
gray6 = gray[:, 125:]
print(''.join([pytesseract.image_to_string(i, config='--psm 10 -c tessedit_char_whitelist=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ') for i in [gray1, gray2, gray3, gray4, gray5, gray6]])