当前位置: 首页 > 办公技巧 > 正文

办公切屏技巧视频(摸鱼神器:用深度学习实现老板靠近自动切屏)

  • 叁碗诸角 叁碗诸角
  • 办公技巧
  • 2023-08-15 06:19:01
  • 0

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

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

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

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

任务概述

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

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


制定策略

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


系统架构

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


摄像头能实时拍摄图像经过学习的模型从拍摄图像中检测并认出老板的脸确认之后切换屏幕

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


拍摄人脸照片

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

你也可以用相机自带的软件进行拍摄,但是考虑到后期的处理,用自制的程序拍摄会更好。同样,因为接下来会处理人脸识别,所以需要把画面切割成只有人脸的部分。所以我用Python和OpenCV捕捉人脸图像。github请私信小编。

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


认出老板的脸

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


收集照片对照片进行预处理建立机器学习模型

收集照片

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


谷歌搜索从Facebook搜索拍视频

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

预处理照片

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

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

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


建立机器学习模型

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

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


切换屏幕

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

如果想全屏显示这张图片,可以用PyQt

OK,一切准备就绪。


成品展示

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

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

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

屏幕切换成功!


结论

目前我用OpenCV进行面部识别,但是由于OpenCV的准确性不高,我打算尝试一下Dlib提高准确度。我还想试一下自己训练的人脸检测模型。

另外,由于摄像头捕捉到的画面也并不准确,我会对此加以改进。


最新文章