快切屏,老板来了!记一次有趣的深度学习实践
本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。以下为译文:
介绍
在你的工作时间,有没有上网浏览一些与你工作无关的网站呢?
每当这种时候,如果我发现老板不知何时已经站在我背后时,我会感到非常尴尬。当然,我可以迅速地切换屏幕,但这种行为实在是太可疑了,更何况有时我都不会注意到他已经在那了。所以,为了解决这个问题,我创建了一个使用Keras的系统,它能自动识别我的老板是否正在接近我的座位并及时切换我电脑的屏幕。
具体来说,Keras运用于神经网络来学习我老板的脸部,同时网络摄像头用于识别他是否正在接近我的作为,并切换屏幕。
任务
这个系统的任务就是当我的老板接近我时,自动切换屏幕。
运用场景如下:
老板的座位到我的座位大约6到7米。 他在离开座位后4,5秒内可以到达我的座位。 因此,在此这段时间内需要完成屏幕的切换。
策略
这里有多种策略可以选择,而我选择的策略是跟随。首先,让计算机深入学习老板的面部。 然后,在我的桌子上设置一个网络摄像头,当网络摄像头捕捉到他的脸部时切换屏幕。 这是一个完美的策略。 让我们称之为奇妙的老板探测(Boss Sensor)系统。
系统架构
Boss Sensor的简单系统架构如下。
•网络摄像机实时拍摄图像。
•经过学习的脸部识别模型检测并识别所拍摄的面部图像。
•如果识别结果是我的老板则进行屏幕切换。
我们需要以下技术来完成行以上操作:
•拍摄脸部图像
•识别脸部图像
•切换屏幕
让我们逐一完成,然后在最后进行整合。
采取面部图象
你也可以使用附带的软件从相机拍摄图像,但最好能够从程序中采取,因为考虑到后面的处理。 此外,由于在随后的处理中需要进行面部识别,因此仅需要剪切面部图像。 所以,我使用Python和OpenCV来拍摄脸部图像。 下面是代码:
我能够获得比预期更清晰的脸部图像。
识别老板的脸部
我们需要以下三个步骤:
1.收集图像
2.预处理图像
3.构建机器学习模型
让我们逐一来进行分析。
收集图像
首先,我需要收集大量的图像来进行学习。 作为一种收集方法,我使用了以下资源:
•Google图片搜索
•Facebook上的图像收集
•拍摄视频
最初,我用网上搜索和Facebook收集图像,但并没有收集到足够多的图像。 所以,我使用摄像机拍摄视频,并将视频分解出大量的图像。
预处理图像
现在我有了足够多的面部图像,但学习模型不能直接对他们进行学习。这是因为图像中有大量与面部无关的信息。所以我需要先对图像进行脸部剪切。
我主要使用ImageMagick来进行脸部提取。 通过使用ImageMagick我们可以提取图像中的面部部分。
我收集到的大量面部图像如下:
也许我是这个世界上有我老板面部照片最多的人了,比他父母还多。
现在已经准备好进行机器学习了。
构建机器学习模型
Keras用于建立已经经过学习的卷积神经网络(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。 下面是代码:
现在,一切都准备就绪。
完成的产品
一旦我们整合所有运用到的技术,我们就大功告成了。
“我的老板离开了他的座位,他正在接近我的座位”
“OpenCV已经检测到面部并将图像输入到学习模型中。”
快切屏!
源代码
你可以从以下链接下载Boss Sensor:
结论
我结合了从Web相机的实时图像采集和面部识别使用Keras来识别我的老板和切换屏幕。目前,我用OpenCV来检测面部,但由于OpenCV中的面部检测的准确性似乎不太好,我想尝试使用Dlib来提高准确性。 另外,我还想试验一下我自己的面部检测模型。最后,由于从网络摄像机获取的图像的识别精度不太好,我还想改进这个方面。
文章原标题《Deep Learning Enables You to Hide Screen when Your Boss is Approaching》,作者:HIRONSAN,译者:friday012
文章为简译,更为详细的内容,请查看原文

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
帮你捋顺 API 网关的 API、SDK和错误排查
API 网关的特殊之处 用户使用 API 网关开放 API 服务,或者调用其他人开放的 API 服务。而且 API 网关自身也开放了管理接口 API。所以用户使用时需要弄清楚两套 API、两套 SDK、两套错误码。这里把这些资源整理一下,方便大家正确使用和问题排查。 开发资源List APIs 用户在 API 网关开放的 API 服务,如天气查询 API等 API 网关开放的管理接口,用于使用产品,如创建 API等 SDKs API 网关为天气查询等用户开放的 API 服务提供的 SDK 样例 API 网关为自身管理接口提供的 SDK 错误码 用户请求其他用户开放的 API 时产生的报错,如未授权、被流控、购买次数已用完等 用户请求 API 网关管理接口时产生的报错,如AccessKeyId错误、时间戳格式不对等
- 下一篇
《西部世界》何日来袭?自然语言理解是智能人机对话的关键瓶颈
一部剧情烧脑包含各种炸裂设定的神剧,迎来了观众如潮的好评。如同人工智能距离其出发的原点已经有60年,《西部世界》距离它的原作前身也已有40余年之久。这是一部根据早期同名科幻电影改编的剧集。“西部世界”是一个高科技的人造主题公园,公园中的“人”——从“接待员“到“居民”,都是与真人一般无二的机器人。剧集的推进为观者抛出一系列问题:“始终按照人类设定循环往复的机器人,何时真正自我觉醒?“”机器人是否能够拥有自主意识?“……剧情将我们带入一场关于人工智能的深刻讨论。 原作1973年的电影,高智能机器人的剧情设定在当时的技术上来讲是逆天想象,尽管这样的剧情在今天看来已经不那么“科幻”了,但在真实的世界中,人工智能要发展到剧中最初始的完美人机交互状态,都还有很长一段路要走。 这条路有多长? “人机交互智能的关键在于机器的‘大脑’,即机器对自然语
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- 设置Eclipse缩进为4个空格,增强代码规范
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Hadoop3单机部署,实现最简伪集群