利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

jopen 7年前發布 | 13K 次閱讀 程序員

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

本文轉載自 51CTO(ID:weixin51CTO),作者:熊小妹。

如果上班的時候想放松一下,或者直說想偷偷懶,看點和工作無關的網頁,這時候萬一老板突然出現在背后,會不會感到很難堪呢?

有的瀏覽器設置了 boss 按鍵,手快的人還可以切換屏幕,不過總會顯得不自然,而且經常搞的手忙腳亂的。

一個日本程序員決定自己動手,編寫一個一勞永逸的辦法,我們來看看他是怎么實現的吧~

思路很直接:用網絡攝像頭自動識別在工位通道走過的人臉,如果確認是老板的話,就用一張寫滿了代碼的截圖覆蓋到整個屏幕上。

整個工程中應用了 Keras 深度學習框架來建立識別人臉的神經網絡,和一個網絡攝像頭用來捕捉老板的人臉。

任務是這樣的:

當老板接近我的工位時,電腦就會自動切換屏幕。

辦公室的情況如下:

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

從老板的座位到我的座位大約6~7 米,他會在離開座位后 4 到 5 秒鐘到達我的座位,因此,需要在這之前隱藏屏幕,所以時間比較緊迫。

策略:

首先需要讓電腦完成對老板面部的深度學習。然后在我的辦公桌上擺上一個網絡攝像頭,讓攝像頭對著通道,當網絡攝像頭捕捉到老板的臉時就切換屏幕。

嗯,這是一個完美的項目。先取一個好名字,就叫 Boss Sensor(老板探測器)好了。

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

Boss Sensor 的簡單結構圖如下:

處理過程分為三步:

  • 網絡攝像頭實時拍攝圖像

  • 學習模型檢測和識別所拍攝圖像的人臉

  • 如果識別結果是老板則切換屏幕

所需要的技術實現只有三項:

  • 拍攝人臉圖像

  • 識別人臉圖像

  • 切換屏幕

一步步完成之后整合就可以了。

拍攝人臉圖像

首先找一個網絡攝像頭,我用的是 BUFFALO BSW20KM11BK 攝像頭,大家隨便找個清晰度夠的就可以了。

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

最好不要用相機自帶的識別軟件裁剪人臉,因為后面的深度學習過程還需要處理。所以,我用 Python 和 OpenCV 編寫了一段裁剪人臉圖像的腳本,代碼在這里下載。

偷拍到的人臉圖像比我之前設想的更清楚▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

識別人臉圖像

接下來,要用機器學習教會電腦識別老板的臉。

我們需要以下三個步驟:

  • 采集圖像

  • 圖像預處理

  • 建立機器學習模型

讓我們一個接一個看一下。

采集圖像

首先,需要收集大量的圖片供電腦學習。一般來說有三種大量收集圖片的方法:

谷歌圖片搜索

非死book 的圖像采集

從視頻里截圖

一開始,我像電影里的特工一樣收集了各種搜索引擎上的老板照片,還有 非死book 上老板自己上傳的照片,但說實話,沒有收集到足夠的圖像。所以,反正老板就在身邊,我就簡單粗暴的拍攝了一段他的視頻,然后把視頻分解成大量的圖像。

圖像預處理

現在我有很多人臉圖像了,但還不能拿它們來建立學習模型,必須要裁剪掉與臉部不相關的部分。

我使用 ImageMagick 來提取人臉,你可以用別的圖像軟件來做。

總之,最后我收集了大量的人臉圖像,就像這樣: ▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

估計我是全世界擁有最多老板頭像的人了,肯定比他爸爸媽媽要多的多。

現在可以準備機器學習了。

建立機器學習模型

Keras 框架用來建立卷積神經網絡和神經網絡培訓。Tensorflow 用來寫 Keras 的后端。如果只識別臉部的話,可以調用一些 Web API 比如微軟的 Computer Vision API,但這次我決定自己來實現,因為這個項目需要確保實時性。

網絡體系結構大體如下,Keras 非常方便,它可以很輕松的輸出這樣的結構: ▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

代碼在這里下載。

至此,只要老板出現在攝像頭中,我就可以識別出他來了。

切換屏幕

最后一步,很簡單,學習模型識別出老板的臉之后,把電腦屏幕換掉就好了。

我是程序員,所以我準備了這樣一張圖:▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

電腦上只顯示這張圖片,這樣就可以假裝我在認真工作了。

這張圖需要全屏顯示,所以我調用了 PyQt 庫,代碼在這里下載。

一切工作都完成了。

成品

最后把分別實現的技術整合起來并驗證,真的成功了!

“現在老板離開了座位,正走向我的工位。”▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

“OpenCV 已經檢測出人臉,將人臉圖像發送給學習模型。”▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

“學習模型認出了他,屏幕自動切換。ヽ(‘ ?‘ )ノ”▼

利用深度學習開發老板探測器,再也不擔心一回頭突然看到老板了

這就是我的 Boss Sensor,全部的源碼都放在 github 上了,可以在這里下載。

總結

結合網絡攝像頭的實時圖像采集和 Keras 深度學習框架,確實可以完成人臉識別。

在實踐過程中,我發現 OpenCV 的圖像精度不夠高,雖然不影響識別,但我準備改用 Dlib 來提高精度,另外我想自己編寫人臉檢測訓練模型。

網絡攝像頭獲取的圖像不夠清晰,我準備換個攝像頭。

唉,坑還是越挖越深啊~

本文轉載自公眾號:51CTO (ID:weixin51CTO )  作者@熊小妹。

來自: 51CTO

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!