[face_recognition中文文檔] 第1節(jié) 人臉識別

Face Recognition人臉識別庫

這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。
該軟件包使用dlib中最先進的人臉識別深度學習算法擒抛,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%推汽。
它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作歧沪。

特征

在圖片中識別人臉

找到圖片中所有的人臉:


示例圖1
import face_recognition
image=face_recognition.load_image_file("your_file.jpg")
face_locations=face_recognition.face_locations(image)

找到并操作圖片中的臉部特征

獲得圖片中人類眼睛歹撒、鼻子、嘴诊胞、下巴的位置和輪廓:


示例圖2
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

找到臉部特征有很多超級有用的應用場景暖夭,當然你也可以把它用在最顯而易見的功能上:美顏功能 就像美圖秀秀那樣

示例圖3

鑒定圖片中的臉

識別圖片中的人是誰


示例圖4
import face_recognition
known_image=face_recognition.load_image_file("biden.jpg")
unknown_image=face_recognition.load_image_file("unknown.jpg")
biden_encoding=face_recognition.face_encodings(known_image)[0
]unknown_encoding=face_recognition.face_encodings(unknown_image)[0]
results=face_recognition.compare_faces([biden_encoding],unknown_encoding)

你甚至可以用這個軟件包做人臉的實時識別:


示例圖5

這里有一個實時識別的例子

安裝

環(huán)境要求:

  • Python3.3+或者Python2.7
  • MacOS或者Linux(Windows不做支持,但是你可以試試厢钧,也許也能運行)

安裝步驟

在Mac或Linux上安裝

首先鳞尔,確保你安裝了dlib,以及該軟件的Python綁定接口早直。如果沒有的話寥假,看這篇安裝說明:

然后,使用pip3(Python 2的pip2)從pypi安裝此模塊:

pip3 install face_recognition

如果你安裝遇到問題霞扬,可以試試這個安裝好了的虛擬機

在樹莓派2+上安裝

在Windows上安裝

雖然Windows不是官方支持的糕韧,但是有熱心網友寫出了一個Windows上的使用指南,請看這里:

使用已經配置好的虛擬機(支持VMWare和VirtualBox)

使用方法

命令行界面

如果你已經安裝了face_recognition萤彩,那么你的系統(tǒng)中已經有了一個名為face_recognition的命令,你可以使用它對圖片進行識別斧拍,或者對一個文件夾中的所有圖片進行識別雀扶。
首先你需要提供一個文件夾,里面是所有你希望系統(tǒng)認識的人的圖片肆汹。其中每個人一張圖片愚墓,圖片以人的名字命名:


示例圖6

接下來,你需要準備另一個文件夾昂勉,里面是你要識別的圖片:


示例圖7

然后你就可以運行face_recognition命令了浪册,把剛剛準備的兩個文件夾作為參數(shù)傳入,命令就會返回需要識別的圖片中都出現(xiàn)了誰:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

輸出中岗照,識別到的每張臉都單獨占一行村象,輸出格式為<圖片名稱>,<人名>。
unknown_person 是一個與你的文件夾的已知人圖像不匹配的人物攒至。

調整公差/靈敏度

如果你正在為同一個人獲得多個比較厚者,那可能就是這樣您的照片中的人看起來非常相似,容差值較低需要使臉部比較更嚴格迫吐。
你可以用--tolerance參數(shù)來做到這一點库菲。默認容差值為0.6,較低的數(shù)字使臉部比較更嚴格:

$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person

如果要按順序查看每次計算出的面距要調整公差設置渠抹,可以使用:--show-distancetrue

$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/

/unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785
/face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None

更多例子

如果你只想知道每張照片中的人的名字蝙昙,但不要關心文件名,你可以這樣做:

$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2

Barack Obama
unknown_person

加快人臉識別

如果您有多個CPU內核的電腦梧却,則可以并行完成臉部識別奇颠。例如,如果您的系統(tǒng)有4個CPU內核放航,您可以通過使用在相同的時間量內所有的CPU內核并行處理約4倍的圖像烈拒。
如果您使用的是Python 3.4或更新版本,請傳入參數(shù):--cpus <number_of_cpu_cores_to_use> parameter:

$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/

您還可以傳入使用系統(tǒng)中的所有CPU內核广鳍。--cpus-1

Python模塊

你可以通過導入face_recognition模塊來使用它荆几,使用方式超級簡單,文檔在這里API文件

自動找到圖片中所有的臉

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image)

# face_locations is now an array listing the co-ordinates of each face!

看看這個例子自己實踐一下赊时,試試看吨铸。

你還可以自定義替換人類識別的深度學習模型。

注意:想獲得比較好的性能的話祖秒,你可能需要GPU加速(使用英偉達的CUDA庫)诞吱。所以編譯的時候你也需要開啟dlib的GPU加速選項。

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_locations = face_recognition.face_locations(image, model="cnn")

# face_locations is now an array listing the co-ordinates of each face!

你也可以通過這個例子實踐一下竭缝,試試看房维。

如果你有很多圖片和GPU,你也可以并行快速識別抬纸,看這篇文章咙俩。

