0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一款系统能识别逐渐朝你走来的老板,并且自动隐藏正在浏览的屏幕

zhKF_jqr_AI 来源:未知 作者:李倩 2018-06-26 16:28 次阅读

在当下网络发达的时代,我们很难抵挡信息的冲击,上班时间总想偷偷刷个微博、看个新闻啥的,才能走在潮流前线嘛!然而此时此刻,最怕老板悄咪咪出现在身后,恐怖指数可以和门外突然出现的班主任相比。

一身冷汗之后,手忙脚乱马上切换屏幕!假装努力工作!但是一切都太晚了,你的小动作都被老板看在眼里、记在心中……

所以,为了躲避老板的监控,日本一程序员自制了一款系统,能识别逐渐朝你走来的老板,并且自动隐藏正在浏览的屏幕。

具体来说,系统使用了基于Keras的神经网络学习辨认人脸,网络摄像头用于判断目标对象是否靠近,并基于判断切换屏幕。以下是论智对这一项目的编译。

任务概述

这一任务的目标是当老板靠近我的时候,屏幕可以自动切换到与工作有关的内容。我和老板的位置大致如下:

从他的座位到我的座位大约有6~7米的距离,这之间只需要4~5秒的时间。所以我必须让系统在几秒内完成一系列动作。

制定策略

首先,让电脑通过深度学习掌握老板的脸。然后,在我的工位上设置一个摄像头,当捕捉到老板的脸时,屏幕可以自动切换。我将这套系统称为“老板感应器(Boss Sensor)”,简直完美!

系统架构

“老板感应器”的简单结构如下:

摄像头能实时拍摄图像

经过学习的模型从拍摄图像中检测并认出老板的脸

确认之后切换屏幕

简单地说就是拍照、辨认、转换屏幕。让我们一步一步的解释。

拍摄人脸照片

在这里,我用的是BUFFALO BSW20KM11BK作为拍摄工具。

你也可以用相机自带的软件进行拍摄,但是考虑到后期的处理,用自制的程序拍摄会更好。同样,因为接下来会处理人脸识别,所以需要把画面切割成只有人脸的部分。所以我用Python和OpenCV捕捉人脸图像。代码在这里:github.com/Hironsan/BossSensor/blob/master/camera_reader.py

结果我得到了比我想象中更清晰的照片。

认出老板的脸

接下来,我们用机器学习分三步识别出老板的面容:

收集照片

对照片进行预处理

建立机器学习模型

收集照片

首先,我需要收集大量老板的照片用作学习,其中收集方法有三种:

谷歌搜索

从Facebook搜索

视频

前面两种方法能找到的照片很少,所以我用拍摄视频的方法,再将视频分解成许多照片。

预处理照片

虽然我得到了大量面部图片,但是学习模型并不能达到预期效果。这是因为照片中还有和面部无关的内容,所以我们要裁剪掉无关内容,只留下面部。这里我用到的是ImageMagick(www.imagemagick.org/script/index.php)。

最终收集到的面部照片如下:

现在要开始让模型学习了!

建立机器学习模型

Keras用来建立卷积神经网络(CNN),TensorFlow用作Keras的后端。如果只用来识别面部,你可以请求类似Computer Vision API的网络API进行图片识别,但是这次我决定自己DIY

网络的框架如下所示。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

代码在这里:github.com/Hironsan/BossSensor/blob/master/boss_train.py

目前为止,只要老板出现在摄像机镜头下,系统就能认出他。

切换屏幕

现在,学习过的模型可以认出老板的脸了,下一步就是切换屏幕。首先放一张假装在工作时候的照片,因为我是程序员,所以以下是我的工作常态:

如果想全屏显示这张图片,可以用PyQt,代码在这里:github.com/Hironsan/BossSensor/blob/master/image_show.py

OK,一切准备就绪。

成品展示

把上面的技术结合在一起,我们的工作就完成了。接下来让我们试验一下。

老板离开了他的座位并向我走来

OpenCV检测到了他的脸然后向模型中输入了图片

屏幕切换成功!

结论

