付出這麼多努力就為了工作時開個小差?
好像是的……
AHOGRAMMER釋出了這樣一個名為“老闆感測器”的製作教程:
定義任務
這個程式的任務就是當老闆接近的時候,自動隱藏“工作不宜”視窗。
老闆和我的座位距離約6-7米,如果我在看“工作不宜”的東西,當老闆離開座位,有4-5秒的時間切換介面。
策略
1.用深度學習訓練一個模型,讓電腦能認出老闆的臉。
2.在桌上安裝一個攝像頭,當攝像頭捕捉到老闆的臉,讓電腦自動隱藏“工作不宜”視窗。
老闆探測器的系統架構如下:
- Camera:一個實時捕捉影像的攝像頭。
- Recognize:一個訓練過的模型,能識別面部特徵。
- Hide Screen:如果識別的結果是老闆,隱藏“工作不宜”視窗。
因此,這個系統需要以下能力:
- 拍攝臉部照片
- 識別臉部照片
- 切換電腦視窗
拍攝臉部照片
我選擇了BUFFALO BSW20KM11BK攝像頭。
攝像頭有自帶的拍照程式,但是考慮到後續的處理,需要在拍照時自動切出臉部圖片,因此我選擇用了Python和OpenCV來拍照。
得到的臉部照片質量比我預想的要好。
識別老闆的臉
接下來,我們用機器學習演算法讓計算機認出老闆的臉。分為以下三步:
- 收集圖片
- 處理圖片
- 建立機器學習模型
讓我們一步一步來看。
收集圖片
首先,我們需要收集大量照片供演算法學習,我用下面的收集方法:
- Google圖片搜尋
- Facebook上的相簿
- 拍視訊
起初,我通過網路搜尋和Facebook收集了圖片,但是數量不夠,於是我又拍攝了視訊,然後轉換成大量的圖片。
處理圖片
我們收集了大量包括人臉的圖片,但是學習演算法還不能直接用,因為圖片裡包含太多不是人臉的部分。因此,我們需要把臉部剪下出來。
我主要用ImageMagick來做臉部提取的工作,得到了下面這些臉部照片:
現在可以開始學習了。
建立機器學習模型
我們用Keras來建立卷積神經網路(CNN),然後用TensorFlow來做它的後端。如果你只想識別人臉,可以用Computer Vision API等影像識別的Web API。但是這次我決定自己寫一個實時的識別。
這個網路的架構如下:
現在,當老闆出現在攝像頭範圍內,就能自動被識別出來了。
切換電腦視窗
現在,當訓練過的模型識別出老闆的臉,我們需要切換視窗來假裝工作:作為一個程式設計師,我選擇切換到這張圖片:
我用PyQt來全屏展示這張圖片。
試用效果
老闆離開座位:
視窗自動切換到假裝工作的圖片啦ヽ(‘ ∇‘ )ノ ワーイ
作者 | HIRONSAN @ AHOGRAMMER編譯 | 夏乙 @ AI100
題圖來自Unsplash