你好,我是悦创。

公众号:AI悦创

博客原文:https://www.aiyc.top/archives/476.html

对于验证码破解,很多机构都停留于云打码、OCR 等基础破解方法,当然不能否认这些方法的便捷性,但机构不讲的原因,你得品,你细细品。

不过我想给你分享的则是深度学习识别验证码,别慌!其实并不难。这次我将分多篇给你分享验证码数据集生成、验证码生成库、深度学习识别验证码、滑动验证码。希望对你有所帮助,也希望你关注加星号,我的公众号:AI悦创,你的支持是我创作的动力!

对于验证码数据集生成,我第一想到的就是通过一些类库生成与需要破解的验证码类似的数量级,当然这会花费你一定的时间。今天我给大家推荐一个 Python 生成验证码的第三方库,并且我们来生成自己的数据集。

1. captcha 的安装

对于 captcha 的安装其实非常简单,使用如下命令:

pip install captcha

如果安装失败,可以去该链接:https://pypi.org/project/captcha/#files 下载 whl 文件,直接离线安装。

**如何生成验证码呢?**我直接给大家上两个生成验证码的代码。

第一种:

"""
project = 'Code', file_name = 'Demo_1.py', author = 'AI悦创'
time = '2020/5/11 22:55', product_name = PyCharm, 公众号:AI悦创
code is far away from bugs with the god animal protectingI love animals. They taste delicious.
"""
from captcha.image import ImageCaptcha
import randomlist = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']# 定义验证码尺寸
width, height = 170, 80#生成一万张验证码
for i in range(10000):generator = ImageCaptcha(width=width, height=height)# 从list中取出4个字符random_str = ''.join([random.choice(list) for j in range(4)])# 生成验证码img = generator.generate_image(random_str)# 在验证码上加干扰点generator.create_noise_dots(img, '#000000', 4, 40)# 在验证码上加干扰线generator.create_noise_curve(img, '#000000')# 将图片保存在目录yzm文件夹下file_name = './yanzhengma/'+random_str+'_'+str(i)+'.jpg'img.save(file_name)

关于每一句代码的意思,我都写在注释里了,所以这里不会过多的阐述。

第二种:

"""
project = 'Code', file_name = 'Demo_2.py', author = 'AI悦创'
time = '2020/5/11 23:13', product_name = PyCharm, 公众号:AI悦创
code is far away from bugs with the god animal protectingI love animals. They taste delicious.
"""
import sys
import os
import shutil
import random
import time
from captcha.image import ImageCaptcha# 用于生成验证码的字符集
CHAR_SET = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# 字符集的长度
CHAR_SET_LEN = 10
# 验证码的长度,每个验证码由4个数字组成
CAPTCHA_LEN = 4# 验证码图片的存放路径
CAPTCHA_IMAGE_PATH = 'images/'
# 用于模型测试的验证码图片的存放路径,它里面的验证码图片作为测试集
TEST_IMAGE_PATH = 'test/'
# 用于模型测试的验证码图片的个数,从生成的验证码图片中取出来放入测试集中
TEST_IMAGE_NUMBER = 100# 生成验证码图片,4位的十进制数字可以有10000种验证码
def generate_captcha_image(charSet=CHAR_SET, charSetLen=CHAR_SET_LEN, captchaImgPath=CAPTCHA_IMAGE_PATH):k = 0total = 1for i in range(CAPTCHA_LEN):total *= charSetLenfor i in range(charSetLen):for j in range(charSetLen):for m in range(charSetLen):for n in range(charSetLen):captcha_text = charSet[i] + charSet[j] + charSet[m] + charSet[n]image = ImageCaptcha()image.write(captcha_text, captchaImgPath + captcha_text + '.png') # 图片格式改成其他可能会有问题k += 1sys.stdout.write("\rCreating %d/%d" % (k, total))sys.stdout.flush()# 从验证码的图片集中取出一部分作为测试集,这些图片不参加训练,只用于模型的测试
def prepare_test_set():fileNameList = []for filePath in os.listdir(CAPTCHA_IMAGE_PATH):captcha_name = filePath.split('/')[-1]fileNameList.append(captcha_name)random.seed(time.time())random.shuffle(fileNameList)for i in range(TEST_IMAGE_NUMBER):name = fileNameList[i]shutil.move(CAPTCHA_IMAGE_PATH + name, TEST_IMAGE_PATH + name)if __name__ == '__main__':generate_captcha_image(CHAR_SET, CHAR_SET_LEN, CAPTCHA_IMAGE_PATH)prepare_test_set()sys.stdout.write("\nFinished")sys.stdout.flush()# 运行结果
Creating 10000/10000
Finished

这是为下一步通过CNN对验证码进行识别做准备,当然captcha也可以生成字母数字同时存在的以及设置字体什么的,功能还是很全的。

