张春成
2022/12/27阅读:93主题:默认主题
跳舞火柴人
跳舞火柴人
本文以 Openpose 的骨架识别能力为基础,从视频中解析出人体关节的实时位置,并进行绘制。
解析代码可见我的 GitHub 仓库
https://github.com/listenzcc/dancing-body[1]
绘制代码可见我的前端笔记本
Dancing Body[2]
关节解析
Openpose 是开源软件,用来调用合适的深度神经网络模型,从图片或视频中提取人的骨架关节,它能够以 25 点关节的形式表达一个人体。
https://github.com/CMU-Perceptual-Computing-Lab/openpose[3]

Pic-example
合适的场景
我的目的是利用这个东西生成一名欢蹦乱跳的火柴人,这就需要一个合适的场景,因为真正着手做的时候就会发现,要达到这个目的,它对视频环境的要求非常苛刻。首先,场景要始终包含全身,并且目标人物尽量不受遮挡;其次,场景不要频繁切换;另外,目标人物动作尽量丰富,还需要其他人物尽可能少。
不难发现,如果不是有强烈目的性的话,这些条件是很难同时满足的,而我手上什么都没有。于是我选择了体育比赛作为候选素材,最终截取段一个冰舞的视频片断,它几乎满足以上要求。

Dance-1
但几乎不是全部,因为模型不可避免地将后面的观众识别出来,而这些关节的顺序是没有保证的,因此只能通过恰当的连续性准则,才能将运动员的关键点识别出来。本部分代码可见我的 GitHub 仓库,它能够以时间帧和空间位置的形式将关键点的轨迹保存下来
https://github.com/listenzcc/dancing-body[4]

Dataset
火柴人
之后的工作比较简单,就是用火柴人动画的形式让关节动起来

Frame example
25 点关节对应表
index | order | joint name | joint name in chs. |
---|---|---|---|
0 | 0 | Nose | 鼻子 |
1 | 1 | Neck | 脖子 |
2 | 2 | RShoulder | 右肩 |
3 | 3 | RElbow | 右手肘 |
4 | 4 | RWrist | 右手腕 |
5 | 5 | LShoulder | 左肩 |
6 | 6 | LElbow | 左手肘 |
7 | 7 | LWrist | 左手腕 |
8 | 8 | MidHip | 中臀 |
9 | 9 | RHip | 右臀 |
10 | 10 | RKnee | 右膝盖 |
11 | 11 | RAnkle | 右脚踝 |
12 | 12 | LHip | 左臀 |
13 | 13 | LKnee | 左膝盖 |
14 | 14 | LAnkle | 左脚踝 |
15 | 15 | REye | 右眼 |
16 | 16 | LEye | 左眼 |
17 | 17 | REar | 右耳 |
18 | 18 | LEar | 左耳 |
19 | 19 | LBigToe | 左大拇指 |
20 | 20 | LSmallToe | 左小拇指 |
21 | 21 | LHeel | 左脚跟 |
22 | 22 | RBigToe | 右大拇指 |
23 | 23 | RSmallToe | 右小拇指 |
24 | 24 | RHeel | 右脚跟 |
25 | 25 | Background | 背景 |

参考资料
https://github.com/listenzcc/dancing-body: https://github.com/listenzcc/dancing-body
[2]Dancing Body: https://observablehq.com/@listenzcc/dancing-body
[3]https://github.com/CMU-Perceptual-Computing-Lab/openpose: https://github.com/CMU-Perceptual-Computing-Lab/openpose
[4]https://github.com/listenzcc/dancing-body: https://github.com/listenzcc/dancing-body
作者介绍