使用Pytesseract识别验证码文本出错,该如何优化识别?
如何用Pytesseract正确识别验证码文本
当前你的代码直接识别原始图像,未针对验证码的干扰特征做预处理,也未配置适配的Tesseract识别参数,导致识别结果偏差。可以通过图像预处理+参数优化来解决:
一、图像预处理(核心优化步骤)
验证码普遍存在噪点、干扰线等干扰元素,预处理能有效突出字符特征:
- 转为灰度图:减少多通道颜色干扰,是OCR识别的基础预处理步骤
- 自适应二值化:将图像转为黑白对比模式,自动适配局部光照差异,让字符与背景分离更彻底
- 降噪处理:消除细碎噪点,让字符边缘更清晰
二、优化后的完整代码
import pytesseract import cv2 pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe" path = "C:\\Users\\User\\Desktop\\guvenlik.jpg" src = cv2.imread(path) # 1. 转为灰度图 gray_img = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) # 2. 自适应二值化(反转黑白,让字符为白色、背景为黑色) binary_img = cv2.adaptiveThreshold( gray_img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2 ) # 3. 中值滤波降噪 clean_img = cv2.medianBlur(binary_img, 3) # 配置Tesseract识别参数 custom_config = r'--psm 8 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' text = pytesseract.image_to_string(clean_img, config=custom_config) # 去除识别结果中的多余空白字符 print(text.strip())
三、关键参数说明
--psm 8:指定Tesseract将图像视为单个文本块,匹配验证码单行字符的特征--oem 3:使用混合OCR引擎,结合传统算法与LSTM模型,平衡识别准确率与速度tessedit_char_whitelist:限定识别范围为大写字母+数字,过滤无关字符,从根源减少误识别概率
额外调整建议
如果识别仍有误差,可以尝试:
- 调整二值化的窗口大小(
11)和常数(2),适配不同验证码的干扰强度 - 使用
cv2.dilate函数膨胀字符,强化边缘特征 - 确保Tesseract已更新到最新版本,提升模型的字符识别能力
内容的提问来源于stack exchange,提问作者Doğucan ÇALIŞKAN
相关产品推荐
相关产品推荐

