从 68 个地标点检索面部姿势的 Python 库

问题描述

谁能告诉我一个库的方向,该库可以从 Python 中的 68 个地标点估计面部姿势?

更具体地说,存在许多这样的库。但是,它们通常从图像开始。我想跳过地标检测,因为我已经有了它。我只想将 68 点地标提供给函数并检索面部的旋转和平移。

如果我不是一个完整的 Python 新手,我也许可以从现有库中提取相关的点点滴滴,但我发现这很难做到。

谢谢。

解决方法

这个库似乎可以完成你的工作 https://github.com/yinguobing/head-pose-estimation

它似乎分 3 个步骤,

  1. 人脸检测
  2. 地标检测
  3. 姿态估计。得到 68 个面部标志后,可以通过相互 PnP 算法计算姿势。

因此,您应该查看此 mutual PnP algorithm 的代码库,该代码库将 68 个地标作为输入。

Looks like all the code regarding pose estimation that you will need is inside this file!

为大家简单总结一下整个姿态估计代码文件

  • PoseEstimator 类包含所有相关函数
  • __init__ 函数正在建立 self.model_points 作为鼻尖、下巴、嘴的坐标。它还处理相机内部结构、旋转和平移向量。所有这些都是进行姿势估计的 PnP 算法的基本输入
  • self._get_full_model_points() 正在从文件中读取地标点并将其存储在 self.model_points_68
  • 这个类有一个名为 solve_pose_by_68_points 的重要函数,它正在做你需要的。它期待输入您的地标。
  • 这个solve_pose_by_68_points()函数用于inside this file
  • 该函数的输入是一个名为 marks 的变量

您需要想办法将您自己的地标点输入到此 solve_pose_by_68_points 函数中,使用 marks 变量作为指导。

或者,只需从 pose_estimator.py 文件和其中的 solve_pose_by_68_points 函数重新创建代码。

旁注 - 该函数只是调用 cv2.solvePnP,我猜是 PnP 算法的 openCVs 实现。