Crossin的编程教室

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

入门教程、案例源码、学习资料、读者群

请访问: python666.cn

大家好,欢迎来到 Crossin的编程教室 !

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

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

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

Image

项目地址:

https://github.com/facebookresearch/AnimatedDrawings

不方便下载的小伙伴,可以直接去文末,已经帮你打包好了。

/ 01 /
项目介绍

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

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

    • 通过物体检测识别人形

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

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

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

Image
接下来看看如何去部署。
/ 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,无法下载项目,可以直接使用文末提供的打包文件。

/ 03 /
项目部署-运行

1. 快速开始

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

在终端使用如下代码。

(animated_drawings) AnimatedDrawings % python

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

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

Image

包含了以下文件。

character_cfg——目标文件

motion_cfg——动作文件

retarget_cfg——识别目标文件

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

Image

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

Image

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

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

Image

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

Image

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

Image

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

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

Image

原图是这样的。

Image

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

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

2. 导出MP4视频

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

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

from animated_drawings import render

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

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

Image

结果如下。

Image

3. 导出透明gif

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

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

from animated_drawings import render

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

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

Image

4. 无头渲染

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

view:
    USE_MESA: True

5. 绘制你自己的画

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

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

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

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

Image

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

首先需要运行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

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

Image

来看看我们绘制的结果吧,开合跳,哈哈哈。

Image

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

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

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

6. 其它操作

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

Image
/ 04 /
总结

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

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

本文首发于公众号「法纳斯特」,作者 小F,大家可以去公众号里回复关键字【儿童绘画】获取相关文件及代码。

作者:小F

来源:法纳斯特

Crossin的新书《码上行动:零基础学会PYTHON编程(CHATGPT版)》已经上市了。
目前京东618活动正在进行中,购买本书可享5折优惠。

本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。

全书涵盖Python环境搭建、基础语法、常见数据类型、实用模块、正则表达式、面向对象编程、多任务编程等知识点。另外还提供了爬虫、GUI、游戏三个实战项目。

书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。
公众号的读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。
感谢转发和点赞的各位~

_往期文章推荐_

Python知识点:lambda表达式

如需了解付费精品课程及教学答疑服务
请在Crossin的编程教室内回复: 666

Image