<分区>
我在使用 OpenPose 从视频中提取姿势数据时遇到很多抖动。这看起来不自然,我的结果看起来不自然和人性化。
我从 OpenPose 模型中获得的数据是我必须处理的,我无法提高模型的质量。处理整个视频剪辑并将 15 个解剖学关键点存储在数据库中。我想使用一些信号处理来平滑这些数据。如何消除这种抖动?
<分区>
我在使用 OpenPose 从视频中提取姿势数据时遇到很多抖动。这看起来不自然,我的结果看起来不自然和人性化。
我从 OpenPose 模型中获得的数据是我必须处理的,我无法提高模型的质量。处理整个视频剪辑并将 15 个解剖学关键点存储在数据库中。我想使用一些信号处理来平滑这些数据。如何消除这种抖动?
最佳答案
使用 Savgol 过滤器平滑数据。
Video showing different levels of smoothing.
数据中存在抖动,因为视频是逐帧处理的。 OpenPose 模型很好,但并不一致。该模型往往以随机方式出错。这会导致 body 部位的位置在真实值附近反弹。
幸运的是,这些数据在真值周围呈正态分布。这意味着 Savgol 过滤器可用于平滑数据,并从嘈杂的数据中生成准确的值。
平滑的第一步是收集整个视频的姿势数据,并将其存储在 .csv 文件中。 save_pose_data.py
有时模型会被翻转。在下一步中,交换 body 部位,使左边始终在左边。 swap_body_parts.py
body 部位 #9 是左膝, body 部位 #12 是右膝。有时模型会混淆左右膝盖的位置。我必须确保:
x_coord for body part #9 < x_coord for body part #12
因此,如果 #9 离开 #12,我将交换这些位置。
最后是应用平滑的时候了。对于 60 fps,我发现 window_length 参数的值介于 9 和 31 之间(越低平滑度越低,越高平滑度越高)。 smooth_with_savgol.py
在此 gif 中,右手肘(绿色)已被平滑,而左手肘(粉红色)尚未平滑。
通常,流畅的结果来自跟踪,而不是检测。检测第一帧视频中的姿势,然后使用光流跟踪关键点。跟踪比检测快 100 倍(光流与 OpenPose)。
此方法仅适用于后期制作。在应用平滑算法之前,必须知道所有帧的姿势数据。提取这个 .gif 的姿势数据花了我几分钟的时间。
关于python - 如何使用平滑技术消除姿势估计中的抖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52450681/
相关文章:
python - 在基于 celery+flask 的应用程序中,我需要为 Redis 安装什么?
image-processing - 如何测量图像中的距离?
python - 在 Matplotlib.pyplot.imshow() 中显示来自 OpenCV 的二维数组
python - 一个简单的命令 - "np.save",也许我误解了
python - 扭曲 - Python3 类型错误 : __init__() missing 1 required positional argument: 'factory'