利用opencv实现人脸识别,基于opencv的人脸识别系统

  利用opencv实现人脸识别,基于opencv的人脸识别系统

  如果我们想真正理解某事,我们必须能够创造它。做总比被动听有用。本文介绍了一个基于卷积神经网络的人脸识别系统,是我自己用python做的。

  在语言基础上,综合应用了keras、opencv、numpy、sklearn等技术。代码位置:

  https://github.com/jerry1900/faceRecognition.git

  先看看效果吧(感谢你老婆从国内出来):

  开始准备:

  使用的语言Python是入门级机器学习成本最低,学习速度最快的语言。Python搞网络爬虫也很靠谱。应用的技术有opencv(相机、图像处理)、numpy(图像数字化)、os(文件操作与处理)、keras(构建图像识别的神经网络)。

  硬件条件很简单,一台windows普通笔记本,一个普通摄像头就可以了。

  参考基础:https://github.com/Hironsan/BossSensor,本文中的很多代码都参考了之前这位日本工程师写的demo。主要的应用技术是相似的,但也有一些不同之处:

  1.人脸识别的可扩展性。原来的演示只能识别一个人(他的老板),而新的演示在数据集的扩展性上有一些修改。理论上,它可以识别无数张脸,只要你有足够的数据;

  2.神经网络设计更简单。新的demo在卷积神经网络的设计上比原来更简单易懂,不那么复杂,更适合入门。

  3.代码结构更加清晰。程序设计更加模块化,尽量把能拆分出来的都拆分出来,基本上每个文件都可以单独测试和使用;

  4详细的中文注释。可以看详细的中文笔记,不能看日文和英文笔记。

  Step 1 环境配置环境配置,网上有很多资料。总的来说,我给你的建议是:用Anaconda,一个集成的python环境,里面已经集成了numpy、scipy等很多有用的安装包,这样就省去了自己配置的痛苦;通过Anaconda安装新的计算包也非常方便,就不赘述了。网上可以找到很多教程,百度多,谷歌多。我可以再提醒一下,Anaconda的theano和tensorflow的包好像有点问题,需要删除后再重新下载。网上也有教程。

  简而言之,使用Anaconda并安装必要的科学计算包:numpy、scipy、sklearn、keras、opencv。贴一个别人环境配置的教程,仅供参考:

  http://machinelearningmastery . com/setup-python-environment-machine-learning-deep-learning-anaconda/

  Step 2 获得训练数据集第二步,获取数据训练集。可以从网上找训练集,也可以用自己或朋友的照片做素材(方便练习opencv和os)。具体操作方法是:

  打开程序pick_face.py,里面有一个函数readpicsaveface (sourcePath,objectPath,*后缀)。Sourcepath是存储图像源的文件夹,objectpath是存储已识别人脸的文件夹。参见本功能的备注:

  写清楚了吗?具体用途如下:

  前面是你存放源图像的文件夹地址,后面是你存放切割处理后的人脸图像的地址,最后是源图像的格式(文件后缀)。

  有了这个功能,你就可以很方便的把各种图片中的人脸进行推演和保存。我的脸放在文件夹“D: \我的项目\图片\数据集\杰瑞”里,如下图:

  Step 3 构建模型和进行模型训练天真心锁在你建立了你的数据集之后,应该会有一个数据集的通用文件夹。数据集下会有几个文件夹。如果希望模型识别几个面,可以建立几个子文件夹。每个子文件夹至少要有几十张相同格式的照片(训练资料越多越好)。然后转到train_model.py,输入你的数据集地址。我的数据集地址是“D:\myProject\pictures\dataset”,然后建立模型,读取训练集,训练模型,评估模型,最后存储模型:

  CNN模型的介绍我就不展开了。具体推荐一个哥们的视频教程叫莫凡python,很详细,循序渐进,教的很好。可以上优酷搜一下。如果你想看CNN原理最详细的介绍,我推荐这个:http://cs231n.github.io/.这门课的讲师是李菲菲。什么?你不知道李菲菲是谁?

  被训练的模型将被存储在一个固定的位置,在类模型中被写死:

  Step 4 打开摄像头验证模型效果

  模型训练好之后,打开read_camera.py这个文件里有一个Camera_reader的类。当模型初始化后,加载之前训练的模型:

  然后在设置Camera_reader实例后调用build_camera()方法,该方法打开摄像机,并将视频流中读取的人脸提供给model进行识别:

  模型的predict()函数会返回两个参数,第一个是概率最高的标签的索引,第二个是对应的概率。我们将对概率做出判断。如果高于70%,我们认为模型是可靠的(这个值可以自行调整观察的影响),可以显示具体的标签。相反,我们认为认出的面孔是陌生人。

  总结这个自己搭建的人脸识别系统,有自己的学习能力。你喂给它的数据越多,它能识别的人就越多,准确率也会不断提高。希望你自己测试研究一下。这个演示也有几个问题提醒大家:

  1.模型存在过拟合的问题。如果训练时历元过高,会发现虽然准确率已经逐渐提高甚至达到95%以上,但实际测试的准确率远低于训练时,说明模型存在过拟合的问题。解决的办法是增加样本类别和样本数量,这需要付出很大的努力;调整模型,但在样本数比较少的情况下,意义不是很大。

  2.openCV的人脸识别准确率还是有一些问题的。这个读者在使用pick_face.py抓取素材的时候就能感受到。你放进去的生活照只有70%-80%左右能看懂脸料。有些照片明明有你的脸,OpenCV却认为不是脸。这很尴尬吗?可以找一本关于openCV先进性的书。我推荐机械工业出版社出版的《OpenCV 3计算机视觉Python语言实现(原书第2版)》。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • opencv图像识别数字,opencv 识别
  • opencv图像识别数字,opencv 识别,如何基于opencv实现简单的数字识别
  • opencv图像的旋转角度计算,opencv图像仿射变换
  • opencv图像的旋转角度计算,opencv图像仿射变换,OpenCV图像几何变换之透视变换
  • opencv图像的旋转角度计算,opencv 旋转任意角度
  • opencv图像的旋转角度计算,opencv 旋转任意角度,opencv图片的任意角度旋转实现示例
  • opencv图像处理函数,opencv图像轮廓合并
  • opencv图像处理函数,opencv图像轮廓合并,OpenCV图像处理之七种常用图像几何变换
  • opencv双线性插值函数,opencv 图像插值
  • LBPH人脸识别,基于opencv的人脸识别技术
  • LBPH人脸识别,基于opencv的人脸识别技术,Opencv LBPH人脸识别算法详解
  • ,,OpenCV黑帽运算(BLACKHAT)的使用
  • opencv双线性插值函数,opencv 图像插值,C++ OpenCV实现图像双三次插值算法详解
  • ,,C语言 OpenCV实现柱面投影
  • ,,C++ Opencv imfill孔洞填充函数的实现思路与代码
  • 留言与评论(共有 条评论)
       
    验证码: