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

  • 时间:
  • 浏览:1
  • 来源:大发彩神下载—大发彩神APP

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

接下来亲们就都还要构造一批数据了,x 数据就是验证码的 Numpy 数组,y 数据就是验证码的文本的 One-Hot 编码,生成内容如下:

安装好之前 ,亲们就都还要用如下代码来生成一个多多简单的图形验证码



否则 Loss 和 Accuracy 就好计算了:

本文作者:MobSDK

验证时亲们都还要重新 Reload 一下模型,否则 进行验证:



类式这里调用一下这人个多多多最好的法律法律依据,亲们将 1234 文本转换为 One-Hot 编码,否则 在将其转回来:





否则 初始化一个多多迭代器,并绑定到这人 数据集上:

运行训练过程,结果类式如下:





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



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

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

3.构建模型

接下来亲们定义一个多多生成验证码数据的最好的法律法律依据,流程类式上文,只不过这里亲们将返回的数据转为了 Numpy 形式的数组:

内容如下:

那我调用此最好的法律法律依据,亲们就都还要得到一个多多 Numpy 数组了,这人 嘴笨 是把验证码转化成了每个像素的 RGB,亲们调用一下这人 最好的法律法律依据试试:



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

经过全连接网络变换之前 ,y 的 shape 就变成了 [batchsize, nclasses],亲们的 label 是 CAPTCHALENGTH 个 One-Hot 向量拼合而成的,在这里亲们想使用交叉熵来计算,否则 交叉熵计算的之前 ,label 参数向量最后一维各个元素之和还要为 1,不然计算梯度的之前 该出现什么的间题。详情参见 TensorFlow 的官方文档:

1.验证码准备

这里亲们定义了一个多多 getrandomtext() 最好的法律法律依据,都还要随机生成验证码文本,否则 接下来再利用这人 随机生成的文那我产生对应的 x、y 数据,否则 亲们再将数据写入到 pickle 文件里,那我就完成了预处里的操作。



这里 text2vec() 最好的法律法律依据就是将真实文本转化为 One-Hot 编码,vec2text() 最好的法律法律依据就是将 One-Hot 编码转回真实文本。



2.预处里

什么都在这里亲们先定义一个多多词表和其长度变量:



再接下来执行训练即可:

那我亲们就都还要实现文本到 One-Hot 编码的互转了。

有了数据之前 ,亲们就开使构建模型吧,这里亲们还是利用 traintestsplit() 最好的法律法律依据将数据分为三累积,训练集、开发集、验证集:





接下来亲们使用者一个多多数据集构建一个多多 Dataset 对象:

在训练之前 肯定是要进行数据预处里了,现在亲们首先定义好了要生成的验证码文本内容,这就大约愿因有了 label 了,否则 亲们再用它来生成验证码,就都还要得到输入数据 x 了,在这里亲们首先定义好亲们的输入词表,愿因大小写字母加数字的词表比较庞大,设想亲们用中含大小写字母和数字的验证码,一个多多验证码六个字符,这麼 一共愿因的组合是 (26 + 26 + 10) ^ 4 = 14776336 种组合,这人 数量训练起来不得劲大,什么都这里亲们精简一下,只使用纯数字的验证码来训练,那我其组合个数就变为 10 ^ 4 = 300000 种,显然少了什么都。

训练



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

都还要看到它的 shape 是 (300, 1300, 3),这嘴笨 代表验证码图片的高度是 300,高度是 1300,是 300 x 1300 像素的验证码,每个像素有的是 RGB 值,什么都最后一维即为像素的 RGB 值。

测试

训练过程亲们还都还要每隔几只 Epoch 保存一下模型:

接下来亲们还要定义 label,愿因亲们还要使用高度学习模型进行训练,什么都这里亲们的 label 数据最好使用 One-Hot 编码,即愿因验证码文本是 1234,这麼 应该词表索引位置置 1,总共的长度是 40,亲们用守护守护进程实现一下 One-Hot 编码和文本的互相转换:

都还要看到图中的文字正是亲们所定义的内容,那我亲们就都还要得到一张图片和其对应的真实文本,接下来亲们就都还要用它来生成一批训练数据和测试数据了。

那我亲们就都还要确保最后一维是 VOCAB_LENGTH 长度,而它就是一个多多 One-Hot 向量,什么都各元素之和必定为 1。

接下来就是关键的累积了,在这里亲们使用三层卷积和两层全连接网络进行构造,在这里为了冗杂写法,直接使用 TensorFlow 的 layers 模块:



否则 现在的 label 参数是 CAPTCHALENGTH 个 One-Hot 向量拼合而成,什么都这里各个元素之和为 CAPTCHALENGTH,什么都亲们还要重新 reshape 一下,确保最后一维各个元素之和为 1:





本文亲们来用 TensorFlow 来实现一个多多高度学习模型,用来实现验证码识别的过程,这里识别的验证码是图形验证码,首先亲们会用标注好的数据来训练一个多多模型,否则 再用模型来实现这人 验证码的识别。





这里亲们使用 python 的 captcha 库来生成即可,这人 库默认是这麼 安装的,什么都这里亲们还要先安装这人 库,另外亲们还还要安装 pillow 库