Giter VIP home page Giter VIP logo

any-captcha's Introduction

any-captcha

generate any type of captcha with one config.

功能简述

通过简单的配置,可以生成大部分类型的验证码,旨在解决机器学习训练样本难以获取的问题,降低训练样本的获取成本。
温馨提示,搭配以下在线工具使用效率更佳:
字体查找: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:
    类型:整型数组
    说明:验证码中字号大小的集合

  • colors:
    类型:整型数组
    说明:验证码中字体颜色的集合,单个元素的值为颜色的6位16进制,以"0x"开头

  • bgs:
    类型:字符串数组 说明:验证码的背景图片或者颜色的集合,如果:

    1. 数组长度大于1,每个元素可以是【单张背景图片路径,单个背景颜色(格式同colors参数)】中的一个;
    2. 数组长度等于1,此元素可以是【单张背景图片路径,单个背景颜色,存放多张背景图片的文件夹路径,存放多个背景颜色值的txt文件路径(每行一个颜色值)】中的一个;
  • 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()方法中的相关参数覆盖,即可以动态指定每一个参数,适用于需要遍历所有字符的情况。

样例代码

{
  "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:如果对于验证码背景有其他自定义操作,比如高斯模糊、指定样式的噪点或干扰线,可以通过此参数传入回调函数,支持多个回调函数随机调用。

效果展示

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

高级功能

  • 字符位置:
    可以通过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

TODO

any-captcha's People

Contributors

imyr666 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.