用Python让小朋友的手绘图跳起来(附源码)

2f87758b25888cdc11e336c29a5a01b7.gif

大家好,我是小F~

今天给大家介绍一个非常有趣的项目,基于AI识别,制作儿童手绘图舞蹈图

只需几分钟,就能自动生成儿童手绘人物或类人角色(即具有双臂、两条腿等的角色)的动画,而且生成的动画还能做到栩栩如生。

不仅可以跳舞,还能打跆拳道、空中飞踢,模拟人的动作。

faa3470d81fb05051fbfa3ee9b633914.gif

项目地址:

https://github.com/facebookresearch/AnimatedDrawings

不方便下载的小伙伴,可以直接去文末,小F都打包好了。

/ 01 /

项目介绍

这个项目目前仅在macOS和Ubuntu系统上测试过,Windows系统会出问题。

小F本人使用的是Ubuntu20.04系统,基本没什么问题。

大致就是通过一下几个流程进行实现的。

    • 通过物体检测识别人形

    • 使用角色mask从场景中提升人形

    • 通过「装配」为动画做准备

    • 三维运动捕捉制作2D人物动画

51d4d81ce3567a73ba3fad75ea3faf0b.png

接下来小F就来教大家如何去部署。

/ 02 /

项目部署-Python

首先需要安装Anaconda(版本4.11.0),方便创建Python环境。

Anaconda的安装方法,大家可以自行百度,还是比较容易的。

安装好以后,创建虚拟环境,下载项目,安装所需的依赖。

# 创建虚拟环境
conda create --name animated_drawings python=3.8.13

# 激活环境
conda activate animated_drawings

# 下载项目
git clone https://github.com/facebookresearch/AnimatedDrawings.git

# 打开目录文件
cd AnimatedDrawings

# 安装依赖
pip install -e .

如果没有安装git,无法下载项目,可以直接使用小F提供的文件。

/ 03 /

项目部署-运行

1. 快速开始

现在一切都已设置好,让我们为绘图制作动画吧!

在终端使用如下代码。

(animated_drawings) AnimatedDrawings % python

# 在Python终端里运行如下代码
from animated_drawings import render
render.start('./examples/config/mvc/interactive_window_example.yaml')

我们看一下这个yaml配置文件的内容。

b801d20f2a7040bc63db340662559203.png

包含了以下文件。

character_cfg——目标文件

motion_cfg——动作文件

retarget_cfg——识别目标文件

其中目标文件可以使用以下几类,对于目标的具体情况可以查看joint_overlay.png。

59343e084dddb2c2b97d1de2b23f5b90.png

动作文件则可以使用以下几类,包含爵士舞、开合跳等动作。

a9041a464695309e9931a2c778b8eb18.png

目标识别文件是可以使用以下几类,不同类型的目标,不单单是类人的目标

还有四条腿的猪,六个胳膊的甲壳虫~

7435d76aa492da695e1de411e2b1ea99.png

有四条腿的目标识别文件。

4abf14cac7ca1996f4e9c4f0acd31dbf.png

还有六个胳膊的目标识别文件。

c59f4c8e17144bc6bc67cb5cc87f22e9.png

最终运行上述命令,会在桌面弹窗生成一个动画。

使用空格键暂停/取消暂停场景,箭头键可以控制前后移动,q键关闭屏幕。

ad850d019624ea330073cbb2cf8d5b08.gif

原图是这样的。

743d25b1aadcb714736c9dc5608c83e3.png

是不是感觉非常有趣,将小朋友的杰作,变成一个个活蹦乱跳的目标。

如果你想修改角色、动作、场景的话,便可以按照上面的说明,替换interactive_window_example.yaml文件中的内容来实现。

2. 导出MP4视频

如果你是想将动画保存为视频文件而不是直接在窗口中查看。

可以在Python解释器中使用如下代码。

from animated_drawings import render

# 导出MP4视频
render.start('./examples/config/mvc/export_mp4_example.yaml')

配置文件内容,相比上面的文件,多了几个参数。

bcb8a33d0da56ba14ee5b46af3fd4ab7.png

结果如下。

c726643bed7962c9c97a00ae40f34897.gif

3. 导出透明gif

也许你想要是透明的gif文件而不是mp4文件。

可以在Python解释器中复制运行如下代码。

from animated_drawings import render

# 导出GIF文件
render.start('./examples/config/mvc/export_gif_example.yaml')

同样看一下配置文件内容,和导出mp4的设置差不太多。

4cb47b1ac83e5b4d6502928e13b98157.png

4. 无头渲染

如果你想无头生成视频(例如在通过 ssh 访问的远程服务器上),可以在配置文件中添加如下代码。

view:
    USE_MESA: True

5. 绘制你自己的画

说了这么多示例,大家一定很想知道,如何把自己画的图,也给动起来。

下面小F就给大家介绍如何实现。

对于不同的目标我们需要生成目标文件,恰好作者也提供了便捷的生成方式。

作者训练了一个绘制的人形图形检测器和姿势估计器,并提供了脚本以根据模型预测自动生成注释文件。

4b0d65514fe471bca83fc18870b0a5de.png

至于动作文件和目标识别文件可以先用作者提供的。

首先需要运行TorchServe Docker容器,使得能够快速将提供的图像输送给我们的机器学习模型并得到预测结果

对于Docker大家可以自行去安装,使用到如下命令进行环境搭建。

(animated_drawings) AnimatedDrawings % cd torchserve

# 创建镜像
(animated_drawings) torchserve % docker build -t docker_torchserve .

# 运行容器
(animated_drawings) torchserve % docker run -d --name docker_torchserve -p 8080:8080 -p 8081:8081 docker_torchserve

等待约10秒后,通过ping服务器来确保Docker和TorchServe正常工作。

(animated_drawings) torchserve % curl http://localhost:8080/ping

# should return:
# {
#   "status": "Healthy"
# }

服务搭建好以后,可以通过如下命令,使得图像生成动画。

(animated_drawings) torchserve % cd ../examples
(animated_drawings) examples % python image_to_animation.py drawings/garlic.png garlic_out

原图是这样子的,委托一位朋友画的,在绘制过程中还发现了不少问题。

3b71d277959379bd0bd91cd26cca7683.jpeg

来看看小F绘制的结果吧,魔性舞蹈。

通过修改配置文件的动作类型,还有开合跳,哈哈哈。

f699432a45f9d3ff78bd764a1084022c.gif

发现必需要用空白的纸绘图,否则目标分割会出问题。

而且绘图要保证一整个目标都是闭合的(其实着上了颜色就差不多),要不然容易报错,而且有空白。

比如上图的手部和脚部,颜色就不太一样,就是因为轮廓没有闭合。

6. 其它操作

此外还有修复错误的预测、向场景添加多个角色、添加背景图片、使用具有不同骨架的BVH文件、自定义BVH文件(动作文件)、添加额外的角色骨架等操作。

f14d16fdec9ae8c860628c1e7c55c557.gif

感兴趣的小伙伴,可以自行去学习学习。

/ 04 /

总结

以上操作,就能通过AI实现儿童绘画跳舞。

感兴趣的小伙伴们,可以自行去尝试,给小朋友提供快乐。

相关文件及代码都已上传,公众号回复【儿童绘画】即可获取。

万水千山总是情,点个 👍 行不行

推荐阅读

a44648eafc14f77f0b2fc0d2754a8c48.jpeg

a73a8695728562f6cb0d89ab415a3d9b.jpeg

8fdc8640e7967eda7886d4525e568291.jpeg

···  END  ···

29f8867fc7e5a18f8e1016afdb7697ad.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值