如何使用平滑技术消除姿势估计中的抖动?

2024-05-16 07:14:16 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

enter image description here


Tags: 数据模型数据库视频质量信号处理关键点人性化
1条回答
网友
1楼 · 发布于 2024-05-16 07:14:16

使用Savgol过滤器平滑数据。

using a savgol filter to smooth pose estimation

Gif on Imgur

Video showing different levels of smoothing.

由于视频是逐帧处理的,所以数据中存在抖动。OpenPose模型很好,但并不一致。这个模型往往是随机错误的。这会导致身体部位的位置围绕真实值反弹。在

幸运的是,这些数据正态分布在真值附近。这意味着Savgol滤波器可以用来平滑数据,并从噪声数据中生成精确的值。在

平滑的第一步是收集整个视频的姿势数据,并将其存储在.csv文件中。save_pose_data.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之间的值对于“窗口长度”参数很有效(越低,越不平滑,越高,越平滑)。 smooth_with_savgol.py

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

elbow with smoothing

通常,平滑的结果来自于跟踪而不是检测。在视频的第一帧检测出目标的姿态,然后用光流跟踪关键点。跟踪比检测快100倍(光流vs.OpenPose)。在

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

相关问题 更多 >