Python如何图像识别?

转自 :https://www.wukong.com/answer/6583135560443887876/?iid=39055545733&app=news_article&share_ansid=6583135560443887876&app_id=13&tt_from=mobile_qq&utm_source=mobile_qq&utm_medium=toutiao_ios&utm_campaign=client_sharepython

 

谢邀,我给个简单的例子吧,互联网有不少猫的照片,我也很喜欢猫,许多人能够很容易地识别猫,可是咱们能够训练计算机这样作吗?答案是显而易见的,能够。ios

咱们在Tensorflow框架上使用了高级Keras API。Keras项目是一个高级Python神经网络API。 它设计为用户友好和模块化,支持多个后端。 默认的Keras后端是Tensorflow,一个符号数学库,普遍用于机器学习和神经网络任务。 咱们将训练咱们的Keras / Tensorflow设置来对CIFAR-10图像数据集进行分类,这是10%的猫图片。git

创建Model

要使用Tensorflow运行Keras,咱们将转换一个带有Tensorflow编译安装的环境,并使用conda添加Python HDF5软件包以及Keras可用于可视化模型的几个图形软件包,以及用于保存历史记录的dill。 而后咱们将用pip安装Keras。github

CIFAR-10数据集是10个类中的60,000个彩色32x32像素图像的集合,其中10,000个是测试批次。 Keras能够自动下载数据集,但咱们能够经过将其下载到/ results来节省时间,并在须要时将该文件复制到正确的位置。后端

咱们将运行128个图像批次并设置两个训练批次运行:一个长的500个批次的运行来完成主要工做,以及一个简短的5个批次的运行做为一个例子。网络

加载数据并使其成为合理的shape。 还设置了一个函数来查找文件,另外一个用于查看咱们正在分析的图像,最后设置为进行实时输入数据扩充。app

让咱们随意选择一些训练图像,以下图所示:框架

训练模型

咱们将使用一个简单的卷积网络模型(仍处于开发阶段),增长了上面定义的数据扩充,以及一个检查点编写回调函数,它能够显著提升准确性。机器学习

最后,让咱们看看咱们的模型,包括文本summary和流程图。模块化

训练上述模型,训练过程当中的打印信息及图片识别以下所示:

那么只要保存模型这个图片识别就成功了,但愿对你有帮助~

 

 

 

翻出我曾经写的一篇文章来介绍这个问题。

为你们带来一篇 初步使用Keras深度学习破解验证码 的文章。 固然咱们这里识别的是普通验证码,是Laravel经常使用的验证码库

Captcha for Laravel 5

以下图,又5个数字字母所组成的验证码。我用PHP一共生成了5万个验证码。后面也会提供给你们

导入所需的库

这里咱们仍是使用Keras,底层使用Tensorflow作为底层库。

本次使用的模型是简单的卷积神经网络模型,后面也会使用更加复杂的模型

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元能够响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。它包括卷积层(alternating convolutional layer)和池层(pooling layer)。

通常地,CNN的基本结构包括两层,其一为特征提取层,每一个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之肯定下来;其二是特征映射层,网络的每一个计算层由多个特征映射组成,每一个特征映射是一个平面,平面上全部神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数做为卷积网络的激活函数,使得特征映射具备位移不变性。此外,因为一个映射面上的神经元共享权值,于是减小了网络自由参数的个数。卷积神经网络中的每个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减少了特征分辨率。

配置参数

加载数据

训练模型的时候,咱们能够选择两种方式来生成咱们的训练数据,一种是直接所有载入内存,而后开始训练,一种是定义一个数据生成器,而后利用 fit_generator 分批加载数据来训练。

由于样本是5万张,可是只有200多M,能够一次性载入内存。

最后会生成pickle文件。python的pickle模块实现了基本的数据序列和反序列化。经过pickle模块的序列化操做咱们可以将程序中运行的对象信息保存到文件中去,永久存储;经过pickle模块的反序列化操做,咱们可以从文件中建立上一次程序保存的对象。

若是使用我保存好的pickle文件,能够不用执行下列步骤

加载数据,读取pickle文件

建立模型

开始训练模型

训练完成,进行验证

改进

对于这种按顺序的文字验证码,还有一种更好方法可使用,那就是循环神经网络来识别序列。 我会在后面继续介绍如何用循环神经网络构建模型。

代码地址:https://github.com/szpnygo/keras-cnn-captcha

Pickle地址:https://pan.baidu.com/s/1i4JiZOT