目前我用OpenCV进行面部识别,但是由于OpenCV的准确性不高,我打算尝试一下Dlib提高准确度。我还想试一下自己训练的人脸检测模型。另外,由于摄像头捕捉到的画面也并不准确,我会对此加以改进。

后记

目前知乎上有人已经做出了该项目的Demo,加以改进后可以直接把老板来了的信息发送到手机上。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98743
  • 深度学习
    +关注

    关注

    73

    文章

    5237

    浏览量

    119906

原文标题:摸鱼神器:用深度学习实现老板靠近自动切屏

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎用设置任务栏自动隐藏,并在“开始”菜单显示小图标

    `<p>步骤:任务栏-》右键-》属性-》在任务栏选中<font face="Verdana">自动隐藏
    发表于 06-28 10:57

    你熟悉的十大另类浏览

    :18.0.1025.162  支持系统:Windows XP和Windows 7  五、Swiftfox  这是一款经过优化火狐浏览器后形成的浏览器,
    发表于 07-08 11:10

    怎么在labview中实现靠边自动隐藏效果??

    在labview中实现靠边自动隐藏效果,就是类似于QQ界面靠近电脑的屏幕的边上就是自动隐藏这样子的个功能,谢谢了。。。
    发表于 11-02 21:43

    布尔控件鼠标进入自动隐藏名称.rar

    鼠标移动到布尔控件上方自动隐藏它的标题和标签,移出后又显示
    发表于 07-11 09:00

    多种方式减轻浏览器的资源占用   

    ,让它们在使用的时候可以轻装前进了呢?   首先下载一款名为speedyfox的小工具,并且退出正在运行的浏览器等软件。该工具运行以后会自动
    发表于 06-28 14:54

    WinCE隐藏桌面方法

    。  注:设置完成后重启生效。桌面正中WEC7版本信息“Windows Embedded Compact v7.00 ....”字样仅在主板处于“调试模式”时才会显示,主板处于“运行模式”时会自动隐藏,与是否运行DH无关。
    发表于 08-24 11:23

    请问Altium Designer19画原理图时怎么隐藏componets中的PCBLIB封装?

    Altium designer19画原理图时如何隐藏componets中的PCBLIB封装哦?18是自动隐藏,19怎么隐藏哦?H:\Desktop\1.png
    发表于 09-29 01:10

    如何设计一款基于LabVlEW太阳路灯充放电监测系统

    如何设计一款基于LabVlEW太阳路灯充放电监测系统
    发表于 05-08 08:52

    分享一款不错的基于DSP的小型直流风扇自动化测试系统

    分享一款不错的基于DSP的小型直流风扇自动化测试系统
    发表于 05-08 09:25

    分享一款不错的基于LIN总线的汽车HID前照灯自动调光系统

    分享一款不错的基于LIN总线的汽车HID前照灯自动调光系统
    发表于 05-12 06:49

    怎样去设计一款基于Linux的屏幕水印产品

    最近做了一款基于Linux(主要在国产操作系统统信UOS上做的测试,理论上windows和Mac上也能用)的屏幕水印产品,防截屏,防拍照,保护信息安全,完全从0开始研究,到产品初步成熟,明水印,盲
    发表于 07-28 06:39

    AD18 原理图生成PCB元件标号自动隐藏,是什么原因?

    AD18原理图生成PCB文件后,元件位号都自动隐藏了。不知道是什么原因,可能动了什么设置了,直恢复不过来。
    发表于 09-19 08:10

    怎样设计研发一款高性能的智能太阳饮水机控制系统

    取之不尽、用之不竭,其次干净无污染又是大特点,因此积极推广太阳的应用具有重大意义。本设计将研发一款高性能的智能太阳饮水机控制系统,产品
    发表于 12-08 08:00

    在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统

    、设计目标:旨在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统。该系统同时具备普通
    发表于 01-18 09:37

    基于语音识别一款识别语音的App

    最近做了一款语音识别的App,想着利用手机控制arduino实现RGB的调节,开发思路:基于讯飞语音识别一款
    发表于 03-01 07:05