数字生成的结果如下图:

该函数库可以生成任意形式的数字字符类验证码,只要在创建对象时:

captcha = ImageCaptcha(fonts=['/path/to/A.ttf', '/path/to/B.ttf']) 即可修改字体,利用该类中write函数,可以将任意长度数量的字符改为验证码。

不过上面的 ImageCaptcha 还可以定义一些参数:

从源码中我们可以看到还可以定义字体、字体大小,当然这个根据你所要破解的验证码来决定。

最后大家看下我生成的验证码照片:

总结

其实大家可以发现 Python 的这个库并没有想象的那么强大,这里我要给大家推荐另一个库,只不过它不是 Python 的,而是 Java 的,它所能设置的参数更加的详细。如果本文超过20在看,下篇文章我将详细的给大家介绍。

有关于验证码训练的教程,欢迎关注本公众号,之后为你双手奉上!

captcha 生成验证码相关推荐

  1. 使用Happy Capthca生成验证码

    Happy Captcha是一款易于使用的Java验证码软件包,旨在花最短的时间,最少的代码量实现验证码功能 Maven依赖 <dependency><groupId>com. ...

  2. 一文搞懂Go整合captcha实现验证码功能

    最近在使用Go语言搞一个用户登录&注册的功能,说到登录&注册相关,我们油然会产生一种增加验证码的想法,因此着手实现,后来在GitHub上找到了这个名叫captcha的插件,于是就利用文 ...

  3. captcha.js一个生成验证码的插件,使用js和canvas生成

    一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...

  4. python验证码生成器_Python captcha模块生成验证码

    需要的方法 img=ImageCaptcha(width=160, height=60, fonts=None, font_sizes=None) #实例化ImageCaptcha类 image=im ...

  5. SpringMvc项目中使用GoogleKaptcha 生成验证码

    前言:google captcha 是google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比. 1.jar包准备 ...

  6. .NET Core 中生成验证码

    在开发中,有时候生成验证码的场景目前还是存在的,本篇演示不依赖第三方组件,生成随机验证码图片. 先添加验证码接口 public interface ICaptcha {/// <summary& ...

  7. ASP.NET Core 生成验证码

    点击蓝字 关注我 使用验证码保护网站免受垃圾信息的选择有很多,比如Google ReCaptcha和captcha.com.这两者都可以整合到ASP.NET Core应用中去.然而,如果你出于某些原因 ...

  8. java生成验证码并进行验证

    一实现思路 使用BufferedImage用于在内存中存储生成的验证码图片 使用Graphics来进行验证码图片的绘制,并将绘制在图片上的验证码存放到session中用于后续验证 最后通过ImageI ...

  9. php中如何将验证码放入页面,如何在php中生成验证码图片

    1.获取生成验证码字体: 在php文件路径新建一个fonts文件夹,里面有字体文件. //判定字体资源 if(empty($fonts)) $fonts="arial.ttf"; ...

最新文章

  1. 期末微积分考试试题求解 :利用python求解
  2. 怎样推断一棵树是否是平衡二叉树
  3. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...
  4. jQuery的Callback()方法
  5. html5shiv.js和respond.min.js
  6. B. Box Fitting
  7. php通过使用curl获取http或者https的响应信息的方式
  8. by mango怎么group_java – MongoDB中计算的group-by字段
  9. ES6新特性_ES6中模块暴露数据语法汇总---JavaScript_ECMAScript_ES6-ES11新特性工作笔记043
  10. 导航栏透明度渐变; 下拉头视图拉伸效果;勾号动画; 一段文字中点击部分可响应不同事件...
  11. php如何去除文件扩展名,php怎样去掉文件扩展名_后端开发
  12. 【牛客网刷题】通信-华为公司专项练习
  13. 电商小程序实战教程-需求分析
  14. TensorFlow神经网络学习笔记
  15. ForkJoinPool介绍
  16. 京东月薪45k的AI算法工程师,需要具备怎样的技能?
  17. hdlc协议解码的四种方法
  18. 网站密码明文传输解决方案js+java
  19. Redis集群生产环境搭建,主从搭建,动态增删步骤
  20. adb 强制删除系统应用

热门文章

  1. mysql创建表时报Error : Tablespace for table '`database`.`temp`' exists.
  2. 网易云音乐项目————项目准备
  3. 一些平板以及笔记本电脑推荐
  4. C# VS2013生成的exe文件修改图标
  5. AreEngine IGeometry转WKT,WKB
  6. 空间数据存储格式wkb和wkt(转载)
  7. win7无法关机,无法关闭程序
  8. vscode+anaconda的python环境配置
  9. pycharm中自带python环境_Pycharm中Python环境配置常见问题解析
  10. 完整恢复玩客云官方固件,恢复迅雷下载和备份