100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > captcha 生成验证码

captcha 生成验证码

时间:2020-05-23 06:11:57

相关推荐

captcha 生成验证码

你好,我是悦创。

公众号:AI悦创

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

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

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

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

1. captcha 的安装

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

pip install captcha

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

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

第一种:

"""project = 'Code', file_name = 'Demo_1.py', author = 'AI悦创'time = '/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 ImageCaptchaimport 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 = '/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 sysimport osimport shutilimport randomimport timefrom 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/10000Finished

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

数字生成的结果如下图:

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

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

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

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

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

总结

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。