利用Python、openCV打造自己的人脸识别AI系统

原创 2017年06月06日 16:27:52

Get your hands dirty     

        如果要真正理解一个东西,我们必须要能够把它创造出来。动手去做,永远比被动地听有用。本文介绍了我自己动手做的一种基于卷积神经网络的人脸识别系统,以python

为语言基础,综合应用了kerasopencvnumpysklearn等多种技术。代码位置:

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

先看效果(感谢夫人赏脸出境):

 


开始准备   

       选用语言Python,时下入门机器学习成本最低、学习速度最快的语言,python搞网络爬虫也很靠谱运用的技术有 opencv(摄像头、图片处理),numpy(图片数字化),os(文件的操作和处理),keras(构建神经网络进行图像识别)。

       硬件条件很简单,windows普通笔记本+普通摄像头即可搞定。


参考基础

        https://github.com/Hironsan/BossSensor 本文的代码很多参考了之前这个日本工程师写的demo,主体应用的技术是差不多的,但是有一些不同:

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

2.神经网络设计更加简单。新的demo在卷积神经网络的设计上比原有的卷积神经网络更加简单和容易理解,没有搞得那么复杂,更加适合入门;

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

4详尽的中文注释。你可以看很详细很详细的中文注释、不用看日文和英文的注释了......

 

Step 1  环境配置

       环境配置这块,网上的资料非常多,总体来说我给大家的建议是:使用集成python环境  Anaconda,里面已经集成了很多有用的安装包比如说numpyscipy,免去了自己配置的痛苦;通过Anaconda安装新的计算包也非常方便,具体就不再赘述了,网上可以找到很多教程,多百度、多Google。我可以再提醒一句的是,好像Anacondatheano还有tensorflow的包都有点小问题,需要删了然后重新下载配置,网上也有教程。

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

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

Step 2 获得训练数据集

       第二步就是要获得数据训练集,你可以从网上找训练集,也可以用自己或者朋友的照片来做素材(顺手练习下opencvos),具体操作办法:

打开pick_face.py 这个程序,里面有一个函数readPicSaveFace(sourcePath,objectPath,*suffix)sourcePath是存储图像源的文件夹,objectPath是存储识别出的人脸的文件夹,看这个函数的备注:



写的是不是很清楚,具体使用如下:


前面是你存储源文件图片的文件夹地址,后面那个是你存储剪裁好、处理好的人脸图片的地址,最后是源文件图片的格式(文件后缀)。

通过这个函数你就可以很方便地把各种图片中的人脸给扣出来并保存下来了。像我的人脸就放在了“D:\myProject\pictures\dataset\jerry”这个文件夹中,如下所示:

 

Step 3 构建模型和进行模型训练

        当你建立好你的的数据集之后,应该会有一个dataset的总文件夹,dataset下会分几个文件夹,你想让你的模型识别几张人脸就建立几个子文件夹,每个子文件夹里面应该有至少几十张格式一致的照片(训练素材越多越好)。然后进入train_model.py,输入你的数据集地址,我的数据集地址是“D:\myProject\pictures\dataset”,然后建立模型、读取训练集、训练模型、评估模型,最后存储模型:


        关于CNN模型的介绍我就不展开了,具体我推荐一个哥们的视频教程叫莫烦python,讲的很细,一步一步的,教的非常好,大家可以去优酷上搜索。如果要看最详细的CNN的原理介绍,我推荐这个:http://cs231n.github.io/ 。本课程的主讲人是李飞飞,什么?你不知道谁是李飞飞?

训练好的模型会存储在Model这个类中写死的一个固定位置中:


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

          模型训练好之后,打开read_camera.py,这个文件中有一个Camera_reader的类,在模型初始化的时候就加载你之前训练好的模型:


         然后在建立一个Camera_reader的实例之后调用build_camera()的方法,该方法打开摄像头,并对视频流中读取到的人脸交给model进行识别:


模型的predict()函数会返回两个参数,第一个是概率最高的label的index,第二个参数为对应概率,我们会对概率进行下判定,如果高于70%我们就认为模型是可靠的(这个值自己可以调整观察带来的影响),可以显示具体的label,反之我们认为识别出的人脸是一个Stranger。

 

