当前位置:网站首页>提取人脸特征的三种方法
提取人脸特征的三种方法
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
边栏推荐
猜你喜欢

MySQL事务

智能算力的枢纽如何构建?中国云都的淮海智算中心打了个样

Use KUSTO query statement (KQL) to query LOG on Azure Data Explorer Database

What is SPL?

Getting started with Polkadot parachain development, this article is enough

数据可视化(一)

abc262-D(dp)

反射修改jsessionid实现Session共享

This notebook of concurrent programming knowledge points strongly recommended by Ali will be a breakthrough for you to get an offer from a big factory

Microcontroller: temperature control DS18B20
随机推荐
LeetCode 216. Combined Sum III (2022.08.04)
Latex如何控制表格的宽度和高度
SQL外连接之交集、并集、差集查询
How can project cost control help project success?
js劫持数组push方法
Use KUSTO query statement (KQL) to query LOG on Azure Data Explorer Database
STM32+ULN2003 drives 28BYJ4 stepper motor (forward and reverse according to the number of turns)
PCB layout must know: teach you to correctly lay out the circuit board of the op amp
化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
Oracle 19.3 restart 环境
如何选币与确定对应策略研究
使用Windbg过程中两个使用细节分享
HDD杭州站•ArkUI让开发更灵活
2022杭电多校 第6场 1008.Shinobu Loves Segment Tree 规律题
多线程(进阶) - 2.5w字总结
abc262-D(dp)
linux下oracle常见操作以及日常积累知识点(函数、定时任务)
poj2935 Basic Wall Maze (2016xynu暑期集训检测 -----D题)
[Android] How to use RecycleView in Kotlin project
这份阿里强推的并发编程知识点笔记,将是你拿大厂offer的突破口