微信号:newbiefly1

介绍:专注于分享全面免费的IT开发视频资料,目前整理的包含大数据;IOS;Android;JNI技术;游戏开发;c/c++;数据结构;黑客技术;javaweb;.net;html5;javascript;div+css等欢迎相互学习共同成长.

在你上司靠近你座位时,用人脸识别技术及时屏幕切换

2017-01-11 22:33 菜鸟要飞


简评:机器学习小项目,开放所有源码,手把手教你:在你上司靠近你座位时,用人脸识别技术及时屏幕切换。


以下「我」皆代表原作者。


当你工作时,你会浏览一些和工作无关的内容吧?


这时刻如果你老板正好在你身后,我就问你,你尴不尴尬?当然了,你可以用多年训练出的手速飞快的切换屏幕,但是这样往往也欲盖弥彰。

所以,为了防止老板看到我开小差,我创建了一个系统,自动识别他的脸并切换屏幕伪装成工作的样子。深度学习使你能够在老板接近时隐藏屏幕!

具体来说,用 Keras 实现神经网络,认出他的脸,用网络摄像头识别他在接近,然后自动切换屏幕。


任务


任务是当老板接近,自动切换屏幕,具体情况如下:

老板据我 6 ~ 7 米,他离开座位后,4 ~ 5 秒就能到达我的位置,所以我没有什么反应时间来人工切换。


战术


我的战术是「跟踪」。

  1. 计算机通过深度学习记住老板的脸

  2. 网络摄像机捕捉到他脸

  3. 电脑瞬间切换屏幕

完美,我称这个系统为「Boss 反侦察系统」(Boss Sensor)。



系统架构


Boss 反侦察系统的简单系统架构如下:


  • 网络摄像头实施捕捉影像

  • 学习模型侦测,识别捕捉的影像

  • 发现 Boss 来了,实现切换屏幕


实现以上的操作需要如下技术:


  • 面部图像抓取

  • 图像识别

  • 切换屏幕


Ok,开搞。


面部图像抓取


为了抓取图像,我搞了个网络摄像机。



我们通过网络摄像机获取图像,由于我们是用来面部识别的,所以只需要截取脸部这个范围即可。我使用 Python 和 OpenCV 来拍摄脸部图像,代码如下:


我获得了比我预期更清楚的图片。



认识 Boss 的脸


接下来,我们使用机器学习,使计算机能够识别老板的脸。我们需要以下三个步骤:

  • 收集图像

  • 预处理图像

  • 构建机器学习模型


让我们一一看看这些怎么实现。


收集图像


我要收集 Boss 各种各样的面部图像,我采取三个方法:

  • Google 图片

  • Facebook 上 Boss 的图片

  • 视频截图


但是图片还是太少,样本不够,所以我就用我的网络摄像头盯着老板拍摄,然后截图,得到了足够多的,不同角度的图片。


预处理图像


