张春成

V2

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
Pic-example

Pic-example

合适的场景

我的目的是利用这个东西生成一名欢蹦乱跳的火柴人,这就需要一个合适的场景,因为真正着手做的时候就会发现,要达到这个目的,它对视频环境的要求非常苛刻。首先,场景要始终包含全身,并且目标人物尽量不受遮挡;其次,场景不要频繁切换;另外,目标人物动作尽量丰富,还需要其他人物尽可能少。

不难发现,如果不是有强烈目的性的话,这些条件是很难同时满足的,而我手上什么都没有。于是我选择了体育比赛作为候选素材,最终截取段一个冰舞的视频片断,它几乎满足以上要求。

Dance-1
Dance-1

Dance-1

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

https://github.com/listenzcc/dancing-body[4]

Dataset
Dataset

Dataset

火柴人

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

Frame example
Frame example

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 背景
Untitled
Untitled

参考资料

[1]

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

分类:

后端

标签:

后端

作者介绍

张春成
V2