当前位置:网站首页>提取人脸特征的三种方法
提取人脸特征的三种方法
2022-08-05 10:47:00 【华为云】
@[toc]
第一种方法 直接使用dlib。
安装dlib方法:
https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121470556
思路:
1、使用dlib.get_frontal_face_detector()方法检测人脸的位置。
2、使用 dlib.shape_predictor()方法得到人脸的关键点。
3、使用dlib.face_recognition_model_v1()方法提取特征。
新建face_embedding1.py,插入代码:
import dlib,numpyimport cv2# 人脸关键点检测器predictor_path = "shape_predictor_68_face_landmarks.dat"# 人脸识别模型、提取特征值face_rec_model_path = "dlib_face_recognition_resnet_model_v1.dat"
predictor_path是恋人关键点检测器模型的路径。
face_rec_model_path是提取人脸特征的路径。
# 加载模型detector = dlib.get_frontal_face_detector() #人脸检测sp = dlib.shape_predictor(predictor_path) #关键点检测facerec = dlib.face_recognition_model_v1(face_rec_model_path)# 编码
分别初始化人脸检测、关键点检测、特征编码方法。
image_path='train_images/11.jpg'image = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)# 人脸检测dets = detector(image, 1)if len(dets)==1: print('检测到人脸')shape = sp(image, dets[0])# 关键点# 提取特征face_descriptor = facerec.compute_face_descriptor(image, shape)#获取到128位的编码v = numpy.array(face_descriptor)print(v)
读取图片。然后将图片转为RGB格式。
检测人脸。
获取人脸的68个关键点。
获取128位人脸编码。
使用感受: 使用dlib.get_frontal_face_detector()检测人脸效果一般,模糊的人脸检测不出来。速度上也是比较慢。
第二种方法 使用深度学习方法查找人脸,dlib提取特征。
思路:
这种方法使用 cv2自带的dnn.readNetFromCaffe方法,加载深度学习模型实现人脸的检测。然后继续使用dlib提取人脸特征。
新建face_embedding2.py,插入代码:
import dlib,numpyimport cv2# 人脸关键点检测器predictor_path = "shape_predictor_68_face_landmarks.dat"# 人脸识别模型、提取特征值face_rec_model_path = "dlib_face_recognition_resnet_model_v1.dat"prototxt_path = 'deploy.proto.txt'model_path = 'res10_300x300_ssd_iter_140000_fp16.caffemodel'
导入需要的包。
定义模型的路径。
net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)sp = dlib.shape_predictor(predictor_path) #关键点检测facerec = dlib.face_recognition_model_v1(face_rec_model_path)# 编码
初始化人脸检测模型、关键点检测模型、人脸特征提取模型。
image_path='train_images/11.jpg'image = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)(h, w) = image.shape[:2]blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))net.setInput(blob)detections = net.forward()startX, startY, endX, endY = 0, 0, 0, 0for i in range(0, detections.shape[2]): # extract the confidence (i.e., probability) associated with the # prediction confidence = detections[0, 0, i, 2] # filter out weak detections by ensuring the `confidence` is # greater than the minimum confidence if confidence > 0.5: # compute the (x, y)-coordinates of the bounding box for the # object box = detections[0, 0, i, 3:7] * numpy.array([w, h, w, h]) (startX, startY, endX, endY) = box.astype("int") breakrect = dlib.rectangle(startX, startY, endX, endY)
这部分的代码主要是人脸检测逻辑。
读取图片,并将其改为RGB格式。
获取图片的大小。
初始化blob。
net.forward()计算人脸的位置。
遍历检测结果
如果置信度大于0.5,则认为是合格的人脸。
计算出人脸的坐标。
将坐标转为dlib.rectangle对象。
shape = sp(image, rect)print(shape)# 提取特征face_descriptor = facerec.compute_face_descriptor(image, shape)#获取到128位的编码v = numpy.array(face_descriptor)print(v)
计算人脸的关键点。
提取人脸的特征。
使用感受:使用深度学习模型提取人脸特征,无论速度还是准确率都有很大的提高,即使很模糊的图像依然能检测到。
第三种使用insightface提取人脸特征
InsightFace 是一个开源的 2D&3D 深度人脸分析工具箱,其中高效地实现了丰富多样的人脸识别、人脸检测和人脸对齐算法,并且针对训练和部署进行了优化,在多项算法测评、比赛获得优胜。
安装InsightFace
pip install insightfacepip install onnxruntime-gpu==1.9.0
注意:onnxruntime安装1.9以下的版本。
提取特征
新建face_embedding3.py 插入代码:
import insightfaceimport cv2model = insightface.app.FaceAnalysis()model.prepare(ctx_id=0, det_thresh=0.45)face_img = cv2.imread('train_images/11.jpg')res = model.get(face_img)print('embedding: ', res[0].embedding)
初始化FaceAnalysis()模型。
设置置信度位0.45。
读取图片
使用模型预测。
打印人脸特征res[0].embedding。
除了能人脸特征外,还有一些其他的属性,比如:bbox、kps、landmark_3d_68、landmark_2d_106、age、gender 。可以通过res[0].keys()查看。
使用感受:速度比较慢,精度还行。
完整的代码和模型:
https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/85345364
边栏推荐
猜你喜欢
Huawei's lightweight neural network architecture GhostNet has been upgraded again, and G-GhostNet (IJCV22) has shown its talents on the GPU
sqlserver编写通用脚本实现获取一年前日期的方法
How to choose coins and determine the corresponding strategy research
MySQL transactions
项目成本控制如何帮助项目成功?
数据可视化(二)
012年通过修补_sss_提高扩散模型效率
技术干货 | 基于 MindSpore 实现图像分割之豪斯多夫距离
负载均衡应用场景
JS introduction to reverse the recycling business network of learning, simple encryption mobile phone number
随机推荐
【MySQL基础】-【数据处理之增删改】
[Strong Net Cup 2022] WP-UM
GCC编译的时候头文件搜索规则
PCB layout must know: teach you to correctly lay out the circuit board of the op amp
How does the official account operate and maintain?Public account operation and maintenance professional team
Opencv算术操作
three物体围绕一周呈球形排列
Still looking for a network backup resources?Hurry up to collect the following network backup resource search artifact it is worth collecting!
【 temperature warning program DE development 】 event driven model instance
第五章:redis持久化,包括rdb和aof两种方式[通俗易懂]
FPGA:基础入门按键控制LED灯
SkiaSharp 之 WPF 自绘 投篮小游戏(案例版)
Introduction to SD NAND Flash!
静态链接和动态链接
【综合类型第 35 篇】程序员的七夕浪漫时刻
例题 可达性统计+bitset的使用
秘乐短视频挖矿系统开发详情
第七章,activiti个人任务分配,动态指定和监听器指定任务委派人「建议收藏」
LeetCode 216. Combined Sum III (2022.08.04)
第五章:多线程通信—wait和notify