搞到了好多的图片,用

  ImageMagick (http://www.imagemagick.org/script/index.php)

可以很轻松的截取头部图片。以下是我的收集:


也许我是世上拥有老板面孔照片最多的人,比他妈还多。


下面要开始让机器学习了。


构建机器学习模型


Keras 用于建立卷积神经网络(CNN)并让 CNN 受训。


TensorFlow 用于 Keras 的后端。如果你只识别面部,你可以调用 Web API 进行图像识别,如 Cognitive Services 中的 Computer Vision API,但是这次我决定自己实现实时性。


网络具有以下架构。Keras很方便,因为它可以轻松地输出架构。


____________________________________________________________________________________________________Layer (type)                     Output Shape          Param #     Connected to                     ====================================================================================================convolution2d_1 (Convolution2D)  (None, 32, 64, 64)    896         convolution2d_input_1[0][0]      ____________________________________________________________________________________________________activation_1 (Activation)        (None, 32, 64, 64)    0           convolution2d_1[0][0]            ____________________________________________________________________________________________________convolution2d_2 (Convolution2D)  (None, 32, 62, 62)    9248        activation_1[0][0]               ____________________________________________________________________________________________________activation_2 (Activation)        (None, 32, 62, 62)    0           convolution2d_2[0][0]            ____________________________________________________________________________________________________maxpooling2d_1 (MaxPooling2D)    (None, 32, 31, 31)    0           activation_2[0][0]               ____________________________________________________________________________________________________dropout_1 (Dropout)              (None, 32, 31, 31)    0           maxpooling2d_1[0][0]             ____________________________________________________________________________________________________convolution2d_3 (Convolution2D)  (None, 64, 31, 31)    18496       dropout_1[0][0]                  ____________________________________________________________________________________________________activation_3 (Activation)        (None, 64, 31, 31)    0           convolution2d_3[0][0]            ____________________________________________________________________________________________________convolution2d_4 (Convolution2D)  (None, 64, 29, 29)    36928       activation_3[0][0]               ____________________________________________________________________________________________________activation_4 (Activation)        (None, 64, 29, 29)    0           convolution2d_4[0][0]            ____________________________________________________________________________________________________maxpooling2d_2 (MaxPooling2D)    (None, 64, 14, 14)    0           activation_4[0][0]               ____________________________________________________________________________________________________dropout_2 (Dropout)              (None, 64, 14, 14)    0           maxpooling2d_2[0][0]             ____________________________________________________________________________________________________flatten_1 (Flatten)              (None, 12544)         0           dropout_2[0][0]                  ____________________________________________________________________________________________________dense_1 (Dense)                  (None, 512)           6423040     flatten_1[0][0]                  ____________________________________________________________________________________________________activation_5 (Activation)        (None, 512)           0           dense_1[0][0]                    ____________________________________________________________________________________________________dropout_3 (Dropout)              (None, 512)           0           activation_5[0][0]               ____________________________________________________________________________________________________dense_2 (Dense)                  (None, 2)             1026        dropout_3[0][0]                  ____________________________________________________________________________________________________activation_6 (Activation)        (None, 2)             0           dense_2[0][0]                    ====================================================================================================Total params: 6489634


源码在此奉上:



到目前为止,我的计算机已经可以认出老板了。


切换屏幕


现在,学习模型已经能够识别老板的脸了,接下来就要切换屏幕了。

这时候,我们要假装在工作。作为一个程序员,我截了张图:



我只是切换屏幕,显示图片。我用 PyQt 把图片全屏化,以下是源码:


  • BossSensor/image_show.py(https://github.com/Hironsan/BossSensor/blob/master/image_show.py)


  • 现在,万事俱备,只差老板了。


    最终产品


    一旦我们整合已经验证的技术,我们就完成了。我真的对老板试过了。


     



    我老板从他的座位上起身往我这边走:OpenCV 已经检测到面部并将图像输入到学习模型中。



    然后我的屏幕瞬间切换,成功!(*ノ´□`)ノ



    源码


    你可以下载到全部「Boss 反侦查系统的源码」



    总结


    这个项目,我结合了从 Web 相机的实时图像采集和面部识别,到使用 Keras 识别我的老板和切换屏幕。


    目前,我用 OpenCV 检测面部,但由于 OpenCV 中的面部检测的准确性似乎不太好,我想尝试使用 Dlib 来提高准确性。最后,极光日报靠谱,可以关注一下。


小编推荐

马哥2016linux就业班+架构视频教程


原文:https://zhuanlan.zhihu.com/p/24809159

 
菜鸟要飞 更多文章 2017最全的Java大致学习方向 不要浪费时间去写所谓的完美代码 C\/C++为什么永远不会死!以及批判Rust语言 找工作可以做个参考——中国上市公司市值 500 强:腾讯登顶,阿里第3 找工作可以做个参考——中国上市公司市值 500 强:腾讯登顶,阿里第3
猜您喜欢 国民级游戏 H5版《世界OL》9月14日全面上线! Go语言并发模型:以并行处理MD5为例 前淘宝工程师谈12306:做它比做淘宝难 美团外卖黑作坊被端 稽查部门将约谈涉事网站 Conference案例分析系列之 - 上下文划分和领域建模