# any-captcha
**Repository Path**: fistup/any-captcha
## Basic Information
- **Project Name**: any-captcha
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-02-23
- **Last Updated**: 2021-02-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# any-captcha
generate any type of captcha with one config.
一套配置,一行代码,快速生成任意风格验证码。
## 功能简述
通过简单的配置,可以快速生成大部分类型的验证码,旨在解决机器学习训练样本难以获取的问题,几乎可以0成本获取样本。
同时易于保存和修改,便于多次测试寻求最佳训练样本参数。更可以获取字符在验证码中的位置信息,适用于定位方面的项目。
温馨提示:搭配以下在线工具使用效率更佳:
* 字体查找:http://www.qiuziti.com/
* 颜色查找:http://tools.jb51.net/color/colorpicker
## 目录结构
any-captcha
> configs: 存放配置文件
> model: 项目源码
> output: 默认验证码保存目录
> resources
>> background: 默认背景图片目录
>> corpus: 默认字符文本目录
>> font: 默认字体目录
>> markdown: md需要的资源
## CONFIG参数说明
* texts: 字符串数组,验证码上可显示的所有字符的集合,如果:
1. 数组长度大于1,每个元素能且只能是普通字符串(非文件和文件夹路径),且每个元素作为整体随机的显示在验证码中,
此时num参数失效,每张验证码的字符个数由当前元素长度决定;
2. 数组长度等于1,此元素可以是:
* 文件路径:将文件中的每一行作为一个元素存储到数组中,然后按照1.处理;
* 普通字符串:则随机选取num个字符显示在每个验证码中。
*注:暂不支持文件夹路径。
* fonts: 字符串数组,验证码字体文件(.ttf或.ttc,不区分大小写)路径的集合,如果:
1. 数组长度大于1,每个元素能且只能是字体文件的路径;
2. 数组长度等于1,此元素可以是单个字体文件的路径,或者存放字体的文件夹路径。
* sizes: 整型数组,验证码中字号大小的集合。
* bgs: 字符串数组,验证码的背景图片或者颜色的集合,如果:
1. 数组长度大于1,每个元素可以是【单张背景图片路径,单个背景颜色(格式同中的一个;
2. 数组长度等于1,此元素可以是colors参数)】
【单张背景图片路径,单个背景颜色,存放多张背景图片的文件夹路径,
存放多个背景颜色值的txt文件路径(每行一个颜色值)】中的一个;
* rotate: 整型,验证码中单个字符可旋转角度的值,旋转角度的范围[-rotate,
rotate],每次随机取值。
* num: 整型, 验证码显示的字符个数,具体参见texts参数。
* dot: 整型,验证码中随机噪点的个数,默认(0)不显示噪点,如果有特定噪点需求,
推荐使用CaptchaFactory中的bg_custom_fns参数自定义。
* curve: 整型,验证码中随机干扰线的个数,默认(0)不显示干扰线,如有特殊需求同dot。
* width: 整型,验证码的宽度。
* height: 整型,验证码的高度。
* align: 整型,验证码的对齐方式,取值1或2, 其中1为左对齐,2为两端对齐。
* offset_ver: 整型,验证码中单个字符的垂直偏移量,默认(0)垂直居中,如果
offset_ver > 0, 随机从[-offset_ver, offset_ver]中选取一个偏移量。
* offset_hor: 整型,验证码中单个字符的水平偏移量,默认(0)与前一个相接,如果
offset_hor > 0, 随机从[-offset_hor, offset_hor]中选取一个偏移量。
* char_tran: 浮点型数组,验证码中字符可选的透明度集合,单个元素取值范围[0.0,100.0]。
*注:以上参数都可以被CaptchaFactory.generate_captcha()方法中的相关参数覆盖,即可以动态指
定每一个参数。
58gua_kao_factory.py、icp_factory.py、jingdong_factory.py.
## 效果比对
原始验证码 | 生成验证码
| :-----: | :-----: |
|  |  |
|  |  |
|  |  |
|  |  |
## 高级功能
### 自定义噪点/干扰线
此项目只提供了简单生成随机噪点或干扰先的方法,如有需要,可以通过简单配置config中dot或
curve生成。但更多时候,验证码中的干扰线和噪点都是需要自定义的,所以在
CaptchaFactory的构造方法中提供了以下两个参数,用于接收相关的回调函数:
* char_custom_fns:如果对于单个字符有其他自定义操作,比如拉伸形变、膨胀腐蚀等,
可以通过此参数传入回调函数,支持多个回调函数随机调用。
```python
def char_custom_fn(single_char):
# do something you wanted
# return single_char.filter(ImageFilter.GaussianBlur)
return single_char
```
* bg_custom_fns:如果对于验证码背景有其他自定义操作,比如高斯模糊、指定样式的噪点或干扰线等,
可以通过此参数传入回调函数,支持多个回调函数随机调用。
```python
def bg_custom_fn(bg):
# do something you wanted
# return bg.filter(ImageFilter.GaussianBlur)
return bg
```
详细代码见jingdong_factory.py.
### 字符位置:
可以通过Captcha.char_pos()方法获取单个字符在验证码中的位置信息,返回一个四元组(x,y,w,h),
分别表示左上角x坐标,y坐标,宽,高,适用于物体检测,文字定位等问题,配合YOLO使用。
样例:
```python
captcha = demo_factory.generate_captcha()
char_pos = captcha.char_pos
width = captcha.width
height = captcha.height
with open(os.path.join(output_path, txt_out), "w", encoding="utf-8") as fp:
for pos in char_pos:
x, y, w, h = pos
# 转化为中心点的坐标
# x = (x + w / 2) * 1.0 / width
# y = (y + h / 2) * 1.0 / height
```
## TODO
* 新增配置项char_times:保证语料库中每个字符至少出现char_times次
* 配置项的颜色格式改为:#ffffff
* 新增分析原始验证码中前景背景色分布的功能
* 支持多线程生成验证码
* 新增常用图像处理方法(增强,扭曲等)
* 判断自生成验证码和原始验证码的相似度