使用Tensorflow构建和训练自己的CNN来做简单的验证码识别

本文介绍了如何利用Tensorflow构建卷积神经网络(CNN)并训练一个用于简单验证码识别的分类器。首先通过Python库captcha生成训练样本,然后详细阐述了构建CNN的步骤、训练过程,最后展示了模型测试部分。
摘要由CSDN通过智能技术生成

 Tensorflow是目前最流行的深度学习框架,我们可以用它来搭建自己的卷积神经网络并训练自己的分类器,本文介绍怎样使用Tensorflow构建自己的CNN,怎样训练用于简单的验证码识别的分类器。本文假设你已经安装好了Tensorflow,了解过CNN的一些知识。

下面将分步介绍怎样获得训练数据,怎样使用tensorflow构建卷积神经网络,怎样训练,以及怎样测试训练出来的分类器

1. 准备训练样本

        使用Python的库captcha来生成我们需要的训练样本,代码如下:

[python]  view plain  copy
  1. import sys  
[python]  view plain  copy
  1. import os  
  2. import shutil  
  3. import random  
  4. import time  
  5. #captcha是用于生成验证码图片的库,可以 pip install captcha 来安装它  
  6. from captcha.image import ImageCaptcha  
  7.   
  8. #用于生成验证码的字符集  
  9. CHAR_SET = ['0','1','2','3','4','5','6','7','8','9']  
  10. #字符集的长度  
  11. CHAR_SET_LEN = 10  
  12. #验证码的长度,每个验证码由4个数字组成  
  13. CAPTCHA_LEN = 4  
  14.   
  15. #验证码图片的存放路径  
  16. CAPTCHA_IMAGE_PATH = 'E:/Tensorflow/captcha/images/'  
  17. #用于模型测试的验证码图片的存放路径,它里面的验证码图片作为测试集  
  18. TEST_IMAGE_PATH = 'E:/Tensorflow/captcha/test/'  
  19. #用于模型测试的验证码图片的个数,从生成的验证码图片中取出来放入测试集中  
  20. TEST_IMAGE_NUMBER = 50  
  21.   
  22. #生成验证码图片,4位的十进制数字可以有10000种验证码  
  23. def generate_captcha_image(charSet = CHAR_SET, charSetLen=CHAR_SET_LEN, captchaImgPath=CAPTCHA_IMAGE_PATH):     
  24.     k  = 0  
  25.     total = 1  
  26.     for i in range(CAPTCHA_LEN):  
  27.         total *= charSetLen  
  28.           
  29.     for i in range(charSetLen):  
  30.         for j in range(charSetLen):  
  31.             for m in range(charSetLen):  
  32.                 for n in range(charSetLen):  
  33.                     captcha_text = charSet[i] + charSet[j] + charSet[m] + charSet[n]  
  34.                     image = ImageCaptcha()  
  35.                     image.write(captcha_text, captchaImgPath + captcha_text + '.jpg')  
  36.                     k += 1  
  37.                     sys.stdout.write("\rCreating %d/%d" % (k, total))  
  38.                     sys.stdout.flush()  
  39.                       
  40. #从验证码的图片集中取出一部分作为测试集,这些图片不参加训练,只用于模型的测试                      
  41. def prepare_test_set():  
  42.     fileNameList = []      
  43.     for filePath in os.listdir(CAPTCHA_IMAGE_PATH):  
  44.         captcha_name = filePath.split('/')[-1]  
  45.         fileNameList.append(captcha_name)  
  46.     random.seed(time.time())  
  47.     random.shuffle(fileNameList)   
  48.     for i in range(TEST_IMAGE_NUMBER):  
  49.         name = fileNameList[i]  
  50.         shutil.move(CAPTCHA_IMAGE_PATH + name, TEST_IMAGE_PATH + name)  
  51.                           
  52. if __name__ == '__main__':  
  53.     generate_captcha_image(CHAR_SET, CHAR_SET_LEN, CAPTCHA_IMAGE_PATH)  
  54.     prepare_test_set()  
  55.     sys.stdout.write("\nFinished")  
  56.     sys.stdout.flush()    

运行上面的代码,可以生成验证码图片,

生成的验证码图片如下图所示:


2. 构建CNN,训练分类器

     代码如下:

[html]  view plain  
  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值