【问题标题】:Python library to retrieve face pose from 68 landmark points从 68 个地标点检索人脸姿势的 Python 库
【发布时间】:2021-07-27 06:53:04
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: python pose-estimation


    【解决方案1】:

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

    它似乎分三步工作,

    1. 人脸检测
    2. 地标检测
    3. 姿势估计。在获得 68 个面部特征点后,可以通过相互 PnP 算法计算出姿势。

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

    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 实现。

    【讨论】:

    • 非常感谢您的指点!看起来解决方案在这个文件中。我会试一试并报告。
    • 我取得了一些进展,但存在瓶颈。当我调用solve_pose_by_68_points() 时,我需要提供一个OpenCV Mat 对象。我拥有的是一个二维数组。目前,我正在使用此代码将我的 points 数组转换为 Numpy 数组,从我在别处读到的内容来看,它应该与 Python 中的 Mat 对象相同: numpy.array(points, np.float32) 我有不知道这是否是正确的方法。我尝试使用旋转数据,但数字非常小,以至于我无法注意到实际的姿势变化......
    • 在某处分享您的代码,帮我运行它。给我你的积分数组,给我solve_pose_by_68_points()函数
    • 感谢您回复我。我做了一个要点,我把到目前为止的东西放在那里。我最后确实得到了数字,但我认为它们不正确......我不确定如何从数组创建 cv.Mat 。要点如下:gist.github.com/djipco/30d0108cc19b04fd8acd35881ff7defc
    猜你喜欢
    • 2019-08-23
    • 2013-08-05
    • 2012-08-23
    • 2016-11-20
    • 2016-03-01
    • 2021-08-28
    • 2018-06-06
    • 2015-12-18
    • 2018-04-09
    相关资源
    最近更新 更多