僅用 Python 和命令行就可以實(shí)現(xiàn)人臉識(shí)別的庫開源了。該庫使用 dlib 頂尖的深度學(xué)習(xí)人臉識(shí)別技術(shù)構(gòu)建,在戶外臉部檢測(cè)數(shù)據(jù)庫基準(zhǔn)(Labeled Faces in the Wild benchmark)上的準(zhǔn)確率高達(dá) 99.38%。
該項(xiàng)目是要構(gòu)建一款免費(fèi)、開源、實(shí)時(shí)、離線的網(wǎng)絡(luò) app,支持組織者使用人臉識(shí)別技術(shù)或二維碼識(shí)別所有受邀人員。
有了世界上最簡(jiǎn)單的人臉識(shí)別庫,使用 Python 或命令行,即可識(shí)別和控制人臉。
該庫使用 dlib 頂尖的深度學(xué)習(xí)人臉識(shí)別技術(shù)構(gòu)建,在戶外臉部檢測(cè)數(shù)據(jù)庫基準(zhǔn)(Labeled Faces in the Wild benchmark)上的準(zhǔn)確率高達(dá) 99.38%。
這也提供了一個(gè)簡(jiǎn)單的 face_recognition 命令行工具,你可以打開命令行中任意圖像文件夾,進(jìn)行人臉識(shí)別!
項(xiàng)目地址:https://github.com/ageitgey/face_recognition#face-recognition
特征
出圖片中的人臉
找出下面圖片中所有的人臉:
import face_recognition
找到并且控制圖像中的臉部特征
找到并勾勒出每個(gè)人的眼睛、鼻子、嘴和下巴。
import face_recognition
找出臉部特征對(duì)很多重要的事情都非常有用。但是你也可以用它來做一些「蠢事」,比如數(shù)字化妝(美圖):
識(shí)別圖片中的人臉
識(shí)別每張圖片中的人物。
import face_recognition
你甚至可以使用該庫和其他的 Python 庫執(zhí)行實(shí)時(shí)人臉識(shí)別:
此處可查看代碼示例:https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py
安裝要求:
-
Python 3+ 或 Python 2.7
-
macOS 或 Linux (Windows 未測(cè)試)
-
還可在樹莓派 2+上運(yùn)行(按照具體指令來安裝運(yùn)行:https://gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65)
-
預(yù)配置的 VM 圖像同樣可用。
使用pin3從pypi安裝這一模塊:
pip3 install face_recognition
重要提示:pip 嘗試編譯 dlib 依賴時(shí)很可能會(huì)遇到一些問題。如果遇到問題,前往該地址(https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf)從來源(而不是 pip)中安裝 dlib,從而修復(fù)該錯(cuò)誤。
手動(dòng)安裝 dlib 后,再次運(yùn)行 pip3 install face_recognition,完成安裝。
如果安裝方面還有問題,你還可以試試預(yù)配置的 VM(https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b)
用途
命令行界面
安裝 face_recognition 時(shí),你會(huì)得到一個(gè)名為 face_recognition 的簡(jiǎn)單命令行程序,該程序可用于識(shí)別照片或裝滿照片的文件夾中的人臉。
首先,你需要提供一個(gè)包含圖片的文件夾,且每張圖片中的每個(gè)人你都認(rèn)識(shí)。每個(gè)人有一個(gè)圖像文件,文件名就是圖片中人物的名字:
然后,你需要再建一個(gè)文件夾,包含你想要識(shí)別的圖像文件:
之后,你僅需要在已知人物文件夾和未知人物文件夾(或單個(gè)圖像)中運(yùn)行 face_recognition 命令,該程序會(huì)告訴你每個(gè)圖像中的人物是誰:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures//unknown_pictures/unknown.jpg,Barack Obama
每張人臉的輸出結(jié)果只有一行,由文件名和找到的人物名組成,中間用逗號(hào)分隔。
unknown_person 是未與已知人物文件夾中任何照片相匹配的人臉。
如果你只想知道每張照片中的人物姓名,不在意文件名,那么你可以采用以下做法:
如果你的電腦配有多核 CPU,你就可以同時(shí)執(zhí)行多個(gè)人臉識(shí)別任務(wù)。例如,如果你的系統(tǒng)有 4 個(gè) CPU 核,你可以同時(shí)使用這 4 個(gè) CPU 核,那么同樣時(shí)間內(nèi)處理的圖像數(shù)量是原來的四倍。
s你使用 Python 3.4 或更新的版本,傳入--cpus <number_of_cpu_cores_to_use>參數(shù):
$ face_recognition -cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
你還可以傳入--cpus -1,來使用系統(tǒng)中所有的 CPU 核。
Python 模塊
使用 face_recognition 模塊,幾行代碼輕松控制人臉,so easy!
API 文件地址:https://face-recognition.readthedocs.io
自動(dòng)定位圖像中人物的臉部特征
import face_recognition
圖像人臉識(shí)別
import face_recognition
注意事項(xiàng)
該人臉識(shí)別模型基于成年人照片訓(xùn)練,因此對(duì)兒童照片的識(shí)別效果不好。該模型默認(rèn)比較閾值是 0.6,容易混淆兒童的面部。
將該模型配置到云主機(jī)(Heroku、AWS 等)
face_recognition 賴以存在的 dlib 是用 C++語言寫的,因此將該內(nèi)置該模型的 app 配置到 Heroku 或 AWS 等云主機(jī)提供商就很復(fù)雜。在該 repo 中有一個(gè) Dockerfile 示例,展示如何在 Docker 容器中運(yùn)行內(nèi)置 face_recognition 模型的 app(詳見該網(wǎng)址:https://www.docker.com/)。參考該示例,您能夠?qū)⒃撃P团渲玫饺魏沃С?Docker 圖像的服務(wù)。
常見問題
問題:使用 face_recognition 或運(yùn)行樣本時(shí),出現(xiàn) Illegal instruction (core dumped)。
解決方案:dlib 需要在 SSE4 或 AVX 支持下編譯,但是你的 CPU 太舊,無法支持編譯。你需要根據(jù)此處(https://github.com/ageitgey/face_recognition/issues/11#issuecomment-287398611)所示修改代碼,然后對(duì) dilb 進(jìn)行重新編譯。
問題:運(yùn)行攝像頭樣本時(shí),出現(xiàn) RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
解決方案:你的攝像頭可能并未在 OpenCV 上正確設(shè)置。點(diǎn)擊此處(https://github.com/ageitgey/face_recognition/issues/21#issuecomment-287779524)了解更多。
問題:運(yùn)行 pip2 install face_recognition 時(shí)出現(xiàn) MemoryError。
解決方案:face_recognition_models 文件太大,不適合你可用的 pip 緩存內(nèi)存。試一下 pip2 --no-cache-dir install face_recognition,解決該問題。
問題:AttributeError: 'module' object has no attribute 'face_recognition_model_v1'
解決方案:你安裝的 dlib 版本過舊,需要 19.4 或者更新的版本。請(qǐng)升級(jí) dlib 版本。
問題:TypeError: imread() got an unexpected keyword argument 'mode'
解決方案:你安裝的 scipy 版本過舊,需要 0.17 或者更新的版本。請(qǐng)升級(jí) scipy 版本。