前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python让小朋友的手绘图跳起来(附源码)

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

作者头像
小F
发布2023-08-21 16:43:04
3510
发布2023-08-21 16:43:04
举报
文章被收录于专栏:用户6291251的专栏
大家好,我是小F~

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

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

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

项目地址:

https://github.com/facebookresearch/AnimatedDrawings

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

/ 01 /

项目介绍

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

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

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

  • 通过物体检测识别人形
  • 使用角色mask从场景中提升人形
  • 通过「装配」为动画做准备
  • 三维运动捕捉制作2D人物动画

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

/ 02 /

项目部署-Python

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

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

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

代码语言:javascript
复制
# 创建虚拟环境
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. 快速开始

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

在终端使用如下代码。

代码语言:javascript
复制
(animated_drawings) AnimatedDrawings % python

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

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

包含了以下文件。

character_cfg——目标文件

motion_cfg——动作文件

retarget_cfg——识别目标文件

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

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

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

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

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

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

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

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

原图是这样的。

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

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

2. 导出MP4视频

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

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

代码语言:javascript
复制
from animated_drawings import render

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

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

结果如下。

3. 导出透明gif

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

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

代码语言:javascript
复制
from animated_drawings import render

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

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

4. 无头渲染

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

代码语言:javascript
复制
view:
    USE_MESA: True

5. 绘制你自己的画

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

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

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

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

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

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

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

代码语言:javascript
复制
(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正常工作。

代码语言:javascript
复制
(animated_drawings) torchserve % curl http://localhost:8080/ping

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

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

代码语言:javascript
复制
(animated_drawings) torchserve % cd ../examples
(animated_drawings) examples % python image_to_animation.py drawings/garlic.png garlic_out

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

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

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

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

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

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

6. 其它操作

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

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

/ 04 /

总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 法纳斯特 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档