人臉識別FaceNet+TensorFlow


 一、本文目標

利用facenet源碼實現從攝像頭讀取視頻,實時檢測並識別視頻中的人臉。換句話說:把facenet源碼中contributed目錄下的real_time_face_recognition.py運行起來。

二、需要具備的條件

1、准備好的Tensorflow環境

2、攝像頭(可用視頻文件替代)

3、准備好的facenet源碼並安裝依賴包

4、訓練好的人臉檢測模型

5、訓練好的人臉識別分類模型

三、准備工作

1、搭建Tensorflow環境

如何編譯搭建見《Ubuntu16.04+TensorFlowr1.12環境搭建指南》。

2、准備攝像頭

如果使用虛擬機,首先確保攝像頭連接的虛擬機,連接方式見下圖:

 

攝像頭連接的虛擬機成功后,在/dev目錄下會看到video0文件,需要確保當前用戶有攝像頭的訪問權限:

sudo chown jack:jack /dev/video0

如果沒有攝像頭,可用視頻文件替代,只需將real_time_face_recognition.py中

video_capture = cv2.VideoCapture(0)

這行代碼替換為:

video_capture = cv2.VideoCapture(VIDEOPATH)

事實上,在虛擬上使用攝像頭做實時視頻流的人臉識別,很可能會出現“select timeout”錯誤,這是由於CPU的處理能力不知導致,這時也可以用視頻來替代攝像頭來進行實驗。

建議在HOST上安裝xshell+xmanager來訪問虛擬機,顯示人臉檢查的視頻窗口建議xmanager配合xshell使用(具體安裝方式不再贅述,使用XShell建立連接時,設置連接屬性,在 SSH --> tunneling 選項下勾選 Forward X11 connections to: Xmanager)。也可以直接在虛擬機的terminal中運行real_time_face_recognition.py,而無需安裝xmanager。

3、准備好的facenet源碼並安裝依賴包

(1)下載源碼

cd /data

git clone https://github.com/davidsandberg/facenet.git

cd facenet

(2)設置PYTHONPATH

sudo vi ~/.bashrc

在文件最后添加:

export PYTHONPATH =/data/facenet/src

source ~/.bashrc

(3)安裝依賴包

workon tfenv

pip install -U –-upgrade pip

pip install -U h5py matplotlib==2.2.3 Pillow requests psutil opencv-python

(4)准備源碼

為了跟tensorflow r1.12兼容,需要需要facenet.py源碼中

create_input_pipeline函數,在函數的第一行添加

with tf.name_scope("tempscope"):

添加后,別忘了后面的代碼縮進哦。

4、准備人臉檢測模型

直接從https://drive.google.com/file/d/1EXPBSXwTaqrSC0OhUdXNmKSh9qJUQ55-/view下載已經訓練好的模型20180402-114759,國內需要翻牆才能下載,不翻牆大概率可以搜索從國內某些網盤上下載。文件大約4GB,建議用迅雷等工具下載。文件解壓到/data/models目錄,解壓后文件如下:

20180402-114759.pb

model-20180402-114759.ckpt-275.data-00000-of-00001

model-20180402-114759.ckpt-275.index

model-20180402-114759.meta

5、訓練人臉識別分類模型

(1)從http://vis-www.cs.umass.edu/lfw/lfw.tgz下載LFW數據集到/data/datasets目錄

cd /data/datasets

mkdir -p lfw/raw

tar xvf lfw.tgz -C lfw/raw --strip-components=1

(2) 訓練分類模型

 對齊LFW 數據集:

workon tfenv

cd /data/facenet

for N in {1..4}; do \

python src/align/align_dataset_mtcnn.py \

/data/datasets/lfw/raw \

/data/datasets/lfw/lfw_mtcnnpy_160 \

--image_size 160 \

--margin 32 \

--random_order \

--gpu_memory_fraction 0.25 \

& done

訓練分類模型:

python src/classifier.py TRAIN \

/data/datasets/lfw/lfw_mtcnnpy_160 \

/data/models/20180402-114759/20180402-114759.pb \

/data/models/lfw_classifier.pkl \

--batch_size 1000 \

--min_nrof_images_per_class 40 \

--nrof_train_images_per_class 35 \

--use_split_dataset

四、運行人臉識別

配置檢測模型和分類模型,修改face.py文件

facenet_model_checkpoint = os.path.dirname(__file__) + "/../model_checkpoints/20170512-110547"

classifier_model = os.path.dirname(__file__) + "/../model_checkpoints/my_classifier_1.pkl"

為:

facenet_model_checkpoint = "/data/models/20180402-114759"

classifier_model ="/data/models/lfw_classifier.pkl"

運行人臉識別代碼了!祝你好運!

workon tfenv

cd /data/facenet/contributed

python real_time_face_recognition.py

如果順利的話,應該看到小視頻窗口了,人臉會被框出來,並在旁邊顯示識別的人名。

到這里,FaceNet人臉識別的“hello world”算是實現了,對於人臉檢測、人臉識別、性別識別、情感識別、年齡識別、embedding提取、landmark提取,人臉對齊,並在生產實踐中應用,這僅僅是第一步。

上面識別出的人名肯定是不准確的,這是為什么呢?算是留下的思考題,大家自己動手試試,讓上面的人臉識別准確。推薦研讀facenet的源碼和wifi:

https://github.com/davidsandberg/facenet/

https://github.com/davidsandberg/facenet/wiki

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM