天天看點

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

版權聲明:本文為部落客原創文章,轉載請聯系作者取得授權。

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#40%E8%A1%8C%E4%BB%A3%E7%A0%81%E7%9A%84%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%AE%9E%E8%B7%B5" target="_blank">40行代碼的人臉識别實踐</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#%E5%89%8D%E8%A8%80" target="_blank">前言</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#%E4%B8%80%E7%82%B9%E5%8C%BA%E5%88%86" target="_blank">一點區分</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#%E6%89%80%E7%94%A8%E5%B7%A5%E5%85%B7" target="_blank">所用工具</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#dlib" target="_blank">Dlib</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB" target="_blank">人臉識别</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#1-%E5%89%8D%E6%9C%9F%E5%87%86%E5%A4%87" target="_blank">前期準備</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#2%E8%AF%86%E5%88%AB%E6%B5%81%E7%A8%8B" target="_blank">識别流程</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#3%E4%BB%A3%E7%A0%81" target="_blank">代碼</a>

<a href="http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend#4%E8%BF%90%E8%A1%8C%E7%BB%93%E6%9E%9C" target="_blank">運作結果</a>

很多人都認為人臉識别是一項非常難以實作的工作,看到名字就害怕,然後心懷忐忑到網上一搜,看到網上N頁的教程立馬就放棄了。這些人裡包括曾經的我自己。其實如果如果你不是非要深究其中的原理,隻是要實作這一工作的話,人臉識别也沒那麼難。今天我們就來看看如何在40行代碼以内簡單地實作人臉識别。

對于大部分人來說,區分人臉檢測和人臉識别完全不是問題。但是網上有很多教程有無無意地把人臉檢測說成是人臉識别,誤導群衆,造成一些人認為二者是相同的。其實,人臉檢測解決的問題是确定一張圖上有木有人臉,而人臉識别解決的問題是這個臉是誰的。可以說人臉檢測是是人識别的前期工作。今天我們要做的是人臉識别。

<code>Dlib</code>

<code>scikit-image</code>

<code>pip install dlib</code>

上面需要用到的<code>scikit-image</code>同樣隻是需要這麼一句:

<code>pip install scikit-image</code>

注:如果用<code>pip install dlib</code>安裝失敗的話,那安裝起來就比較麻煩了。錯誤提示很詳細,按照錯誤提示一步步走就行了。

之是以用Dlib來實作人臉識别,是因為它已經替我們做好了絕大部分的工作,我們隻需要去調用就行了。Dlib裡面有人臉檢測器,有訓練好的人臉關鍵點檢測器,也有訓練好的人臉識别模型。今天我們主要目的是實作,而不是深究原理。感興趣的同學可以到官網檢視源碼以及實作的參考文獻。今天的例子既然代碼不超過40行,其實是沒啥難度的。有難度的東西都在源碼和論文裡。

首先先通過檔案樹看一下今天需要用到的東西:

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

準備了六個候選人的圖檔放在<code>candidate-faces</code>檔案夾中,然後需要識别的人臉圖檔<code>test.jpg</code>。我們的工作就是要檢測到<code>test.jpg</code>中的人臉,然後判斷她到底是候選人中的誰。另外的<code>girl-face-rec.py</code>是我們的python腳本。<code>shape_predictor_68_face_landmarks.dat</code>是已經訓練好的人臉關鍵點檢測器。<code>dlib_face_recognition_resnet_model_v1.dat</code>是訓練好的ResNet人臉識别模型。ResNet是何凱明在微軟的時候提出的深度殘差網絡,獲得了 ImageNet 2015 冠軍,通過讓網絡對殘差進行學習,在深度和精度上做到了比

CNN 更加強大。

然後準備幾個人的人臉圖檔作為候選人臉,最好是正臉。放到<code>candidate-faces</code>檔案夾中。

本文這裡準備的是六張圖檔,如下:

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

她們分别是

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

然後準備四張需要識别的人臉圖像,其實一張就夠了,這裡隻是要看看不同的情況:

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

可以看到前兩張和候選檔案中的本人看起來還是差别不小的,第三張是候選人中的原圖,第四張圖檔微微側臉,而且右側有陰影。

資料準備完畢,接下來就是代碼了。識别的大緻流程是這樣的:

先對候選人進行人臉檢測、關鍵點提取、描述子生成後,把候選人描述子儲存起來。

然後對測試人臉進行人臉檢測、關鍵點提取、描述子生成。

最後求測試圖像人臉描述子和候選人臉描述子之間的歐氏距離,距離最小者判定為同一個人。

代碼不做過多解釋,因為已經注釋的非常完善了。以下是<code>girl-face-rec.py</code>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 7482 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 11

我們在<code>.py</code>所在的檔案夾下打開指令行,運作如下指令

<code>python girl-face-rec.py 1.dat 2.dat ./candidate-faecs test1.jpg</code>

由于<code>shape_predictor_68_face_landmarks.dat</code>和<code>dlib_face_recognition_resnet_model_v1.dat</code>名字實在太長,是以我把它們重命名為<code>1.dat</code>和<code>2.dat</code>。

運作結果如下:

<code>The person is Bingbing</code>。

這裡需要說明的是,前三張圖輸出結果都是非常理想的。但是第四張測試圖檔的輸出結果是候選人4。對比一下兩張圖檔可以很容易發現混淆的原因。

有興趣的同學可以繼續深入研究如何提升識别的準确率。比如每個人的候選圖檔用多張,然後對比和每個人距離的平均值之類的。全憑自己了。

40行代碼的人臉識别實踐【轉】 40行代碼的人臉識别實踐

【新浪微網誌】 張昺華--sky

【twitter】 @sky2030_

【facebook】 張昺華 zhangbinghua

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利.

繼續閱讀