当前位置:网站首页>Three methods for extracting facial features
Three methods for extracting facial features
2022-08-05 10:50:00 【HUAWEI CLOUD】
@[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
边栏推荐
- three objects are arranged in a spherical shape around the circumference
- Use KUSTO query statement (KQL) to query LOG on Azure Data Explorer Database
- Latex如何控制表格的宽度和高度
- 多线程(进阶) - 2.5w字总结
- The host computer develops C# language: simulates the STC serial port assistant to receive the data sent by the microcontroller
- Go编译原理系列6(类型检查)
- How can project cost control help project success?
- Opencv算术操作
- 2022杭电多校 第6场 1008.Shinobu Loves Segment Tree 规律题
- SMB + SMB2: Accessing shares return an error after prolonged idle period
猜你喜欢

Microcontroller: temperature control DS18B20

Opencv图像缩放和平移

2022 Huashu Cup Mathematical Modeling Question A Optimization Design Ideas for Ring Oscillators Code Sharing

Introduction to SD NAND Flash!

What is SPL?

012_SSS_ Improving Diffusion Model Efficiency Through Patching

用KUSTO查询语句(KQL)在Azure Data Explorer Database上查询LOG实战

gradle尚硅谷笔记

单片机:温度控制DS18B20

负载均衡应用场景
随机推荐
MySQL 中 auto_increment 自动插入主键值
How does the official account operate and maintain?Public account operation and maintenance professional team
three.js debugging tool dat.gui use
lvgl 实现状态提示图标自动对齐补位显示
用KUSTO查询语句(KQL)在Azure Data Explorer Database上查询LOG实战
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
STM32+ULN2003 drives 28BYJ4 stepper motor (forward and reverse according to the number of turns)
The host computer develops C# language: simulates the STC serial port assistant to receive the data sent by the microcontroller
PCB布局必知必会:教你正确地布设运算放大器的电路板
Create a Dapp, why choose Polkadot?
单片机:温度控制DS18B20
DocuWare平台——文档管理的内容服务和工作流自动化的平台详细介绍(下)
MySQL transactions
19.3 restart the Oracle environment
[Strong Net Cup 2022] WP-UM
Opencv算术操作
如何修改管理工具client_encoding
How to choose coins and determine the corresponding strategy research
RT - Thread record (a, RT, RT Thread version - Thread Studio development environment and cooperate CubeMX quick-and-dirty)
第九章:activit内置用户组设计与组任务分配和IdentityService接口的使用