1. 程式人生 > >碉堡了!程式設計師用深度學習寫了個老闆探測器(附原始碼)

碉堡了!程式設計師用深度學習寫了個老闆探測器(附原始碼)

筆者介紹:姜雪偉IT公司技術合夥人,IT高階講師,CSDN社群專家,特邀編輯,暢銷書作者,國家專利發明人;已出版書籍:《手把手教你架構3D遊戲引擎》電子工業出版社和《實戰核心技術詳解》電子工業出版社等。

當今,人工智慧和深度學習得到了快速發展,由於大資料的存在,它的發展也變的順利成章了,很多以前在研究院或者是大學實驗室的研究人員加入到了擁有大資料的公司,人工智慧演算法的開源使得進入這一行業的門檻降低了,擁有大資料的公司在這方面佔的一席之地。在此也建議想投入人工智慧或者深度學習的公司最好考慮進入擁有大資料的公司,這也是深度學習和人工智慧賴以生存的土壤。下面給讀者介紹一篇利用深度學習寫的探測老闆的探測器並且附有原始碼可以直接編譯執行,值得借鑑。

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

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

一個日本程式設計師決定自己動手,編寫一個一勞永逸的辦法,我們來看看他是怎麼實現的吧~

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

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


任務是這樣的

當老闆接近我的工位時,電腦就會自動切換螢幕

辦公室的情況如下:


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


策略

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


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


Boss Sensor的簡單結構圖如下:


處理過程分為三步:

  • 網路攝像頭實時拍攝影象

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

  • 如果識別結果是老闆則切換螢幕

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

  • 拍攝人臉影象

  • 識別人臉影象

  • 切換螢幕

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

拍攝人臉影象

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


最好不要用相機自帶的識別軟體裁剪人臉,因為後面的深度學習過程還需要處理。所以,我用Python和OpenCV編寫了一段裁剪人臉影象的指令碼,程式碼在這裡下載:

偷拍到的人臉影象比我之前設想的更清楚


識別人臉影象

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

我們需要以下三個步驟:

  • 採集影象

  • 影象預處理

  • 建立機器學習模型

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

採集影象

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

  • 谷歌圖片搜尋

  • Facebook的影象採集

  • 從視訊裡截圖

一開始,我像電影裡的特工一樣收集了各種搜尋引擎上的老闆照片,還有Facebook上老闆自己上傳的照片,但說實話,沒有收集到足夠的影象。所以,反正老闆就在身邊,我就簡單粗暴的拍攝了一段他的視訊,然後把視訊分解成大量的影象。

影象預處理

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

我使用ImageMagick來提取人臉,你可以用別的影象軟體來做。

總之,最後我收集了大量的人臉影象,就像這樣:


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

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

建立機器學習模型

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

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


程式碼在這裡下載:

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

切換螢幕

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

我是程式設計師,所以我準備了這樣一張圖:


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

這張圖需要全屏顯示,所以我呼叫了PyQt庫,程式碼在這裡下載:

一切工作都完成了。


成品

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

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


“OpenCV已經檢測出人臉,將人臉影象傳送給學習模型。”


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


這就是我的Boss Sensor,全部的原始碼都放在github上了,可以在這裡下載:

總結

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

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

網路攝像頭獲取的影象不夠清晰,我準備換個攝像頭。