人脸识别5.3- insightface人脸3d关键点检测源码更改,根据姿态角修正图片角度,调整向量解析值,增大识别准确度,以及返回俯仰角,偏航角,旋转角

模型

# {
    
    'landmark_3d_68': <insightface.model_zoo.landmark.Landmark object at 0x0000014BB0782910>,
# 'detection': <insightface.model_zoo.retinaface.RetinaFace object at 0x0000014BB0782730>,
# 'recognition': <insightface.model_zoo.arcface_onnx.ArcFaceONNX object at 0x0000014BB07828E0>}

3d坐标68个关键点对应的5个关键点

// 鼻尖 30
// 鼻根 27
// 下巴 8
// 左眼外角 36
// 左眼内角 39
// 右眼外角 45
// 右眼内角 42
// 嘴中心 66
// 嘴左角 48
// 嘴右角 54
// 左脸最外 0
// 右脸最外 16

36/45/30/48/54

源码更改,不以目标检测的关键点来做特征,以68个点里面的5个关键点做特征

在这里插入图片描述
在这里插入图片描述

  def get(self, img, max_num=0):
        bboxes, kpss = self.det_model.detect(img,
                                             max_num=max_num,
                                             metric='default')
        if bboxes.shape[0] == 0:
            return []
        ret = []
        for i in range(bboxes.shape[0]):
            bbox = bboxes[i, 0:4]
            det_score = bboxes[i, 4]
            # kps = None
            # if kpss is not None:
            #     kps = kpss[i]
            face = Face(bbox=bbox, kps=None, det_score=det_score)
            self.models['landmark_3d_68'].get(img, face)
            face['kps'] = face.kps = np.array([face.landmark_3d_68[i][:-1] for i in [36, 45, 30, 48, 54]])
            self.models['recognition'].get(img, face)

            # for taskname, model in self.models.items():
            #     if taskname=='detection':
            #         continue
            #     model.get(img, face)
            ret.append(face)
        return ret

获取人脸相对于图片的旋转角度 landmark_3d_68

俯仰角,偏航角,旋转角

poses = [face.pose.tolist() for face in faces]

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_15821487/article/details/126491698
今日推荐