基于facenet的人脸识别

效果

up主:欣小萌 image

数据准备

  1. 可以使用爬虫爬取你需要的人脸图片数据,需要手动剔除没用图片
  2. 可以使用视频提取图片的方式。我采用bilibili下载视频,然后等时间间隔的切出几十张图片。尽量选择人脸出镜率高的up主。

视频切出图片的代码:/article/2020/3/12/77.html

image

下载facenet

去github上下载facenet,并且下载作者训练好的模型,如果模型下载不下来,我这有百度网盘地址。

开始训练

首先切换到你的工作环境(工作目录,虚拟环境等)。

目录文件介绍

  1. facenet-master/image_test 该目录为实验目录,用作对比人脸图片之间的欧氏距离,不重要。(1人脸对比.bat)用到了。

  2. facenet-master\src\data\people 该目录为人脸图片数据目录

  3. facenet-master\src\data\people_160 该目录为输出 160x160的头像目录

  4. facenet-master\src\models\20180402-114759 该目录为作者提供的模型目录,需要自己下载并且放在此处

1人脸对比.bat

用于对比人脸图片之间的差异程度。

python src/compare.py ^
src/models/20180402-114759 ^
image_test/0001.jpg ^
image_test/0002.jpg ^
image_test/0003.jpg ^
--gpu_memory_fraction 0.7
pause

2训练自己的人脸识别-人脸检测与人脸对齐.bat

align_dataset_mtcnn文件需要从facenet-master\src\align 目录下复制到 facenet-master\src 的目录下

python src/align_dataset_mtcnn.py ^
src/data/people ^
src/data/people_160 ^
--image_size 160 ^
--margin 32 ^
--random_order ^
--gpu_memory_fraction 0.7
pause

运行该批处理文件后会自动帮你把人脸图片中的人脸图抠出来并且以160x160像素保存。保存好后需要手动剔除一些没用的图片。

如果执行后报 imread,imresize等关于图片处理的错误。

原因:scipy新版本弃用了imread方法

解决:

from skimage.io import imread,imsave
from skimage.transform import resize,rotate

resize的时候记得改参数。

3训练自己的人脸识别-模型学习1.bat

python src/classifier.py ^
TRAIN src/data/people_160 ^
src/models/20180402-114759 ^
src/models/classifier.pkl
pause

4训练自己的人脸识别-模型学习2.bat

python src/classifier.py ^
CLASSIFY src/data/people_160 ^
src/models/20180402-114759 ^
src/models/classifier.pkl
pause

5训练自己的人脸识别-单张图效果验证.bat

python src/predict.py ^
src/data/test/ab.jpg ^
src/models/20180402-114759 ^
src/models/classifier.pkl ^
--gpu_memory_fraction 0.7
pause

6利用摄像头让电脑识别人脸.bat

python src/real_time_face_recognition.py
pause

测试

用电脑摄像头拍摄手机视频人脸来识别

up主:白醋 image

up主:何同学 image

观察特朗网:特朗普 image

up主:小叶哥 image

准确率

baicu: 0.993
 hetongxue: 0.902
 laofanqie: 0.854
 shougonggeng: 0.980
 trump: 0.962
 xiaoyege: 0.985
 xinxiaomeng: 0.979
 zhuyidan: 0.944