介绍
工作的时候肯定会浏览一些和工作无关的东西,别说你没做过。
被老板发现的话多桌面切换软件,那可就太丢脸了。当然,我可以立刻切换桌面,但这种行为太可疑了,有时候老板来了我都察觉不到。为了不显得那么刻意,我做了一个脸部识别程序,当老板过来时,自动隐藏桌面内容。
具体来说,我使用 Keras 实现了一个用于面部识别的神经网络,使用网络摄像头判断他是否正在靠近,然后切换图像。
任务
这个程序的目的是当检测到boss靠近时,自动切换电脑桌面。
场景如下:
我和老板的座位相隔6-7米,他离开座位后大概需要4-5秒才能到达我的工作站。所以我必须在这个时间内切换桌面,时间很紧迫!
战略
您可能有很多方法可以做到这一点,以下是我的个人解决方案。
首先,利用深度学习技术,让电脑记住老板的脸;然后在我的工作站安装一个网络摄像头,一旦捕捉到老板的脸,就快速切换桌面。我觉得这是一个完美的策略,我们叫它“Boss Sensor”。
系统结构
Boss Sensor的系统架构如下图所示。
在此过程中使用了以下技术:
让我们一步一步地分析一下。
捕捉面部
首先,用网络摄像头捕捉镜头。
我用的是BUFFALO BSW20KM11BK。
你也可以使用电脑软件自带的摄像头,但考虑到接下来的步骤,还是直接获取图像比较好。由于接下来需要进行面部识别,所以需要对图像进行裁剪。我使用 Python 和 OpenCV 来获取面部图像。以下是代码:
面部图像比预期的更清晰。
人脸识别
接下来,我们使用机器学习来确保计算机能够识别老板的脸。
这个过程需要三个步骤:
让我们一步一步地分析一下。
图片集
第一的,
一开始我尝试从网络搜索和 Facebook 上收集图片,但数量不够。后来我拍摄了一段视频,将其分解成无数张图片。
图像预处理
我收集的图片已经够多了,但是除了脸部之外,还有很多不相关的部分,学习模型无法准确识别。我们只能将脸部单独裁剪掉。
我主要使用ImageMagick进行提取,人脸图像是通过ImageMagick裁剪得到的。
然后我收集了以下面部图像:
我可能是世界上拥有老板照片最多的人,可能比他父母的照片还多。
接下来,构建学习模型。
建立机器学习模型
我使用 Keras 构建了一个卷积神经网络 (CNN),可用于训练。Keras 使用 TensorFlow 作为后端。如果只需要识别人脸,可以调用用于图像识别的 Web API,例如认知服务中的计算机视觉 API多桌面切换软件,但考虑到实时性,我决定自己编写。
下面是网络的架构。Keras 可以轻松显示架构。
======================================
层(类型)输出 ShapeParam# 连接到
======================================
convolution2d_1(Convolution2D)(无,32,64,64)896convolution2d_input_1[0][0]
activated_1(激活)(无,32,64,64)0convolution2d_1[0][0]
convolution2d_2(Convolution2D)(无,32,62,62)9248activation_1[0][0]
activated_2(激活)(无,32,62,62)0convolution2d_2[0][0]
maxpooling2d_1(MaxPooling2D)(无,32,31,31)0activation_2[0][0]
dropout_1(Dropout)(无,32,31,31)0maxpooling2d_1[0][0]
convolution2d_3(Convolution2D)(无,64,31,31)18496dropout_1[0][0]
activation_3(激活)(无,64,31,31)0convolution2d_3[0][0]
convolution2d_4(Convolution2D)(无,64,29,29)36928activation_3[0][0]
activated_4(激活)(无,64,29,29)0convolution2d_4[0][0]
maxpooling2d_2(MaxPooling2D)(无,64,14,14)0activation_4[0][0]
dropout_2(Dropout)(无,64,14,14)0maxpooling2d_2[0][0]
flatten_1(扁平化)(无,12544)0dropout_2[0][0]
density_1(密集)(无,512)6423040flatten_1[0][0]
activation_5(激活)(无,512)0dense_1[0][0]
dropout_3(辍学)(无,512)0activation_5[0][0]
density_2(密集)(无,2)1026dropout_3[0][0]
activation_6(激活)(无,2)0dense_2[0][0]
======================================
总参数:6489634
以下是代码:
现在,只要老板出现在镜头里,就能被认出来。
切换桌面
一旦学习模型识别出老板正在接近,就该切换桌面了。我选择了下面的图片来假装我正在工作。
我选择这张图片是因为我是一名程序员。
我只是给你看一张图片。
我想要图片全屏显示,所以用的是PyQt,代码如下:
一切都准备好了。
完成的产品
只要结合以上技巧就可以了。我已经尝试过了。
“老板离开座位,向我走了过来。”
“OpenCV 检测到老板的脸并将信息传递给学习模型。”
“确认是BOSS后就赶紧换桌面吧!ヽ('∇')ノワーイ”
源代码
Boss Sensor源代码下载链接如下:
记得喜欢我 m(_ _)m
综上所述
这次我结合网络摄像头的实时图像采集和Keras的面部识别,成功识别出老板并隐藏桌面。
目前我使用OpenCV进行人脸检测,但是由于OpenCV的人脸检测准确率好像不是很好,所以想尝试使用Dlib来提高准确率,另外也想尝试自己的人脸检测模型。
由于从网络摄像头获取的图像的识别准确率不是很好,所以我会做一些改进。