IMYR666 / any-captcha

generate any type of captcha with one config. 一套配置,一行代码,快速生成任意风格验证码。
GNU General Public License v2.0
120 stars 46 forks source link

any-captcha

generate any type of captcha with one config. 一套配置,一行代码,快速生成任意风格验证码。

功能简述

通过简单的配置,可以快速生成大部分类型的验证码,旨在解决机器学习训练样本难以获取的问题,几乎可以0成本获取样本。 同时易于保存和修改,便于多次测试寻求最佳训练样本参数。更可以获取字符在验证码中的位置信息,适用于定位方面的项目。 温馨提示:搭配以下在线工具使用效率更佳:

目录结构

any-captcha

configs: 存放配置文件
model: 项目源码
output: 默认验证码保存目录
resources

background: 默认背景图片目录
corpus: 默认字符文本目录
font: 默认字体目录
markdown: md需要的资源

CONFIG参数说明

*注:以上参数都可以被CaptchaFactory.generate_captcha()方法中的相关参数覆盖,即可以动态指 定每一个参数。

样例代码

config:

{
  "texts": [
    "resources/corpus/common_chinese.txt"
  ],
  "fonts": [
    "resources/font/PingFang_A.ttf",
    "resources/font/STXINWEI.TTF"
  ],
  "sizes": [
    38,40,42
  ],
  "colors": [
    "0x32678b",
    "0xe61514",
    "0x3e0ac3"
  ],
  "bgs": [
    "0xfef6f6",
    "resources/background/color.jpg"
  ],
  "rotate": 30,
  "num": 4,
  "dot": 0,
  "curve": 0,
  "width": 200,
  "height": 60,
  "align": 2,
  "offset_ver": 5,
  "offset_hor": 6,
  "char_tran": [
    5.97
  ]
}

main code:

def main():
    project_name = "demo"
    with open("configs/%s.json" % project_name, encoding="utf-8") as fp:
        demo_config = json.load(fp)

    demo_factory = CaptchaFactory(**demo_config)
    index = 3
    while index:
        captcha = demo_factory.generate_captcha()
        captcha.save("output/%s/%s.jpg" % (project_name, captcha.text))
        print(captcha.text, captcha.num)

        index -= 1

输出:

其他完整样例见58gua_kao_factory.pyicp_factory.pyjingdong_factory.py.

效果比对

原始验证码 生成验证码
jd_o jd_g
58_o 58_g
icp_o icp_g
jd_o jd_g

高级功能

自定义噪点/干扰线

此项目只提供了简单生成随机噪点或干扰先的方法,如有需要,可以通过简单配置config中dotcurve生成。但更多时候,验证码中的干扰线和噪点都是需要自定义的,所以在 CaptchaFactory的构造方法中提供了以下两个参数,用于接收相关的回调函数: