问题描述
谁能告诉我一个库的方向,该库可以从 Python 中的 68 个地标点估计面部姿势?
更具体地说,存在许多这样的库。但是,它们通常从图像开始。我想跳过地标检测,因为我已经有了它。我只想将 68 点地标提供给函数并检索面部的旋转和平移。
如果我不是一个完整的 Python 新手,我也许可以从现有库中提取相关的点点滴滴,但我发现这很难做到。
谢谢。
解决方法
这个库似乎可以完成你的工作 https://github.com/yinguobing/head-pose-estimation
它似乎分 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 实现。