整理项目经验涉及到相关的技术模型
一、人脸识别
1 InsightFace
1.1 SCRFD
人脸检测的模型 输入是图像 输出是检测到的目标位置和相关信息(如关键点、置信度等)
加载方式
self.detector = SCRFD(os.path.join(assets_dir, 'det_10g.onnx'))
self.detector.prepare(0)
调用方式
# 检测人脸并获取关键点
bboxes, kpss = self.detector.autodetect(image, max_num=1)
bboxes的检测框结果 x1 y1 x2 y2 conf
kpss中包含每个人脸的关键点位置。每个关键点位置是一个二维坐标,表示脸部不同部位(如眼睛、鼻子、嘴巴等)的坐标
1.2 ArcFaceONNX
初始化和运行 ArcFace 模型来进行人脸特征提取
加载方式
model_path = os.path.join(assets_dir, 'w600k_r50.onnx')
self.rec = ArcFaceONNX(model_path)
self.rec.prepare(0)
调用方式
feat = self.rec.get(image, kps)
该方法接收一个图像 img 和关键点 kps,首先通过 face_align.norm_crop 进行人脸对齐处理(基于关键点),然后调用 get_feat 方法提取图像的特征嵌入(embedding),最后将特征进行扁平化并返回。
1.3 余弦相似度计算
def nmscompute_sim(self, feat1, feat2):
from numpy.linalg import norm
feat1 = feat1.ravel()
feat2 = feat2.ravel()
sim = np.dot(feat1, feat2) / (norm(feat1) * norm(feat2))
return sim
ravel()
转换成一维数组
norm()
计算向量的范数(模长)
设置阈值 判断是否是同一个人