gen ruler
验证码的特征与需求
字符组合:数字(0-9)+ 大写字母(A-Z,可排除易混淆字符如 O、I)
干扰元素:随机干扰线、噪点、字符黏连
变换效果:字符旋转、缩放、扭曲、颜色渐变
背景风格:随机背景色、纹理
多样性:字符数量、间距、布局随机化
验证码加入了数字+大写字母、字符旋转、字符大小变换、字符黏连、大量的干扰线、随机背景颜色、字符颜色变换、字体扭曲等
技术栈
Python 生态(最常用):
PIL/Pillow 或 OpenCV:用于图像绘制、变换
numpy:处理图像矩阵
random:控制随机参数
captcha 库(基础版):快速生成简单验证码,再二次加工增强复杂度
过程示例
基础字符生成
从字符集中随机选取 N 个字符(如常见的 4-6 位)
为每个字符随机分配字体(可收集一批无衬线 / 衬线字体增加多样性)
字符变换处理
旋转:每个字符随机旋转 ±30° 范围
缩放与扭曲:用 Pillow 的 transform 或 OpenCV 的 warpAffine 实现字符的拉伸、扭曲
颜色变化:字符颜色随机从高对比度色系中选取,避免与背景色冲突
干扰元素叠加
干扰线:绘制多条随机角度、颜色、粗细的曲线或折线
噪点:添加椒盐噪点或高斯模糊,增强干扰
字符黏连:调整字符间距,让部分字符边缘重叠,模拟黏连效果
背景生成
生成随机纯色背景,或添加渐变、纹理背景
背景色与字符色保持高对比度,确保字符可识别(但仍有干扰性)
图像合成与保存
将变换后的字符按随机间距、布局合成到背景上
统一图像尺寸(如 120×40 像素),保存为 PNG/JPG 格式
同时生成标签文件(如文件名对应验证码内容,或单独的 CSV/JSON 映射表)
增强数据集多样性的技巧
参数随机化:字符数量、旋转角度、干扰线数量、颜色等参数都设置随机范围
字体多样性:收集 20 + 种不同风格的字体,避免模型过拟合单一字体
场景模拟:加入模糊、对比度变化等模拟真实拍摄 / 压缩的效果
数据增强:对生成的验证码再做翻转、裁剪、亮度调整,进一步扩充数据集