【发布时间】:2020-11-07 16:10:21
【问题描述】:
我正在尝试使用 OpenCV 和 pytesseract 解决一些简单的验证码。一些验证码样本是:
我尝试用一些过滤器去除嘈杂的点:
import cv2
import numpy as np
import pytesseract
img = cv2.imread(image_path)
_, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
img = cv2.morphologyEx(img, cv2.MORPH_OPEN, np.ones((4, 4), np.uint8), iterations=1)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.medianBlur(img, 3)
img = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imwrite('res.png', img)
print(pytesseract.image_to_string('res.png'))
生成的转换图像是:
不幸的是,pytesseract 只能正确识别第一个验证码。还有其他更好的转换吗?
最终更新:
正如@Neil 所建议的,我尝试通过检测连接的像素来消除噪音。为了找到连接的像素,我找到了一个名为connectedComponentsWithStats 的函数,它检测连接的像素并为组(组件)分配一个标签。通过找到连接的组件并删除具有少量像素的组件,我设法使用 pytesseract 获得更好的整体检测精度。
以下是新生成的图像:
【问题讨论】:
-
验证码是 CLYBJ CZSLK GJZPJ WATID
-
成功了。太好了。
标签: captcha python-tesseract opencv-python