目录
什么是人脸特征点匹配
人脸特征点匹配是指通过检测人脸图像中的关键特征点,并将这些特征点进行比对,以确定人脸图像的相似度。在人脸识别技术中,人脸特征点匹配是一种重要的技术手段。
具体来说,人脸特征点匹配包括以下几个步骤:
- 人脸检测:从图片中准确定位到人脸。
- 人脸对齐:自动定位出面部关键特征点。
- 特征提取:从人脸区域提取各种特征,包括LBP、HOG、Gabor等。
- 特征比对:将两张人脸图像的特征向量进行对比,计算相似度。
代码实现
import cv2
import dlib
import numpy as np
cap = cv2.VideoCapture(0)
detect = dlib.get_frontal_face_detector() #初始化人脸检测器
#加载训练模型
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
while True:
#frame 输入图像
ret,frame = cap.read() #读取每一帧,ret是一个布尔值,指示是否读取成功,
frame = cv2.flip(frame,1) #翻转帧以便处理 ,1表示垂直翻转,0表示水平翻转,-1表示水平和垂直翻转
faces = detect(frame,1) #检测人脸 1表示返回一个最大的人脸 -1表返回所有检测到的人脸
for face in faces:
points = predictor(frame,face) #使用预训练的模型预测给定人脸的68个特征点位置
shape = np.matrix([[p.x,p.y] for p in points.parts()]) #将预测的特诊点坐标转换成numpy矩阵形式
for i, point in enumerate(shape): #遍历每一个特征点
cv2.circle(frame,(point[0,0],point[0,1]),2,(0,255,0),2) #在每个特征点上绘制一个绿测的圈
#cv2.LINE_AA表示使用抗锯齿线条类型来绘制文本
cv2.putText(frame,str(i),(point[0,0],point[0,1]),cv2.FONT_HERSHEY_COMPLEX_SMALL,0.4,(255,255,255),1,cv2.LINE_AA)
cv2.imshow('frame',frame) #显示当前帧
key = cv2.waitKey(1)
if key == 27:
break
cv2.destroyAllWindows()
cap.release()
参数解析
cv2.putText(img, text, org, font, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
img: 需要绘制文本的图像。
text: 要绘制的文本。
org: 文本的起始坐标 (x,y)。
font: 字体类型。
fontScale: 字体大小。
color: 字体颜色。可以是以 (B, G, R) 形式表示的元组,也可以是 HTML 颜色代码的字符串。
thickness: 线条的粗细,如果为负数(如:CV_FILLED),则表示填充文本。
lineType: 线条类型。
bottomLeftOrigin: 这个参数决定了坐标系统的原点位置。如果为 True,那么原点在图像的左下角,否则在左上角。