前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神技能!在上司靠近座位时,用人脸识别技术及时屏幕切换

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

作者头像
IT派
发布2018-07-30 16:24:51
4730
发布2018-07-30 16:24:51
举报
文章被收录于专栏:IT派

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

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

任 务

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

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

战 术

我的战术是「跟踪」。

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

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

3. 电脑瞬间切换屏幕

Boss Sensor

完美,个人称这个系统为【Boss 反侦察系统】

系统架构

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

具体如下

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

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

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

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

· 面部图像抓取

· 图像识别

· 切换屏幕

面部图像抓取

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

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

BossSensor/camera_reader.py

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

认识 Boss 的脸

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

· 收集图像

· 预处理图像

· 构建机器学习模型

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

收集图像

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

· Google 图片

· Facebook 上 Boss 的图片

· 视频截图

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

预处理图像

搞到了好多的图片,用 ImageMagick 可以很轻松的截取头部图片。以下是我的收集:

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

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

构建机器学习模型

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

源码在此奉上:

· BossSensor/boss_train.py

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

切换屏幕

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

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

我只是切换屏幕,显示图片。我用 PyQt 把图片全屏化

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

最终产品

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

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

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

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

  • BossSensor (https://github.com/Hironsan/BossSensor)

总结

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

目前,我用 OpenCV 检测面部,但由于 OpenCV 中的面部检测的准确性似乎不太好,我想尝试使用 Dlib 来提高准确性。

原文:Deep Learning Enables You to Hide Screen when Your Boss is Approaching

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档