deepface--python包人脸识别的使用
- 介绍
- 安装
- 人脸检测和对齐
- 人脸特征表示
- 特征向量验证
- 所需权重位置
介绍 deepface
是一个轻量级的python人脸识别和人脸属性分析(年龄、性别、情感和种族)框架。混合了多种模型:VGG-Face,Google FaceNet,OpenFace,Facebook DeepFace,DeepID,ArcFace和Dlib。该库主要基于 Keras 和 TensorFlow。
人脸识别流程由 4 个常见阶段组成:人脸检测、人脸对齐、人脸特征表示和特征向量验证。Deepface 在后台处理所有这些常见阶段。您只需使用一行代码即可调用其验证、查找或分析功能。
本文只介绍人脸识别,不介绍人脸属性分析。
安装
pip install deepface
注意: 其需要以下包:
numpy>=1.14.0
pandas>=0.23.4
gdown>=3.10.1
tqdm>=4.30.0
Pillow>=5.2.0
opencv-python>=4.2.0.34
opencv-contrib-python>=4.3.0.36
tensorflow>=1.9.0
keras>=2.2.0
Flask>=1.1.2
mtcnn>=0.1.0
lightgbm>=2.3.1
dlib>=19.20.0
retina-face>=0.0.1
人脸检测和对齐 可选的检测方法:
opencv
,ssd
,dlib
,mtcnn
,retinaface
,默认使用的是opencv,#人脸检测和对齐
from deepface import DeepFace
detected_face = DeepFace.detectFace("img.jpg", detector_backend = "opencv",enforce_detection = True, align = True)
mtcnn
,retinaface
的人脸检测效果要比opencv
,ssd
要好,但是opencv
,ssd
检测速度快。人脸特征表示 depface中可以使用的人脸识别特征提取模型有:
VGG-Face
, Facenet
, Facenet512
, OpenFace
, DeepFace
, DeepID
, ArcFace
, Dlib
。Facenet
,VGG-Face
,ArcFace
,Dlib
要比 OpenFace
,DeepID
,DeepFace
效果好,但是模型大小有的要大一些。用deepface提供的函数来提取人脸特征:
from deepface import DeepFace
facerep = DeepFace.represent(img_path, model_name = 'VGG-Face', model = None, enforce_detection = True, detector_backend = 'opencv', align = True, normalization = 'base')
这些模型具有不同的输入和输出形状,例如
VGG-Face
需要(224,224,3)的输入形状,输出2622维向量。而Facenet
需要(160,160,3)的输入,输出128维向量。可以用下面的代码查看输入形状。
from deepface.basemodels import VGGFace
model = VGGFace.loadModel()
input_shape = model.layers[0].input_shape[0][1:3]
用下面的代码查看输出形状。
from deepface.basemodels import VGGFace
model = VGGFace.loadModel()
out_size = model.layers[-1].input_shape[-1]
直接用模型提取人脸特征如下:
from deepface.commons import functions
from deepface.basemodels import VGGFace
model = VGGFace.loadModel()
img = functions.preprocess_face(img, target_size=(224, 224), grayscale = False, enforce_detection = True, detector_backend = 'opencv', return_region = False, align = True)
facerep = model.predict(img)[0,:]
可以用数据库存储人脸特征向量,新检测的人脸用同样的方法提取特征后直接与数据库中的人脸向量一一比较并确认身份。
特征向量验证 【人脸识别|deepface使用】deepface特征向量验证时的距离指标有:
cosine
,euclidean
,euclidean_l2
。当使用DeepFace里的
verify
函数会对两张图片进行人脸检测并对齐,然后提取特征向量并验证距离。from deepface import DeepFace
result = DeepFace.verify(img1_path, img2_path = '', model_name = 'VGG-Face', distance_metric = 'cosine', model = None, enforce_detection = True, detector_backend = 'opencv', align = True, prog_bar = True, normalization = 'base')
其返回的结果是类似下面的字典:
{
"verified": True
, "distance": 0.2563
, "max_threshold_to_verify": 0.40
, "model": "VGG-Face"
, "similarity_metric": "cosine"
}
也可以不使用封装好的函数而是自己验证两个向量的距离并确定阈值。
所需权重位置 因为deepface里面的一些模型需要训练好的权重,所以当选择一些使用一些深度模型时例如
retinaface
,VGGFace
,会先下载权重。这些权重的存储地址类似下面:/home/path/.deepface/weights/retinaface.h5
显示隐藏文件夹
ctr+h
推荐阅读
- 深度学习|深度学习(一)(深度学习基础知识)
- 算法|小波变换和小波阈值去噪
- 如何在Ubuntu 16.04中安装和使用python人脸识别和检测库
- Deep|深度学习实战案例(预测房价)
- 机器学习|机器学习:1、线性回归--波士顿房价预测
- 人工智能,机器学习和深度学习之间的区别
- 优达学城深度学习之三(下)——卷积神经网络
- 人工智能|阿里副总裁、自动驾驶掌舵人王刚离职!40岁转身再创业
- 深度学习分类任务常用评估指标