Python 特征提取,python进行人脸识别
本文主要和大家分享Python中提取人脸特征的三种方法。文中的示例代码讲解的很详细,对我们学习Python会有帮助。如果需要,请参考。
00-1010 1.直接用dlib。2.使用深度学习方法寻找人脸,使用DLIB提取特征。3.使用insightface提取特征。安装InsightFace以提取特征。
目录
安装dlib的方法:
dlibGPU安装过程Win10详解
想法:
1.使用dlib . get _ frontier _ face _ detector()方法检测人脸的位置。
2.使用dlib.shape_predictor()方法获取人脸的关键点。
3.使用dlib.face_recognition_model_v1()方法提取特征。
创建一个新的face _ embedding1.py并插入代码:
导入dlib,numpy
导入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 _ frontier _ 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=探测器(图像,1)
如果len(dets)==1:
打印(“检测到人脸”)
Shape=sp(image,dets[0])#关键点
#提取特征
face _ descriptor=facerec.com put _ face _ descriptor(image,shape) #获取128位代码
v=numpy.array(face_descriptor)
印刷(五)
看图。然后把图片转换成RGB格式。
检测人脸。
得到68个人脸关键点。
获取128位面码。
使用感受: 使用dlib.get_frontal_face_detector()检测人脸效果一般,模糊的人脸检测不出来。速度上也是比较慢。
1.直接使用dlib
想法:
该方法使用cv2的dnn.readNetFromCaffe方法,加载深度学习模型实现人脸检测。然后继续用dlib提取面部特征。
创建一个新的face_embedding2.py并插入代码:
导入dlib,numpy
导入cv2
#面部关键点检测器
predictor _ path= shape _ predictor _ 68 _ face _ landmarks . dat
#人脸识别模型,提取特征值
face _ rec _ model _ path= dlib _ face _ recognition _ resnet _ model _ v1 . dat
proto txt _ path= deploy . proto . txt
model _ path= res10 _ 300 x300 _ SSD _ ITER _ 140000 _ fp16 . caffemodel
导入的包。
定义模型的路径。
net=cv2.dnn.readNe
tFromCaffe(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.jpgimage = 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, 0
for 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")
break
rect = 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)
计算人脸的关键点。
提取人脸的特征。
使用感受:使用深度学习模型提取人脸特征,无论速度还是准确率都有很大的提高,即使很模糊的图像依然能检测到。
3.使用insightface提取人脸特征
InsightFace 是一个开源的 2D&3D 深度人脸分析工具箱,其中高效地实现了丰富多样的人脸识别、人脸检测和人脸对齐算法,并且针对训练和部署进行了优化,在多项算法测评、比赛获得优胜。
安装InsightFace
pip install insightfacepip install onnxruntime-gpu==1.9.0
注意:onnxruntime安装1.9以下的版本。
提取特征
新建face_embedding3.py 插入代码:
import insightfaceimport cv2
model = 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()查看。
使用感受:速度比较慢,精度还行。
到此这篇关于Python中提取人脸特征的三种方法详解的文章就介绍到这了,更多相关Python提取人脸特征内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。