13

使用 OpenPose 从视频中提取姿势数据时,我得到了很多抖动。这看起来不自然,我的结果看起来既不自然也不人性化。

我从 OpenPose 模型中获得的数据是我必须使用的,我无法提高模型的质量。处理整个视频剪辑,并将 15 个解剖关键点存储在数据库中。我想使用一些信号处理来平滑这些数据。如何摆脱这种抖动?

在此处输入图像描述

4

1 回答 1

29

使用 Savgol 过滤器来平滑数据。

使用 savgol 滤波器平滑姿态估计

在 Imgur 上的 Gif

显示不同平滑程度的视频。

数据中存在抖动,因为视频正在逐帧处理。OpenPose 模型很好,但并不一致。该模型往往以随机方式出错。这会导致身体部位的位置围绕真实值反弹。

幸运的是,这些数据通常围绕真实值分布。这意味着 Savgol 过滤器可用于平滑数据,并从嘈杂的数据中生成准确的值。

平滑的第一步是收集整个视频的姿势数据,并将其存储在 .csv 文件中。保存姿势数据.py

有时模型会掉头。在下一步中,交换身体部位,使左侧始终在左侧。swap_body_parts.py

身体部位#9 是左膝,身体部位#12 是右膝。有时模型会混淆左右膝盖的位置。我必须确保:

x_coord for body part #9 < x_coord for body part #12

所以,如果#9 是#12 的左边,我将交换这些位置。

left_and_right_knees

最后是时候应用平滑了。对于 60 fps,我发现 9 到 31 之间的值对于 window_length 参数效果很好(较低的平滑度较低,较高的平滑度较高)。 smooth_with_savgol.py

在这个 gif 中,右肘(绿色)已经平滑,而左肘(粉红色)没有。

带平滑的弯头

通常,平滑的结果来自跟踪而不是检测。检测视频第一帧的位姿,然后用光流跟踪关键点。跟踪比检测快 100 倍(光流与 OpenPose)。

这种方法只适用于后期制作。在应用平滑算法之前,必须知道所有帧的位姿数据。提取这个 .gif 的姿势数据花了我的电脑几分钟。

于 2018-09-21T20:25:53.973 回答