《Python 验证码识别:用 Pillow+Tesseract 破解图形验证码》
·
Python 验证码识别:用 Pillow+Tesseract 破解图形验证码
验证码识别是自动化测试和数据分析中的常见需求。通过结合 Pillow(图像处理库)和 Tesseract(OCR引擎),可高效破解简单图形验证码。以下是完整实现流程:
1. 核心工具原理
- Pillow:处理图像预处理(裁剪、二值化、降噪)
- Tesseract:光学字符识别引擎,支持多语言
- 识别成功率公式:
$$识别准确率 = \frac{\text{正确识别字符数}}{\text{总字符数}} \times 100%$$
2. 实现步骤
(1) 安装依赖
pip install pillow pytesseract
# 需单独安装 Tesseract-OCR 引擎(官网下载)
(2) 图像预处理(关键步骤)
使用 Pillow 进行:
- 灰度化:$Gray = 0.299R + 0.587G + 0.114B$
- 二值化:$Pixel = \begin{cases} 255 & \text{if } value > threshold \ 0 & \text{otherwise} \end{cases}$
- 降噪:去除孤立像素点
(3) OCR 识别
调用 Tesseract 提取文本
3. 完整代码示例
from PIL import Image, ImageFilter
import pytesseract
def crack_captcha(image_path):
# 1. 图像预处理
img = Image.open(image_path)
img = img.convert("L") # 灰度化
img = img.point(lambda x: 255 if x > 180 else 0) # 二值化 (阈值180)
img = img.filter(ImageFilter.MedianFilter()) # 中值滤波降噪
# 2. OCR识别
text = pytesseract.image_to_string(img, config="--psm 7")
return text.strip()
# 使用示例
result = crack_captcha("captcha.png")
print(f"识别结果: {result}")
4. 关键参数说明
| 参数 | 作用 | 推荐值 |
|---|---|---|
--psm 7 |
单行文本模式 | 适用于标准验证码 |
| 二值化阈值 | 分离前景/背景 | 160-200 |
| 中值滤波 | 消除椒盐噪声 | 3x3 滤波器 |
5. 优化方向
- 复杂验证码处理:
- 添加形态学操作(膨胀/腐蚀)
- 分割字符后单独识别
- 训练自定义模型:
tesseract --train [训练数据] - 对抗干扰线:
- 使用傅里叶变换去除周期性噪声
- 颜色通道分离(针对彩色干扰)
注意:该方法适用于简单验证码(如纯文本无扭曲)。高级验证码需结合CNN等深度学习方案,准确率可达 $90%+$。
更多推荐
所有评论(0)