天天看點

人臉識别用哪種python庫_face_recognition使用:人臉識别開源python庫(face_recognition是基于dlib的深度學習人臉識别庫)...

face_recognition實作人臉識别的思路:

1.給定想要識别的人臉的圖檔并對其進行編碼(每個人隻需要一張),并将這些不同的人臉編碼建構成一個清單。編碼其實就是将人臉圖檔映射成一個128維的特征向量。

2.opencv讀取視訊并循環每一幀圖檔,每一幀圖檔編碼後的128維特征向量與前面輸入的人臉庫編碼清單裡的每個向量內積來衡量相似度,根據門檻值來計算是否是同一個人。

3.對識别出來的人臉打标簽。

實作的思路是采用HOG方法檢測輸入圖像中的人臉。雖然使用卷積神經網絡(CNN)或方向梯度直方圖(HOG)方法在量化面部之前(對面部編碼)都可以檢測輸入圖像中的人臉。CNN方法更準确(但更慢),而HOG方法更快(但不太準确)。雖然CNN臉檢測更準确,但在沒有GPU運作實時檢測速度太慢。

具體代碼分析:

(1)輸入圖檔,建構想要識别的一個人臉庫,然後對其編碼,建構人臉編碼清單。

(2)opencv循環讀取視訊中的每一幀圖像,對其編碼,與前面的人臉庫編碼的特征向量一一内積來确定相似讀,根據門檻值确定是否是同一張臉。

(3)給識别出的人臉貼上标簽,在每一幀圖像上顯示出來。

一些函數:(1)face_locations函數得到人臉的位置,傳回的結構是一個list,每個人臉是一個tuple存儲,分别代表框住人臉的矩形中左上角和右下角的坐标(x1,y1,x2,y2)。這裡例子隻有一個人臉是以隻有一個tuple。另外face_recognition讀入函數load_image_file輸出圖像是rgb順序的,和opencv中bgr不一樣。

(2)known_image相當于已知人臉庫的圖像,unknown_image相當于待檢測的圖像,分别利用face_encodings函數來映射成一個向量,下圖可以看出每個人臉是一個128維的向量。最後利用兩個向量的内積來衡量相似度,compare_faces函數就是根據門檻值确認是否是同一人臉。上述函數都是支援多個人臉計算的。 另外compare_faces有個tolerance參數是控制門檻值的,tolerance值越低越嚴格,預設為0.6。

代碼網址為https://github.com/ageitgey/face_recognition

參考部落格:https://www.jianshu.com/p/d6de8c616523