前言
很多人都認(rèn)為人臉識別是一項非常難以實現(xiàn)的工作,看到名字就害怕,然后心懷忐忑到網(wǎng)上一搜,看到網(wǎng)上N頁的教程立馬就放棄了。這些人里包括曾經(jīng)的我自己。其實如果如果你不是非要深究其中的原理,只是要實現(xiàn)這一工作的話,人臉識別也沒那么難。今天我們就來看看如何在40行代碼以內(nèi)簡單地實現(xiàn)人臉識別。
一點區(qū)分
對于大部分人來說,區(qū)分人臉檢測和人臉識別完全不是問題。但是網(wǎng)上有很多教程有無無意地把人臉檢測說成是人臉識別,誤導(dǎo)群眾,造成一些人認(rèn)為二者是相同的。其實,人臉檢測解決的問題是確定一張圖上有木有人臉,而人臉識別解決的問題是這個臉是誰的。可以說人臉檢測是是人識別的前期工作。今天我們要做的是人臉識別。
所用工具
Anaconda 2——Python 2
Dlib
scikit-image
Dlib
對于今天要用到的主要工具,還是有必要多說幾句的。Dlib是基于現(xiàn)代C++的一個跨平臺通用的框架,作者非常勤奮,一直在保持更新。Dlib內(nèi)容涵蓋機器學(xué)習(xí)、圖像處理、數(shù)值算法、數(shù)據(jù)壓縮等等,涉獵甚廣。更重要的是,Dlib的文檔非常完善,例子非常豐富。就像很多庫一樣,Dlib也提供了Python的接口,安裝非常簡單,用pip只需要一句即可:
pip install dlib
上面需要用到的scikit-image同樣只是需要這么一句:
pip install scikit-image
注:如果用pip install dlib安裝失敗的話,那安裝起來就比較麻煩了。錯誤提示很詳細(xì),按照錯誤提示一步步走就行了。
人臉識別
之所以用Dlib來實現(xiàn)人臉識別,是因為它已經(jīng)替我們做好了絕大部分的工作,我們只需要去調(diào)用就行了。Dlib里面有人臉檢測器,有訓(xùn)練好的人臉關(guān)鍵點檢測器,也有訓(xùn)練好的人臉識別模型。今天我們主要目的是實現(xiàn),而不是深究原理。感興趣的同學(xué)可以到官網(wǎng)查看源碼以及實現(xiàn)的參考文獻。今天的例子既然代碼不超過40行,其實是沒啥難度的。有難度的東西都在源碼和論文里。
首先先通過文件樹看一下今天需要用到的東西:
準(zhǔn)備了六個候選人的圖片放在candidate-faces文件夾中,然后需要識別的人臉圖片test.jpg。我們的工作就是要檢測到test.jpg中的人臉,然后判斷她到底是候選人中的誰。另外的girl-face-rec.py
是我們的python腳本。shape_predictor_68_face_landmarks.dat
是已經(jīng)訓(xùn)練好的人臉關(guān)鍵點檢測器。dlib_face_recognition_resnet_model_v1.dat
是訓(xùn)練好的ResNet人臉識別模型。ResNet是何凱明在微軟的時候提出的深度殘差網(wǎng)絡(luò),獲得了 ImageNet 2015 冠軍,通過讓網(wǎng)絡(luò)對殘差進行學(xué)習(xí),在深度和精度上做到了比
新聞熱點
疑難解答
圖片精選