自動識別人臉特征

import face_recognition

image = face_recognition.load_image_file("my_picture.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

# face_landmarks_list is now an array with the locations of each facial feature in each face.
# face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.

試試這個例子,試試看湿故。

識別人臉鑒定是哪個人

import face_recognition

picture_of_me = face_recognition.load_image_file("me.jpg")
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]

# my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face!

unknown_picture = face_recognition.load_image_file("unknown.jpg")
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]

# Now we can see the two face encodings are of the same person with `compare_faces`!

results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding)

if results[0] == True:
    print("It's a picture of me!")
else:
    print("It's not a picture of me!")

這里是一個例子阿趁,試試看。

Python代碼示例

所有的例子都在這里晓锻。

人臉檢測

面部特征

面部識別

人臉識別如何運作

如果你想了解臉部位置和識別如何工作砚哆,而不是取決于黑匣子庫独撇,請閱讀我的文章

注意事項

  • 面部識別模型是針對成年人進行培訓的躁锁,對兒童的工作效果不佳纷铣。它傾向于使用默認比較閾值0.6來混合孩子很容易。

部署到云端主機(Heroku战转,AWS等)

由于face_recognition取決于使用dlibC ++編寫的內容搜立,將其用于云端托管服務商,如Heroku或AWS 部署應用程序可能很棘手槐秧。
為了使事情更容易啄踊,這個repo中有一個Dockerfile示例忧设,顯示如何在Docker容器中運行一個構建的應用程序face_recognition。因此颠通,您應該可以部署支持Docker圖像的任何服務址晕。

常見問題

問題:使用face_recognition或運行示例時出現(xiàn) Illegal instruction(coredumped)
解決方案:dlib使用SSE4或AVX進行編譯,但您的CPU太舊顿锰,不支持谨垃。
您需要更改dlib代碼后重新編譯這里概述代碼更改
問題:運行攝像頭示例時出現(xiàn)RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
解決方案:您的網絡攝像機可能未正確使用OpenCV設置硼控。在這里尋找更多幫助刘陶。
問題:運行pip2 install face_recognition時出現(xiàn)MemoryError
解決方案:face_recognition_models文件對于可用的緩存內存來說太大了。嘗試使用以下方法pip2 --no-cache-dir install face_recognition來盡量避免這個問題牢撼。
問題:AttributeError: 'module' object has no attribute 'face_recognition_model_v1'
解決方案:dlib您安裝的版本太舊了匙隔。您需要19.7或更新版本。升級dlib熏版。
問題:AttributeError: 'Module' object has no attribute 'cnn_face_detection_model_v1'
解決方案:dlib您安裝的版本太舊了牡直。您需要19.7或更新版本。升級dlib纳决。
問題:TypeError: imread() got an unexpected keyword argument 'mode'
解決方案:scipy您安裝的版本太舊了碰逸。您需要版本0.17或更新版本。升級scipy阔加。

謝謝

  • 非常感謝戴維斯·金@nulhom)創(chuàng)建dlib并提供訓練有素的面部特征檢測和此庫中使用的臉部編碼模型饵史。有關ResNet上有關面部編碼的更多信息,請查看他的博文胜榔。
  • 感謝所有在Python數(shù)據(jù)科學圖書館工作的所有人胳喷,如data,scipy夭织,scikit-image吭露,pillow等,使得這種東西在Python中如此簡單而有趣尊惰。
  • 感謝Cookiecutteraudreyr / cookiecutter-pypackage項目模板讲竿,使Python項目打包方式更有效率。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末弄屡,一起剝皮案震驚了整個濱河市题禀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膀捷,老刑警劉巖迈嘹,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡秀仲,警方通過查閱死者的電腦和手機融痛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神僵,“玉大人酌心,你說我怎么就攤上這事√敉悖” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵墩崩,是天一觀的道長氓英。 經常有香客問我,道長鹦筹,這世上最難降的妖魔是什么铝阐? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮铐拐,結果婚禮上徘键,老公的妹妹穿的比我還像新娘。我一直安慰自己遍蟋,他們只是感情好吹害,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虚青,像睡著了一般它呀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棒厘,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天纵穿,我揣著相機與錄音,去河邊找鬼奢人。 笑死谓媒,一個胖子當著我的面吹牛,可吹牛的內容都是我干的何乎。 我是一名探鬼主播句惯,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼支救!你這毒婦竟也來了宗弯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤搂妻,失蹤者是張志新(化名)和其女友劉穎蒙保,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欲主,經...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡邓厕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年逝嚎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片详恼。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡补君,死狀恐怖,靈堂內的尸體忽然破棺而出昧互,到底是詐尸還是另有隱情挽铁,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布敞掘,位于F島的核電站叽掘,受9級特大地震影響,放射性物質發(fā)生泄漏玖雁。R本人自食惡果不足惜更扁,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赫冬。 院中可真熱鬧浓镜,春花似錦、人聲如沸劲厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽补鼻。三九已至相叁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辽幌,已是汗流浹背增淹。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留乌企,地道東北人虑润。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像加酵,于是被迫代替她去往敵國和親拳喻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內容