generate any type of captcha with one config.
通过简单的配置,可以生成大部分类型的验证码,旨在解决机器学习训练样本难以获取的问题,降低训练样本的获取成本。
温馨提示,搭配以下在线工具使用效率更佳:
字体查找:http://www.qiuziti.com/
颜色查找:http://tools.jb51.net/color/colorpicker
any-captcha
configs: 存放配置文件
model: 项目源码
output: 默认验证码保存目录
resourcesbackground: 默认背景图片目录
corpus: 默认字符文本目录
font: 默认字体目录
markdown: md需要的资源
-
texts
:
类型:字符串数组
说明:验证码上可显示的所有字符的集合,如果:- 数组长度大于1,每个元素能且只能是普通字符串(非文件或文件夹路径),且每个元素作为整体随机的显示在验证码中,此时
num
参数失效,每张验证码的字符个数由当前元素长度决定; - 数组长度等于1,每个元素可以是:
文件路径:将文件中的每一行作为一个元素存储到数组中,然后按照1.处理;
普通字符串:则随机选取num
个字符显示在每个验证码中。
注:暂不支持文件夹路径。
- 数组长度大于1,每个元素能且只能是普通字符串(非文件或文件夹路径),且每个元素作为整体随机的显示在验证码中,此时
-
fonts
:
类型:字符串数组 说明:验证码字体文件(.ttf或.ttc,不区分大小写)路径的集合,如果:- 数组长度大于1,每个元素能且只能是字体文件的路径;
- 数组长度等于1,可以是单个字体文件的路径,或者存放字体的文件夹路径
-
sizes
:
类型:整型数组
说明:验证码中字号大小的集合 -
colors
:
类型:整型数组
说明:验证码中字体颜色的集合,单个元素的值为颜色的6位16进制,以"0x"开头 -
bgs
:
类型:字符串数组 说明:验证码的背景图片或者颜色的集合,如果:- 数组长度大于1,每个元素可以是
【单张背景图片路径,单个背景颜色(格式同
中的一个;colors
参数)】 - 数组长度等于1,此元素可以是
【单张背景图片路径,单个背景颜色,存放多张背景图片的文件夹路径,存放多个背景颜色值的txt文件路径(每行一个颜色值)】
中的一个;
- 数组长度大于1,每个元素可以是
-
rotate
:
类型:整型
说明:验证码中单个字符可旋转角度的值,旋转角度的范围[-rotate
,rotate
],每次随机取值 -
num
:
类型:整型
说明:验证码显示的字符个数,具体参见texts
参数 -
dot
:
类型:整型
说明:验证码中随机噪点的个数,0不显示噪点,如果有特定噪点需求,推荐使用CaptchaFactory.generate_captcha()
中的bg_custom_fns
参数自定义 -
curve
:
类型:整型
说明:验证码中随机干扰线的个数,0不显示干扰线,如有特殊需求同上。 -
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,10.0]
注:以上参数都可以被CaptchaFactory.generate_captcha()
方法中的相关参数覆盖,即可以动态指定每一个参数,适用于需要遍历所有字符的情况。
- 目标验证码:http://www.58guakao.com/user/487549.html
- config:
{
"texts": [
"0123456789"
],
"fonts": [
"resources/font/CalibriL.ttf"
],
"sizes": [
28
],
"colors": [
"0xff0000"
],
"bgs": [
"0xfef6f6",
"0xfefdf9"
],
"rotate": 0,
"num": 11,
"dot": 0,
"curve": 0,
"width": 167,
"height": 35,
"align": 1,
"offset_ver": 0,
"offset_hor": 0,
"char_tran": [
5.97
]
}
- main code:
def main():
project_name = "58gua_kao"
with open("configs/%s.json" % project_name, encoding="utf-8") as fp:
demo_config = json.load(fp)
demo_factory = CaptchaFactory(char_custom_fns=[char_custom_fn], bg_custom_fns=[bg_custom_fn], **demo_config)
index = 10
while index:
# text = generate_phone_number(index)
text = generate_mobile_number(index)
captcha = demo_factory.generate_captcha(text=text)
captcha.save("output/%s/%s.jpg" % (project_name, captcha.text))
print(captcha.text, captcha.num)
index -= 1
char_custom_fns:如果对于单个字符有其他自定义操作,比如形变,膨胀腐蚀等,可以通过此参数传入回调函数,支持多个回调函数随机调用。
bg_custom_fns:如果对于验证码背景有其他自定义操作,比如高斯模糊、指定样式的噪点或干扰线,可以通过此参数传入回调函数,支持多个回调函数随机调用。
原始验证码 | 生成验证码 |
---|---|
- 字符位置:
可以通过Captcha.char_pos()
方法获取单个字符在验证码中的位置信息,返回一个四元组(x,y,w,h),分别表示左上角x坐标,y坐标,宽,高,适用于物体检测,文字定位等问题。
样例:
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