You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:22