介�
åœ¨ä½ çš„å·¥ä½œæ—¶é—´ï¼Œæœ‰æ²¡æœ‰ä¸Šç½‘æµ�è§ˆä¸€äº›ä¸Žä½ å·¥ä½œæ— å…³çš„ç½‘ç«™å‘¢ï¼Ÿ
æ¯�当这ç§�时候,如果我å�‘现è€�æ�¿ä¸�知何时已ç»�站在我背å�Žæ—¶ï¼Œæˆ‘会感到é�žå¸¸å°´å°¬ã€‚当然,我å�¯ä»¥è¿…速地切æ�¢å±�幕,但这ç§�行为实在是太å�¯ç–‘了,更何况有时我都ä¸�会注æ„�到他已ç»�在那了。所以,为了解决这个问题,我创建了一个使用Keras的系统,它能自动识别我的è€�æ�¿æ˜¯å�¦æ£åœ¨æŽ¥è¿‘我的座ä½�å¹¶å�Šæ—¶åˆ‡æ�¢æˆ‘电脑的å±�幕。
具体æ�¥è¯´ï¼ŒKerasè¿�用于神ç»�网络æ�¥å¦ä¹ 我è€�æ�¿çš„脸部,å�Œæ—¶ç½‘络摄åƒ�头用于识别他是å�¦æ£åœ¨æŽ¥è¿‘我的作为,并切æ�¢å±�幕。
任务
这个系统的任务就是当我的��接近我时,自动切��幕。
�用场景如下:
è€�æ�¿çš„座ä½�到我的座ä½�大约6到7米。 他在离开座ä½�å�Ž4,5秒内å�¯ä»¥åˆ°è¾¾æˆ‘的座ä½�。 å› æ¤ï¼Œåœ¨æ¤è¿™æ®µæ—¶é—´å†…需è¦�完æˆ�å±�幕的切æ�¢ã€‚
ç–ç•¥
这里有多ç§�ç–ç•¥å�¯ä»¥é€‰æ‹©ï¼Œè€Œæˆ‘选择的ç–略是跟éš�。首先,让计算机深入å¦ä¹ è€�æ�¿çš„é�¢éƒ¨ã€‚ ç„¶å�Žï¼Œåœ¨æˆ‘的桌å�上设置一个网络摄åƒ�头,当网络摄åƒ�头æ�•æ�‰åˆ°ä»–的脸部时切æ�¢å±�幕。 这是一个完美的ç–略。 让我们称之为奇妙的è€�æ�¿æŽ¢æµ‹(Boss Sensor)系统。
系统架构
Boss Sensor的简�系统架构如下。
•网络摄�机实时�摄图�。
•ç»�过å¦ä¹ 的脸部识别模型检测并识别所æ‹�æ‘„çš„é�¢éƒ¨å›¾åƒ�。
•如果识别结果是我的��则进行�幕切�。
我们需�以下技术�完�行以上�作:
•�摄脸部图�
•识别脸部图�
•切��幕
让我们�一完�,然�在最�进行整�。
采��部图象
首先,用网络摄�头�摄脸部图�。 我用的是BUFFALO BSW20KM11BK网络摄�头
ä½ ä¹Ÿå�¯ä»¥ä½¿ç”¨é™„带的软件从相机æ‹�摄图åƒ�,但最好能够从程åº�ä¸é‡‡å�–ï¼Œå› ä¸ºè€ƒè™‘åˆ°å�Žé�¢çš„处ç�†ã€‚ æ¤å¤–,由于在éš�å�Žçš„处ç�†ä¸éœ€è¦�进行é�¢éƒ¨è¯†åˆ«ï¼Œå› æ¤ä»…需è¦�剪切é�¢éƒ¨å›¾åƒ�。 所以,我使用Pythonå’ŒOpenCVæ�¥æ‹�摄脸部图åƒ�。 下é�¢æ˜¯ä»£ç �:
BossSensor/camera_reader.py
我能够获得比预期更清晰的脸部图�。
识别��的脸部
接下æ�¥ï¼Œæˆ‘们使用机器å¦ä¹ æ�¥è®©è®¡ç®—机能够识别è€�æ�¿çš„脸。
我们需è¦�以下三个æ¥éª¤ï¼š
1.收集图�
2.预处�图�
3.构建机器å¦ä¹ 模型
让我们�一�进行分�。
收集图�
首先,我需è¦�收集大é‡�的图åƒ�æ�¥è¿›è¡Œå¦ä¹ 。 作为一ç§�收集方法,我使用了以下资æº�:
•Google图片�索
•Facebook上的图�收集
•�摄视频
最�,我用网上�索和Facebook收集图�,但并没有收集到足够多的图�。 所以,我使用摄�机�摄视频,并将视频分解出大�的图�。
预处�图�
现在我有了足够多的é�¢éƒ¨å›¾åƒ�,但å¦ä¹ 模型ä¸�能直接对他们进行å¦ä¹ ã€‚è¿™æ˜¯å› ä¸ºå›¾åƒ�䏿œ‰å¤§é‡�与é�¢éƒ¨æ— 关的信æ�¯ã€‚所以我需è¦�先对图åƒ�进行脸部剪切。
我主è¦�使用ImageMagickæ�¥è¿›è¡Œè„¸éƒ¨æ��å�–。 通过使用ImageMagick我们å�¯ä»¥æ��å�–图åƒ�ä¸çš„é�¢éƒ¨éƒ¨åˆ†ã€‚
ImageMagick
我收集到的大��部图�如下:
也许我是这个世界上有我���部照片最多的人了,比他父�还多。
现在已ç»�准备好进行机器å¦ä¹ 了。
构建机器å¦ä¹ 模型
Keras用于建立已ç»�ç»�过å¦ä¹ çš„å�·ç§¯ç¥žç»�网络(CNN)。 TensorFlow用于Kerasçš„å�Žç«¯ã€‚ å¦‚æžœä½ å�ªè¯†åˆ«é�¢éƒ¨ï¼Œé‚£å°±å�¯ä»¥ç›´æŽ¥è°ƒç”¨Web API进行图åƒ�识别,例如Cognitive Servicesä¸çš„Computer Vision API。但是这次我决定自己æ�¥å®žçŽ°è¿™éƒ¨åˆ†ï¼Œå› ä¸ºè€ƒè™‘åˆ°ç³»ç»Ÿçš„å®žæ—¶æ€§ã€‚
网络具有以下架构。 使用Keras是é�žå¸¸æ–¹ä¾¿çš„ï¼Œå› ä¸ºå®ƒå�¯ä»¥è½»æ�¾åœ°è¾“出架构。
代ç �如下:
BossSensor/boss_train.py至æ¤ï¼Œç³»ç»Ÿå�¯ä»¥è¯†åˆ«å‡ºè€�æ�¿çš„é�¢éƒ¨äº†ã€‚
切��幕
现在,当å¦ä¹ 模型识别è€�æ�¿çš„脸,我需è¦�切æ�¢å±�幕。 在这个时候,让我们显示准备好的截å±�æ�¥å�‡è£…工作。
我是一个程�员,所以我准备了下�的图�。
我å�ªæ˜¾ç¤ºè¿™å¼ 图片。
由于我想以全å±�显示图åƒ�,所以使用了PyQt。 下é�¢æ˜¯ä»£ç �:
BossSensor/image_show.py
现在,一切都准备就绪。
完�的产�
一旦我们整�所有�用到的技术,我们就大功告�了。
“我的è€�æ�¿ç¦»å¼€äº†ä»–的座ä½�,他æ£åœ¨æŽ¥è¿‘我的座ä½�â€�
“OpenCVå·²ç»�检测到é�¢éƒ¨å¹¶å°†å›¾åƒ�输入到å¦ä¹ 模型ä¸ã€‚â€�
快切�!
æº�代ç �
ä½ å�¯ä»¥ä»Žä»¥ä¸‹é“¾æŽ¥ä¸‹è½½Boss Sensor:
BossSensor
结论
我结å�ˆäº†ä»ŽWeb相机的实时图åƒ�采集和é�¢éƒ¨è¯†åˆ«ä½¿ç”¨Kerasæ�¥è¯†åˆ«æˆ‘çš„è€�æ�¿å’Œåˆ‡æ�¢å±�幕。目å‰�,我用OpenCVæ�¥æ£€æµ‹é�¢éƒ¨ï¼Œä½†ç”±äºŽOpenCVä¸çš„é�¢éƒ¨æ£€æµ‹çš„准确性似乎ä¸�太好,我想å°�试使用Dlibæ�¥æ��高准确性。 å�¦å¤–,我还想试验一下我自己的é�¢éƒ¨æ£€æµ‹æ¨¡åž‹ã€‚最å�Žï¼Œç”±äºŽä»Žç½‘络摄åƒ�机获å�–的图åƒ�的识别精度ä¸�太好,我还想改进这个方é�¢ã€‚
æ–‡ç« åŽŸæ ‡é¢˜ã€ŠDeep Learning Enables You to Hide Screen when Your Boss is Approaching》,作者:HIRONSAN,译者:friday012