Paddle + doodle = Padoodle

Padoodle: 使用人体关键点检测让涂鸦小人动起来

PaddleDetection 链接:https://github.com/PaddlePaddle/PaddleDetection
PaddleHub链接:https://github.com/PaddlePaddle/PaddleHub
大家好我是桨师磊giegie,今天给大家带来一个pose相关的小项目,就是如何让涂鸦跟着我动起来。
其实,这个任务可以分为两个部分:
第一部分获取人的pose信息
第二部分就是骨骼动画

获取人的pose信息

获取人的pose信息比较容易,直接使用paddlehub中的一些pose estimation的方法就可以做到。
这里我们可以直接调用,我这里使用的是human_pose_estimation_resnet50_mpii。
当然,这个后端的算法可以替换成任何可以估计人体pose的算法。
PaddleDetection中现在也提供了人体关键点检测的算法,在下一个项目中,我应该会介绍相关的内容。

骨骼动画

我画了几张简单的图给大家说一下

首先就是要确定我们皮肤点和骨骼点的相对关系。这个关系包括了角度关系,距离关系等等。

皮肤上的点始终和骨骼是有相对位置的,也就是在每帧中我们都要去计算我们的皮肤点,然后画上去。所以这里涉及了一个初始化的过程,就是正确的把皮肤点和骨骼点绑定这样一个过程。
在实际的使用中,一个皮肤点会和多个骨骼点绑定,最后皮肤点的位置,是几个相对位置的加权平均。


想了解更详细的可以参考这篇文章骨骼动画的原理及在Unity中的使用
或者参考我的doodle.py文件

话不多说,一起来看看效果吧

<iframe style="width:98%;height: 800px;" src="//player.bilibili.com/player.html?aid=848653491&bvid=BV1EL4y1B7HK&cid=428344959&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>

完整项目见:Padoodle

使用方法(因为需要用鼠标来画涂鸦,所以现在没办法在aistudio上运行)

!python opencvdoodle_re.py

在画完你的涂鸦后,英文输入法下按‘c’。涂鸦小人就开始跳舞啦~

这里面的视频我上传了一个案例,马保国的。如果想换成别的视频 把videoStream = "mabaoguo.mp4"这行里换成你的视频名字就好。 如果想用摄像头测试的话,可以试试opencvdoodle_re_re.py这个,分成多线程写了,可能效果会更好一丢丢。

总结:

这个项目其实三月份就做完了,但是效果一直不满意。
最近几天突然想到一些优化方法,大大提升了效果,所以算是完成了理想状态的80%。
这个项目其实从去年年底就策划着做,期间搞了几天的骨骼动画,也算是搞懂了一点。
其实这个很依赖关键点检测模型的效果。这里我是用的这个模型训练的数据集貌似和coco是不一样的,所以人像的关键点的标注也是不同的。
所以,如果后端想换成coco数据集训练出来的人体关键点模型,那需要把doodle.py文件改一下。
好了好了,不多说了,下次估计依然是关键点检测模型的项目,咱们下个项目见~

个人简介

百度飞桨开发者技术专家 PPDE

飞桨上海领航团团长

百度飞桨官方帮帮团、答疑团成员

国立清华大学18届硕士

以前不懂事,现在只想搞钱~欢迎一起搞哈哈哈

我在AI Studio上获得至尊等级,点亮9个徽章,来互关呀!!!
https://aistudio.baidu.com/aistudio/personalcenter/thirdview/311006

B站ID: 玖尾妖熊

其他趣味项目: