使用TensorFlow 来实现一个简单的验证码识别过程

  • 时间:
  • 浏览:4
  • 来源:5分排列5_5分排列3





接下来大家时需定义 label,将会大家时需使用角度学习模型进行训练,好多好多 这里大家的 label 数据最好使用 One-Hot 编码,即将会验证码文本是 1234,没办法 应该词表索引位置置 1,总共的长度是 40,大家用守护tcp连接实现一下 One-Hot 编码和文本的互相转换:

训练过程大家还还时需每隔十几个 Epoch 保存一下模型:

累似 这里调用一下累似 个多多多 办法,大家将 1234 文本转换为 One-Hot 编码,好多好多 在将其转回来:

好多好多 Loss 和 Accuracy 就好计算了:

接下来大家就还时需构造一批数据了,x 数据好多好多 验证码的 Numpy 数组,y 数据好多好多 验证码的文本的 One-Hot 编码,生成内容如下:



好多好多 初始化另另一一两个多多 迭代器,并绑定到累似 数据集上:

经过全连接网络变换时候,y 的 shape 就变成了 [batchsize, nclasses],大家的 label 是 CAPTCHALENGTH 个 One-Hot 向量拼合而成的,在这里大家想使用交叉熵来计算,好多好多 交叉熵计算的时候,label 参数向量最后一维各个元素之和时需为 1,不然计算梯度的过时会突然再次出现问题。详情参见 TensorFlow 的官方文档:

在训练时候肯定是要进行数据预补救了,现在大家首先定义好了要生成的验证码文本内容,这就大慨 将会有了 label 了,好多好多 大家再用它来生成验证码,就还时需得到输入数据 x 了,在这里大家首先定义好大家的输入词表,将会大小写字母加数字的词表比较庞大,设想大家用涵盖大小写字母和数字的验证码,另另一一两个多多 验证码一两个字符,没办法 一共将会的组合是 (26 + 26 + 10) ^ 4 = 14776336 种组合,累似 数量训练起来有点儿大,好多好多 这里大家精简一下,只使用纯数字的验证码来训练,好多好多 其组合个数就变为 10 ^ 4 = 8000 种,显然少了好多好多 。



好多好多 大家就还时需实现文本到 One-Hot 编码的互转了。

1.验证码准备





接下来好多好多 关键的次责了,在这里大家使用三层卷积和两层全连接网络进行构造,在这里为了冗杂写法,直接使用 TensorFlow 的 layers 模块:

内容如下:

运行训练过程,结果累似 如下:

还时需看了图中的文字正是大家所定义的内容,好多好多 大家就还时需得到一张图片和其对应的真实文本,接下来大家就还时需用它来生成一批训练数据和测试数据了。

接下来大家定义另另一一两个多多 生成验证码数据的办法,流程累似 上文,只不过这里大家将返回的数据转为了 Numpy 形式的数组:

验证时大家还时需重新 Reload 一下模型,好多好多 进行验证:

这里卷积核大小为 3,padding 使用 SAME 模式,激活函数使用 relu。

本文大家来用 TensorFlow 来实现另另一一两个多多 角度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先大家会用标注好的数据来训练另另一一两个多多 模型,好多好多 再用模型来实现累似 验证码的识别。

https://www.tensorflow.org/apidocs/python/tf/nn/softmaxcrossentropywithlogits

再接下来执行训练即可:

这里大家使用 python 的 captcha 库来生成即可,累似 库默认是没办法 安装的,好多好多 这里大家时需先安装累似 库,另外大家还时需安装 pillow 库



在这里大家首先初始化 traininitializer,将 iterator 绑定到 Train Dataset 上,好多好多 执行 trainop,获得 loss、acc、gstep 等结果并输出。

原文发布时间为:2018-11-20





有了数据时候,大家就时候刚结束了了构建模型吧,这里大家还是利用 traintestsplit() 办法将数据分为三次责,训练集、开发集、验证集:

安装好时候,大家就还时需用如下代码来生成另另一一两个多多 简单的图形验证码





3.构建模型



这里 text2vec() 办法好多好多 将真实文本转化为 One-Hot 编码,vec2text() 办法好多好多 将 One-Hot 编码转回真实文本。

还时需看了它的 shape 是 (80, 180, 3),这我我嘴笨 代表验证码图片的角度是 80,角度是 180,是 80 x 180 像素的验证码,每个像素也有 RGB 值,好多好多 最后一维即为像素的 RGB 值。

这里 VOCAB 好多好多 词表的内容,即 0 到 9 这 10 个数字,验证码的字符个数即 CAPTCHA_LENGTH 是 4,词表长度是 VOCAB 的长度,即 10。



好多好多 在这里大家先定义另另一一两个多多 词表和其长度变量:

训练

2.预补救

当然也还时需取验证集上准确率最高的模型进行保存。



测试





好多好多 大家就还时需确保最后一维是 VOCAB_LENGTH 长度,而它好多好多 另另一一两个多多 One-Hot 向量,好多好多 各元素之和必定为 1。

接下来大家使用者另另一一两个多多 数据集构建另另一一两个多多 Dataset 对象:

本文作者:MobSDK







好多好多 调用此办法,大家就还时需得到另另一一两个多多 Numpy 数组了,累似 我我嘴笨 是把验证码转化成了每个像素的 RGB,大家调用一下累似 办法试试:

好多好多 现在的 label 参数是 CAPTCHALENGTH 个 One-Hot 向量拼合而成,好多好多 这里各个元素之和为 CAPTCHALENGTH,好多好多 大家时需重新 reshape 一下,确保最后一维各个元素之和为 1:

这里大家定义了另另一一两个多多 getrandomtext() 办法,还时需随机生成验证码文本,好多好多 接下来再利用累似 随机生成的文好多好多 产生对应的 x、y 数据,好多好多 大家再将数据写入到 pickle 文件里,好多好多 就完成了预补救的操作。