0
本文作者: 林藠頭 | 2017-01-11 15:46 |
雷鋒網(wǎng)按:本文轉(zhuǎn)載自 51CTO(ID:weixin51CTO),作者:熊小妹。
如果上班的時(shí)候想放松一下,或者直說想偷偷懶,看點(diǎn)和工作無關(guān)的網(wǎng)頁,這時(shí)候萬一老板突然出現(xiàn)在背后,會不會感到很難堪呢?
有的瀏覽器設(shè)置了boss按鍵,手快的人還可以切換屏幕,不過總會顯得不自然,而且經(jīng)常搞的手忙腳亂的。
一個(gè)日本程序員決定自己動手,編寫一個(gè)一勞永逸的辦法,我們來看看他是怎么實(shí)現(xiàn)的吧~
思路很直接:用網(wǎng)絡(luò)攝像頭自動識別在工位通道走過的人臉,如果確認(rèn)是老板的話,就用一張寫滿了代碼的截圖覆蓋到整個(gè)屏幕上。
整個(gè)工程中應(yīng)用了Keras深度學(xué)習(xí)框架來建立識別人臉的神經(jīng)網(wǎng)絡(luò),和一個(gè)網(wǎng)絡(luò)攝像頭用來捕捉老板的人臉。
任務(wù)是這樣的:
當(dāng)老板接近我的工位時(shí),電腦就會自動切換屏幕。
辦公室的情況如下:
從老板的座位到我的座位大約6~7米,他會在離開座位后4到5秒鐘到達(dá)我的座位,因此,需要在這之前隱藏屏幕,所以時(shí)間比較緊迫。
首先需要讓電腦完成對老板面部的深度學(xué)習(xí)。然后在我的辦公桌上擺上一個(gè)網(wǎng)絡(luò)攝像頭,讓攝像頭對著通道,當(dāng)網(wǎng)絡(luò)攝像頭捕捉到老板的臉時(shí)就切換屏幕。
嗯,這是一個(gè)完美的項(xiàng)目。先取一個(gè)好名字,就叫Boss Sensor(老板探測器)好了。
Boss Sensor的簡單結(jié)構(gòu)圖如下:
處理過程分為三步:
網(wǎng)絡(luò)攝像頭實(shí)時(shí)拍攝圖像
學(xué)習(xí)模型檢測和識別所拍攝圖像的人臉
如果識別結(jié)果是老板則切換屏幕
所需要的技術(shù)實(shí)現(xiàn)只有三項(xiàng):
拍攝人臉圖像
識別人臉圖像
切換屏幕
一步步完成之后整合就可以了。
首先找一個(gè)網(wǎng)絡(luò)攝像頭,我用的是BUFFALO BSW20KM11BK攝像頭,大家隨便找個(gè)清晰度夠的就可以了。
最好不要用相機(jī)自帶的識別軟件裁剪人臉,因?yàn)楹竺娴纳疃葘W(xué)習(xí)過程還需要處理。所以,我用Python和OpenCV編寫了一段裁剪人臉圖像的腳本,代碼在這里下載。
偷拍到的人臉圖像比我之前設(shè)想的更清楚▼
識別人臉圖像
接下來,要用機(jī)器學(xué)習(xí)教會電腦識別老板的臉。
我們需要以下三個(gè)步驟:
采集圖像
圖像預(yù)處理
建立機(jī)器學(xué)習(xí)模型
讓我們一個(gè)接一個(gè)看一下。
采集圖像
首先,需要收集大量的圖片供電腦學(xué)習(xí)。一般來說有三種大量收集圖片的方法:
谷歌圖片搜索
Facebook的圖像采集
從視頻里截圖
一開始,我像電影里的特工一樣收集了各種搜索引擎上的老板照片,還有Facebook上老板自己上傳的照片,但說實(shí)話,沒有收集到足夠的圖像。所以,反正老板就在身邊,我就簡單粗暴的拍攝了一段他的視頻,然后把視頻分解成大量的圖像。
圖像預(yù)處理
現(xiàn)在我有很多人臉圖像了,但還不能拿它們來建立學(xué)習(xí)模型,必須要裁剪掉與臉部不相關(guān)的部分。
我使用ImageMagick來提取人臉,你可以用別的圖像軟件來做。
總之,最后我收集了大量的人臉圖像,就像這樣: ▼
估計(jì)我是全世界擁有最多老板頭像的人了,肯定比他爸爸媽媽要多的多。
現(xiàn)在可以準(zhǔn)備機(jī)器學(xué)習(xí)了。
Keras框架用來建立卷積神經(jīng)網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)培訓(xùn)。Tensorflow用來寫Keras的后端。如果只識別臉部的話,可以調(diào)用一些Web API比如微軟的Computer Vision API,但這次我決定自己來實(shí)現(xiàn),因?yàn)檫@個(gè)項(xiàng)目需要確保實(shí)時(shí)性。
網(wǎng)絡(luò)體系結(jié)構(gòu)大體如下,Keras非常方便,它可以很輕松的輸出這樣的結(jié)構(gòu): ▼
代碼在這里下載。
至此,只要老板出現(xiàn)在攝像頭中,我就可以識別出他來了。
最后一步,很簡單,學(xué)習(xí)模型識別出老板的臉之后,把電腦屏幕換掉就好了。
我是程序員,所以我準(zhǔn)備了這樣一張圖:▼
電腦上只顯示這張圖片,這樣就可以假裝我在認(rèn)真工作了。
這張圖需要全屏顯示,所以我調(diào)用了PyQt庫,代碼在這里下載。
一切工作都完成了。
最后把分別實(shí)現(xiàn)的技術(shù)整合起來并驗(yàn)證,真的成功了!
“現(xiàn)在老板離開了座位,正走向我的工位。”▼
“OpenCV已經(jīng)檢測出人臉,將人臉圖像發(fā)送給學(xué)習(xí)模型?!报?/p>
“學(xué)習(xí)模型認(rèn)出了他,屏幕自動切換。ヽ(‘ ?‘ )ノ”▼
這就是我的Boss Sensor,全部的源碼都放在github上了,可以在這里下載。
結(jié)合網(wǎng)絡(luò)攝像頭的實(shí)時(shí)圖像采集和Keras深度學(xué)習(xí)框架,確實(shí)可以完成人臉識別。
在實(shí)踐過程中,我發(fā)現(xiàn)OpenCV的圖像精度不夠高,雖然不影響識別,但我準(zhǔn)備改用Dlib來提高精度,另外我想自己編寫人臉檢測訓(xùn)練模型。
網(wǎng)絡(luò)攝像頭獲取的圖像不夠清晰,我準(zhǔn)備換個(gè)攝像頭。
唉,坑還是越挖越深啊~
本文轉(zhuǎn)載自公眾號:51CTO (ID:weixin51CTO ) 作者@熊小妹。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。