当前位置:网站首页>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
边栏推荐
- MMDetection实战:MMDetection训练与测试
- PCB layout must know: teach you to correctly lay out the circuit board of the op amp
- Go编译原理系列6(类型检查)
- 化繁为简!阿里新产亿级流量系统设计核心原理高级笔记(终极版)
- 教你本地编译运行一个IDEA插件,在IDEA里聊天、下棋、斗地主!
- Chapter 4: activiti RuntimeService settings get and get process variables, and the difference from taskService, set process variables when starting and completing tasks [easy to understand]
- 登录功能和退出功能(瑞吉外卖)
- 阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
- 拓朴排序例题
- DocuWare平台——文档管理的内容服务和工作流自动化的平台详细介绍(下)
猜你喜欢
DocuWare平台——文档管理的内容服务和工作流自动化的平台详细介绍(下)
The host computer develops C# language: simulates the STC serial port assistant to receive the data sent by the microcontroller
Opencv图像缩放和平移
sqlserver编写通用脚本实现获取一年前日期的方法
数据可视化(一)
How can project cost control help project success?
上位机开发C#语言:模拟STC串口助手接收单片机发送数据
API 网关简述
MySQL transactions
今天告诉你界面控件DevExpress WinForms为何弃用经典视觉样式
随机推荐
什么是 DevOps?看这一篇就够了!
FPGA: Use of the development environment Vivado
Import Excel/CSV from Sub Grid within Dynamics 365
Voice-based social software development - making the most of its value
第五章:activiti流程分流判断,判断走不同的任务节点
【MySQL基础】-【数据处理之增删改】
单片机:温度控制DS18B20
[Translation] Chaos Net + SkyWalking: Better observability for chaos engineering
牛刀小试基本语法,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang基本语法和变量的使用EP02
The fuse: OAuth 2.0 four authorized login methods must read
Login function and logout function (St. Regis Takeaway)
反射修改jsessionid实现Session共享
2022 Hangzhou Electric Power Multi-School Session 6 1008.Shinobu Loves Segment Tree Regular Questions
阿里全新推出:微服务突击手册,把所有操作都写出来了PDF
PCB layout must know: teach you to correctly lay out the circuit board of the op amp
【综合类型第 35 篇】程序员的七夕浪漫时刻
Header file search rules when compiling with GCC
The query that the user's test score is greater than the average score of a single subject
What is SPL?
RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)