1. 程式人生 > >人臉識別FaceNet+TensorFlow

人臉識別FaceNet+TensorFlow

數據集 pipeline gpu del mkdir 設置 bash util 實驗

一、本文目標

利用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使用(具體安裝方式不再贅述)。也可以直接在虛擬機的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,國內需要FQ才能下載,不FQ大概率可以搜索從國內某些網盤上下載。文件大約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的源碼和wifi:

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

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

人臉識別FaceNet+TensorFlow