总结

         这个我自己搭建出的人脸识别系统是具有自己学习能力的,你给它喂的数据越多,它就可以识别越多的人而且准确度会不断提高,希望大家可以自己测试和研究。这个demo也有几个问题需要提醒大家:

         1. 模型有过拟合的问题。在训练的时候如果epoch太高,会发现accuray虽然逐步提高甚至到达95%以上,但是实际test的准确度要比training的时候低很多,这个就说明模型出现了过拟合的问题。解决办法,增加样本类别和样本数,这个需要花费很多功夫;调整模型,但是在样本数量比较小的时候不是很显著。

         2. openCV的人脸识别精度还是有点问题,这个读者可以在使用pick_face.py进行素材抓取的时候感受到,你放入的生活照片大概只有70%-80%可以读取人脸素材出来,有的照片明明有你的脸,但是openCV认为那不是一张脸,这个就很尴尬了有没有;关于openCV的进阶可以找本书看看,我推荐机械工业出版社出的《OpenCV 3计算机视觉Python语言实现(原书第2版)》。

       。

基于Python的开源人脸识别库:离线识别率高达99.38%

基于Python的开源人脸识别库:离线识别率高达99.38%
  • zchang81
  • zchang81
  • 2017-07-28 13:33:49
  • 29648

7行Python代码的人脸识别

随着去年alphago 的震撼表现,AI 再次成为科技公司的宠儿。AI涉及的领域众多,图像识别中的人脸识别是其中一个有趣的分支。百度的BFR,Face++的开放平台,汉王,讯飞等等都提供了人脸识别的A...
  • wireless_com
  • wireless_com
  • 2017-03-20 08:41:57
  • 41960

人脸识别(2)--Python3.6+OpenCV3.2识别实例

这里提供两个简单实例: 调用摄像头获取图片进行实时检测 本地获取图片进行人脸检测并保存图片 前提条件: 确保python+opencv环境已经搭建成功。搭建步骤可以参考上一篇博客:http://bl...
  • u012842255
  • u012842255
  • 2017-04-16 11:59:43
  • 6888

Python + OpenCV 实现简单的人脸识别

前言人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像...
  • tengxing007
  • tengxing007
  • 2017-05-19 17:53:25
  • 2931

python人脸识别

代码Talk is cheap, show you the code! 代码参考自:这里无注释版:import cv2 faceClassifier=cv2.CascadeClassifier('h...
  • linzch3
  • linzch3
  • 2017-03-20 17:35:38
  • 754

python一行代码实现人脸识别

我是在鸟哥私房菜的网站中看到这篇文章,觉得很有趣,所以和大家一起分享: http://www.linuxidc.com/Linux/2017-10/148126.htm 实现人脸识别之前,我们...
  • chenjuan0530
  • chenjuan0530
  • 2017-11-08 10:21:26
  • 1307

OpenCV+python 人脸识别

首先给大家推荐一本书:机器学习算法原理与编程实践 本文内容全部转载于书中,相当于一个读书笔记了吧绪论1992年麻省理工学院通过实验对比了基于结构特征的方法与基于模版匹配的方法,发现模版匹配的方法...
  • wangyaninglm
  • wangyaninglm
  • 2016-06-23 17:51:55
  • 10727

人脸识别python代码

  • 2017年12月11日 11:09
  • 8.42MB
  • 下载

Python实现NB-IoT模块远程控制

本来想尝试下如果不使用运营商网络应用平台情况下,只是在服务商服务器上是否可以实现对终端完全控制,如果这样可行,那么物联网应用服务端更有灵活性。实际情况下,很难实现和运营商网络对等的处理,用python...
  • DreamBitByBit
  • DreamBitByBit
  • 2018-02-10 22:35:01
  • 257
收藏助手
不良信息举报
您举报文章:利用Python、openCV打造自己的人脸识别AI系统
举报原因:
原因补充:

(最多只允许输入30个字)