在你上司靠近你座位时,用人脸识别技术及时屏幕切换!
我已委托“维权骑士”(rightknights.com)为我的文章进行维权行动
简评:机器学习小项目,开放所有源码,手把手教你:在你上司靠近你座位时,用人脸识别技术及时屏幕切换。
--- Apr.21 Update ---
好友
大神已经做出了 Demo,有所改进,已开源。老板来了:人脸识别+手机推送,老板来了你立刻知道。他的方案是,一张照片,识别,发现目标后,推送告警到你的手机。
--- 以下是原文 ---
以下「我」皆代表原作者。本文已获得原作者的授权。
当你工作时,你会浏览一些和工作无关的内容吧?
这时刻如果你老板正好在你身后,我就问你,你尴不尴尬?当然了,你可以用多年训练出的手速飞快的切换屏幕,但是这样往往也欲盖弥彰。
所以,为了防止老板看到我开小差,我创建了一个系统,自动识别他的脸并切换屏幕伪装成工作的样子。深度学习使你能够在老板接近时隐藏屏幕!
具体来说,用 Keras 实现神经网络,认出他的脸,用网络摄像头识别他在接近,然后自动切换屏幕。
任务
任务是当老板接近,自动切换屏幕,具体情况如下:
老板据我 6 ~ 7 米,他离开座位后,4 ~ 5 秒就能到达我的位置,所以我没有什么反应时间来人工切换。
战术
我的战术是「跟踪」。
计算机通过深度学习记住老板的脸
网络摄像机捕捉到他脸
电脑瞬间切换屏幕
完美,我称这个系统为「Boss 反侦察系统」(Boss Sensor)。
系统架构
Boss 反侦察系统的简单系统架构如下:
网络摄像头实施捕捉影像
学习模型侦测,识别捕捉的影像
发现 Boss 来了,实现切换屏幕
实现以上的操作需要如下技术:
面部图像抓取
图像识别
切换屏幕
Ok,开搞。
面部图像抓取
为了抓取图像,我搞了个网络摄像机。
我们通过网络摄像机获取图像,由于我们是用来面部识别的,所以只需要截取脸部这个范围即可。我使用 Python 和 OpenCV 来拍摄脸部图像,代码如下:
我获得了比我预期更清楚的图片。
认识 Boss 的脸
接下来,我们使用机器学习,使计算机能够识别老板的脸。我们需要以下三个步骤:
收集图像
预处理图像
构建机器学习模型
让我们一一看看这些怎么实现。
收集图像
我要收集 Boss 各种各样的面部图像,我采取三个方法:
Google 图片
Facebook 上 Boss 的图片
视频截图
但是图片还是太少,样本不够,所以我就用我的网络摄像头盯着老板拍摄,然后截图,得到了足够多的,不同角度的图片。
预处理图像
搞到了好多的图片,用 ImageMagick 可以很轻松的截取头部图片。以下是我的收集:
也许我是世上拥有老板面孔照片最多的人,比他妈还多。
下面要开始让机器学习了。
构建机器学习模型
Keras 用于建立卷积神经网络(CNN)并让 CNN 受训。
TensorFlow 用于 Keras 的后端。如果你只识别面部,你可以调用 Web API 进行图像识别,如 Cognitive Services 中的 Computer Vision API,但是这次我决定自己实现实时性。
网络具有以下架构。Keras很方便,因为它可以轻松地输出架构。
____________________________________________________________________________________________________Layer(type)OutputShapeParam# Connected to ====================================================================================================convolution2d_1(Convolution2D)(None,32,64,64)896convolution2d_input_1[0][0]____________________________________________________________________________________________________activation_1(Activation)(None,32,64,64)0convolution2d_1[0][0]____________________________________________________________________________________________________convolution2d_2(Convolution2D)(None,32,62,62)9248activation_1[0][0]____________________________________________________________________________________________________activation_2(Activation)(None,32,62,62)0convolution2d_2[0][0]____________________________________________________________________________________________________maxpooling2d_1(MaxPooling2D)(None,32,31,31)0activation_2[0][0]____________________________________________________________________________________________________dropout_1(Dropout)(None,32,31,31)0maxpooling2d_1[0][0]____________________________________________________________________________________________________convolution2d_3(Convolution2D)(None,64,31,31)18496dropout_1[0][0]____________________________________________________________________________________________________activation_3(Activation)(None,64,31,31)0convolution2d_3[0][0]____________________________________________________________________________________________________convolution2d_4(Convolution2D)(None,64,29,29)36928activation_3[0][0]____________________________________________________________________________________________________activation_4(Activation)(None,64,29,29)0convolution2d_4[0][0]____________________________________________________________________________________________________maxpooling2d_2(MaxPooling2D)(None,64,14,14)0activation_4[0][0]____________________________________________________________________________________________________dropout_2(Dropout)(None,64,14,14)0maxpooling2d_2[0][0]____________________________________________________________________________________________________flatten_1(Flatten)(None,12544)0dropout_2[0][0]____________________________________________________________________________________________________dense_1(Dense)(None,512)6423040flatten_1[0][0]____________________________________________________________________________________________________activation_5(Activation)(None,512)0dense_1[0][0]____________________________________________________________________________________________________dropout_3(Dropout)(None,512)0activation_5[0][0]____________________________________________________________________________________________________dense_2(Dense)(None,2)1026dropout_3[0][0]____________________________________________________________________________________________________activation_6(Activation)(None,2)0dense_2[0][0]====================================================================================================Totalparams:6489634
源码在此奉上:
到目前为止,我的计算机已经可以认出老板了。
切换屏幕
现在,学习模型已经能够识别老板的脸了,接下来就要切换屏幕了。
这时候,我们要假装在工作。作为一个程序员,我截了张图:
我只是切换屏幕,显示图片。我用 PyQt 把图片全屏化,以下是源码:
现在,万事俱备,只差老板了。
最终产品
一旦我们整合已经验证的技术,我们就完成了。我真的对老板试过了。ԅ(¯﹃¯ԅ)
我老板从他的座位上起身往我这边走:OpenCV 已经检测到面部并将图像输入到学习模型中。
然后我的屏幕瞬间切换,成功!(*ノ´□`)ノ
源码
你可以下载到全部「Boss 反侦查系统的源码」
总结
这个项目,我结合了从 Web 相机的实时图像采集和面部识别,到使用 Keras 识别我的老板和切换屏幕。
目前,我用 OpenCV 检测面部,但由于 OpenCV 中的面部检测的准确性似乎不太好,我想尝试使用 Dlib 来提高准确性。最后,极光日报靠谱,可以关注一下。
原文:Deep Learning Enables You to Hide Screen when Your Boss is Approaching
后部分内容涉及机密请进入社区,获得更多分享。
关于作者:
凤城狂客,目前是AI方向的高级产品经理、策略产品经理研习社创始人。
曾在金山、魅族、唯品会、太平洋等互联网公司从事产品经理。期间捣鼓过0-1、C/B/端、电商、大数据、AI等产品。
交流研习社群:
AI+策略产品经理研习 QQ群:13119277
学习转行人工智能/ AI QQ群:731273633
To B端/后台产品经理交流 QQ群:682093278
产品经理校招应届生求职 QQ群:161455411
「策略产品经理研习社」
做两件事:
1.社区:分享产品经理策略通识、AI和策略类产品经理的修炼干货;
2.服务:提供入行产品经理的0-1转型和面试指导,PM日常答疑帮助。
历史干货内容汇总:https://dwz.cn/f2q6gKCo
了解、如何转型策略产品经理?:https://dwz.cn/3L3avl4A
欢迎关注公众号:chanpin007(策略产品经理研习社)