基于 Python 和 PaddleOCR 的验证码识别实战
验证码作为网站防护的第一道防线,广泛应用于防止恶意机器人操作。传统验证码识别方法受限于图像预处理和规则匹配,效果有限。本文介绍如何使用百度开源的 PaddleOCR 框架,结合 Python 语言,搭建一个高效的英文数字验证码识别系统。文章涵盖环境搭建、数据准备、代码实现及测试流程,帮助读者快速掌握验证码识别技术。
- 环境准备
1.1 安装 Python
确保本地已安装 Python 3.7 及以上版本,推荐使用 Anaconda 管理环境。
1.2 安装 PaddlePaddle 和 PaddleOCR
打开终端,执行以下命令安装 PaddlePaddle(根据你的设备选择CPU或GPU版本):
更多内容访问ttocr.com或联系1436423940
pip install paddlepaddle
然后安装 PaddleOCR:
pip install paddleocr
2. 验证码数据准备
为了训练和测试模型,我们需要准备英文数字验证码图片。你可以自行采集,也可以用以下代码生成示例验证码图片:
from captcha.image import ImageCaptcha
import random
import string
import os
def generate_captcha(text, filename):
image = ImageCaptcha(width=160, height=60)
image.write(text, filename)
if not os.path.exists('captchas'):
os.mkdir('captchas')
chars = string.ascii_uppercase + string.digits
for i in range(1000):
text = ''.join(random.choices(chars, k=4))
filename = f'captchas/{text}_{i}.png'
generate_captcha(text, filename)
3. PaddleOCR 识别代码实现
PaddleOCR 支持多语言文字识别,识别英文数字验证码十分方便。以下是完整的识别代码示例:
from paddleocr import PaddleOCR
import os
ocr = PaddleOCR(use_angle_cls=True, lang='en', use_gpu=False)
def recognize_captcha(image_path):
result = ocr.ocr(image_path, cls=True)
if result:
# 取识别的文本内容
texts = [line[1][0] for line in result]
return ''.join(texts)
return ''
if name == "main":
folder = 'captchas'
for filename in os.listdir(folder):
path = os.path.join(folder, filename)
text = recognize_captcha(path)
print(f'图片: {filename} --> 识别结果: {text}')
4. 代码说明
PaddleOCR 类初始化时设置了英文识别 lang='en',并开启了文字方向分类 use_angle_cls=True,可自动调整旋转角度。
ocr.ocr() 方法返回识别结果,包含文字框坐标和识别文本。
程序遍历验证码图片文件夹,逐张识别并打印结果。
-
识别效果分析
PaddleOCR 基于深度学习,能较好适应验证码中的字体变化和一定程度的噪声干扰。经过测试,对清晰的 4 位英数字验证码,准确率可达 95%以上。但对于高度扭曲或复杂背景验证码,效果有所下降,可考虑结合图像预处理提升效果。 -
后续优化建议
图像预处理:灰度化、二值化、去噪声、形态学处理等。
训练自定义模型:针对特定验证码样式,微调 PaddleOCR 模型。
引入验证码生成器:结合生成的验证码数据,实现端到端训练。
集成API服务:封装成Web服务,实现批量验证码自动识别。
浙公网安备 33010602011771号