
媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载本文以 MMagic 仓库中的 Animated Drawings 项目 为骨架结合其配套源码、配置文件与动作数据系统讲解如何基于 SIGGRAPH 2023 论文《A Method for Animating Childrens Drawings of The Human Figure》在 MMagic 生态中完成角色生成 → 动作重定向 → 视频渲染的完整动画化流程。读完本文你将掌握 Animated Drawings 在 MMagic 中的安装方式、两段式命令行工作流以及角色配置、动作配置、重定向配置三套 YAML 文件的核心字段语义并能将自定义画作替换进流水线生成属于自己的动画视频。一、项目背景给儿童画赋予生命力Animated Drawings 是 SIGGRAPH 2023 收录的论文项目论文标题《A Method for Animating Childrens Drawings of The Human Figure》arXiv 编号 2303.12741其核心目标是自动为儿童绘制的人物画生成动画。由于儿童画在构图、比例、透视上存在巨大差异系统需要在算法层面具备对这类业余画作的鲁棒性同时保持足够简单让任何人都能使用。论文团队为此发布了 Animated Drawings Demo 公共网站并构建了首个同类标注数据集Amateur Drawings Dataset通过公共 Demo 收集了超过 178,000 张业余画作并附带了用户认可的物体包围框bounding boxes、分割掩码segmentation masks与关节点标注joint location annotations为后续研究与微调实验提供了数据基础。在 MMagic 仓库中该项目位于 projects/animated_drawings任务类型标注为Drawing属于 MMagic projects 生态projects/README.md中以 MMagic 为基底、独立组织代码的社区项目之一。整个项目目录结构如下bvh/动作数据zombie.bvh946 行 BVH 格式动作文件即僵尸步动作characters/生成的角色资产slamdunk/char_cfg.yaml角色骨架配置文件configs/三套配置motion/动作、mvc/场景视图、retarget/动作重定向tools/两个核心脚本generate_character.py、generate_video.pyREADME.md官方使用说明整条流水线可概括为输入一张角色图片 一张掩码图 → OpenPose 提取姿态并构建角色骨架 → 载入 BVH 动作 → 按重定向配置把动作映射到角色 → 渲染输出视频。二、环境准备与安装1. 安装 Animated DrawingsAnimated Drawings 的渲染与动作处理能力由 Facebook Research 的 AnimatedDrawings 库提供。进入项目目录后通过 pip 以可编辑editable方式从源码安装cd mmagic/projects/animated_drawings pip install -e githttps://github.com/facebookresearch/AnimatedDrawings.git#egganimated_drawings使用-eeditable安装后源码会留在本地便于开发者查看animated_drawings.render等模块的实现。安装前请确保 MMagic 主库及其依赖PyTorch、MMEngine 等已就绪。从 generate_character.py 的 import 语句可以看出角色生成阶段还依赖以下运行库opencv-pythoncv2、numpy、PillowPIL.Image、PyTorchtorch、PyYAMLyaml以及姿态检测库controlnet_aux含OpenposeDetector及 open_pose 的 face/hand 工具模块。这些缺失时需一并补齐。2. 下载演示资源官方 README 为演示流程提供了三张图片素材全部下载到resources目录cd mmagic/projects/animated_drawings mkdir resources # 角色原图灌篮高手风格的 Sakuragi 人物画 wget -O sakuragi.png https://user-images.githubusercontent.com/12782558/236157945-452fb9d0-e02e-4f36-8338-34f0ca0fe962.png # 角色掩码图用于从原图中抠出角色区域 wget -O sakuragi_mask.png https://user-images.githubusercontent.com/12782558/236157965-539a5467-edae-40d0-a9da-7bb5906bcdc4.png # 背景图篮球场 wget -O basketball_playground.png https://user-images.githubusercontent.com/12782558/236190727-0e456482-2ae3-4304-9e6c-6ba7d319ea71.png三张素材各司其职sakuragi.png是待动画化的角色绘制图sakuragi_mask.png是与角色图配对的掩码区分前景角色与背景basketball_playground.png在渲染阶段作为场景背景对应mvc配置中的BACKGROUND_IMAGE字段。三、Step 1从图片生成可驱动角色命令与产物cd mmagic/projects/animated_drawings python tools/generate_character.py执行后脚本会在characters/slamdunk/目录下产出动画渲染所需的纹理图与掩码图同时自动生成角色骨架配置char_cfg.yaml。源码级原理剖析generate_character.py 的完整处理链路如下姿态检测器定制脚本定义了OpenposeDetectorPoint类继承自controlnet_aux的OpenposeDetector并重写了__call__方法。与原始实现不同的是该方法额外返回candidate归一化后的关键点坐标与subset关键点连接关系供后续构建骨架使用。默认检测分辨率detect_resolution 512检测器权重来自lllyasviel/ControlNet。OpenPose 关键点提取对输入图像执行姿态估计得到 14 个人体关键点kpts 索引 0~13对应鼻子/颈部、躯干、双肩、双肘、双手、双髋、双膝、双脚等并以pose.png保存姿态可视化图。图像与掩码预处理输入角色图resources/sakuragi.png与掩码图resources/sakuragi_mask.png均统一缩放到 512 分辨率分别保存为texture.png角色纹理与mask.png角色掩码。骨架构建脚本将 OpenPose 关键点映射为一个 16 关节、带父子层级parent 字段的骨架树写入characters/slamdunk/char_cfg.yaml。映射逻辑如下对应源码 167-187 行root、hip取左右髋关键点均值(kpts[8] kpts[11]) / 2其中root为整棵骨架的根节点parent: nulltorso ← hip、neck ← torsokpts[1]、kpts[0]右臂链right_shoulder(2) → right_elbow(3) → right_hand(4)均挂接在torso之下左臂链left_shoulder(5) → left_elbow(6) → left_hand(7)挂接在torso之下右腿链right_hip(8) → right_knee(9) → right_foot(10)挂接在root之下左腿链left_hip(11) → left_knee(12) → left_foot(13)挂接在root之下。关键点坐标先由归一化值乘以图像宽高还原为像素坐标kpts[:, 0] * W、kpts[:, 1] * H再四舍五入写入配置。角色配置文件 char_cfg.yaml仓库中已生成的 characters/slamdunk/char_cfg.yaml 展示了输出格式——顶层包含width512、height512与skeleton列表。每个骨架节点由loc像素坐标 [x, y]、name关节名、parent父关节名根节点为null构成例如height: 512 width: 512 skeleton: - loc: [260, 230] name: root parent: null - loc: [260, 230] name: hip parent: root - loc: [257, 93] name: torso parent: hip - loc: [250, 54] name: neck parent: torso # ... 其余肩、肘、手、髋、膝、脚关节共 16 个节点这套像素位置 父子链的骨架正是后续动作重定向阶段将 BVH 动作映射到角色身上的锚点。四、Step 2驱动角色生成动画视频命令与产物cd mmagic/projects/animated_drawings python tools/generate_video.py运行后你会得到一个像僵尸一样行走的 Sakuragi动画视频输出保存在resources目录下。整个脚本只有一行核心调用generate_video.pyfrom animated_drawings import render render.start(./configs/mvc/slamdunk.yaml)也就是说视频渲染完全由场景配置驱动render.start()读取mvc层配置按其中声明的角色、动作、重定向三份配置完成组装最终输出视频。五、三层配置体系详解Animated Drawings 在 MMagic 中的落地采用场景视图mvc/ 动作motion/ 重定向retarget三层配置解耦设计理解这三份 YAML 是自定义动画的关键。1. 场景与视图配置configs/mvc/slamdunk.yamlconfigs/mvc/slamdunk.yaml 是整个渲染流程的入口包含scene、view、controller三段scene: ANIMATED_CHARACTERS: - character_cfg: characters/slamdunk/char_cfg.yaml motion_cfg: configs/motion/zombie.yaml retarget_cfg: configs/retarget/fair1_spf.yaml view: CAMERA_POS: [1.6, 1.7, 4.0] CAMERA_FWD: [0.0, 0.5, 2.0] BACKGROUND_IMAGE: resources/basketball_playground.png controller: MODE: video_render OUTPUT_VIDEO_PATH: ./resources/slamdunk_video.mp4 OUTPUT_VIDEO_CODEC: mp4vscene.ANIMATED_CHARACTERS声明场景中要渲染的动画角色列表每个角色由三份配置组合而成——character_cfg角色骨架/纹理指向characters/slamdunk/char_cfg.yaml、motion_cfg动作数据、retarget_cfg动作重定向策略。场景支持多个角色只需向列表追加元素。view相机与背景。CAMERA_POS为相机位置三维坐标CAMERA_FWD为相机朝向向量二者共同决定取景角度BACKGROUND_IMAGE指定渲染背景图即上一步下载的篮球场图片。controller输出控制。MODE: video_render表示视频渲染模式OUTPUT_VIDEO_PATH指定输出文件路径./resources/slamdunk_video.mp4OUTPUT_VIDEO_CODEC指定编码格式mp4v即 MPEG-4 编码可用通用播放器直接播放。2. 动作数据配置configs/motion/zombie.yaml BVH 文件configs/motion/zombie.yaml 描述僵尸步动作的来源与参数filepath: bvh/zombie.bvh start_frame_idx: 0 end_frame_idx: 320 groundplane_joint: LeftFoot forward_perp_joint_vectors: - - LeftShoulder - RightShoulder - - LeftUpLeg - RightUpLeg scale: 0.025 up: zfilepath动作数据文件路径指向 bvh/zombie.bvh。BVHBiovision Hierarchy是动画领域通用的骨骼动作格式。start_frame_idx/end_frame_idx动作片段在 BVH 中的起始/结束帧索引0~320 帧控制动作播放范围。groundplane_joint确定角色贴合地面的关节此处为LeftFoot用于计算脚部与地面的约束关系避免角色陷入或悬浮。forward_perp_joint_vectors用于推导角色朝向的关节向量对左肩-右肩、左大腿-右大腿系统据此在水平面上估计角色的前向方向。scaleBVH 动作的缩放系数0.025把动作数据单位换算到场景尺度。up动作数据的竖直轴约定z告诉渲染器哪个轴是向上。BVH 文件本身的层级结构bvh/zombie.bvh以HIERARCHY开头根关节为Hips声明了 6 通道Xposition Yposition Zposition Xrotation Yrotation Zrotation躯干链为Spine → Spine1 → Spine2 → Spine3 → Neck → Head并分别挂接左右肩臂链RightShoulder → RightArm → RightForeArm → RightHand等与腿脚链。这种层级命名与重定向配置中的bvh_joint_names一一对应是动作映射能够成立的前提。3. 动作重定向配置configs/retarget/fair1_spf.yamlconfigs/retarget/fair1_spf.yaml 负责把 BVH 动作翻译到角色骨架上是三层配置中最复杂的一份核心字段如下char_starting_location角色在场景中的初始位置[0.0, 0.0, 0.0]。bvh_projection_bodypart_groups把 BVH 关节按身体部位分组并指定每组动作向平面投影的方法共三组Upper Limbs上肢含 RightShoulder/RightArm/RightForeArm/RightHand/RightHandEnd 与左臂对称关节投影方法sagittal矢状面投影Lower Limbs下肢含 RightUpLeg/RightLeg/RightFoot/RightToeBase 与左腿对称关节投影方法pca主成分分析投影Trunk躯干含 Hips/Spine/Spine1/Spine2/Spine3/Neck/Head投影方法frontal额状面投影。论文中提到的twisted perspective扭转透视重定向技术即体现在这里儿童画常把身体部位画在扭转的视角中直接套用正视角动作会产生违和因此对不同部位采用不同的投影平面来重定向这正是本方法相对朴素重定向的差异点。char_bodypart_groups建立 BVH 深度驱动关节与角色关节的映射例如Hips驱动right_shoulder/left_shoulder/right_hip/left_hip/hip/torso/neckLeftHand驱动left_elbow/left_handRightHand驱动right_elbow/right_handLeftFoot驱动left_knee/left_footRightFoot驱动right_knee/right_foot。char_bvh_root_offset利用下肢投影组Lower Limbs中双脚→双膝→双髋的关节链计算角色根节点相对 BVH 根节点的偏移保证角色初始姿态与动作基准对齐。char_joint_bvh_joints_mapping角色关节与 BVH 关节段的精确对应表例如left_elbow ↔ (LeftArm, LeftForeArm)、left_knee ↔ (LeftUpLeg, LeftLeg)、torso ↔ (Hips, Spine3)、neck ↔ (Hips, Neck)等。由于 YAML 中使用了!!python/tuple标签这份配置须由 Python 的 yaml 加载器读取。char_runtime_checks运行时校验规则如neck必须位于right_shoulder、left_shoulder上方用于在渲染前检查骨架几何合理性避免生成畸形动画。可以看到fair1_spf中的关节命名LeftUpLeg、RightForeArm等与zombie.bvh的层级命名完全一致这说明三份配置是围绕同一套 BVH 骨架设计、彼此咬合的整体。六、扩展实战动画化你自己的画作掌握了上述配置后把流水线迁移到自定义输入只需做四类替换替换输入画作运行generate_character.py时通过命令行参数指定新素材python tools/generate_character.py \ --chardir characters \ --charname my_char \ --img resources/my_drawing.png \ --mask resources/my_drawing_mask.png--chardir角色根目录默认characters、--charname角色名默认slamdunk、--img角色图路径、--mask掩码图路径四个参数均在 generate_character.py 的parse_args中定义。脚本会为my_char生成独立的texture.png、mask.png、pose.png与char_cfg.yaml。注意掩码应准确勾勒角色轮廓直接影响纹理裁剪与渲染效果。替换动作准备新的 BVH 文件仿照configs/motion/zombie.yaml新建动作配置调整filepath、帧范围、scale与朝向向量并确保 BVH 的关节命名与重定向配置中的bvh_joint_names兼容。调整场景与相机修改configs/mvc/slamdunk.yaml的view.CAMERA_POS/CAMERA_FWD改变镜头替换BACKGROUND_IMAGE更换背景并可向scene.ANIMATED_CHARACTERS追加多个角色实现多角色同场。调整输出通过controller.OUTPUT_VIDEO_PATH与OUTPUT_VIDEO_CODEC控制导出位置与编码。需要说明的适用前提整套流程依赖 AnimatedDrawings 库与controlnet_aux姿态检测组件首次运行会下载 ControlNet 姿态检测权重角色姿态估计与视频渲染涉及 PyTorch 推理建议在具备 GPU 的环境下运行以获得流畅的渲染速度。七、引用论文作者为 Harrison Jesse Smith、Qingyuan Zheng、Yifei Li、Somya Jain、Jessica K. Hodgins完整 BibTeX 引用如下misc{smith2023method, title{A Method for Animating Childrens Drawings of the Human Figure}, author{Harrison Jesse Smith and Qingyuan Zheng and Yifei Li and Somya Jain and Jessica K. Hodgins}, year{2023}, eprint{2303.12741}, archivePrefix{arXiv}, primaryClass{cs.CV} }八、小结MMagic 的 Animated Drawings 项目用两个脚本与三份 YAML 配置完整复现了儿童人物画 → 姿态提取 → 角色骨架 → BVH 动作重定向 → 场景渲染的动画化流水线。其中generate_character.py借助 OpenPose 关键点自动构建带父子层级、可被动作驱动的角色骨架generate_video.py以render.start()一句调用拉起渲染而mvc / motion / retarget三层配置则把场景与相机、动作数据、重定向策略彻底解耦。无论是体验官方演示还是替换自己的画作与动作都可以在 projects/animated_drawings 目录内快速完成是理解静态图像 → 可驱动数字人类 AIGC 流水线的绝佳范例。赞分享媒体生成计算机视觉深度学习人工智能大模型【免费下载链接】mmagicOpenMMLab Multimodal Advanced, Generative, and Intelligent Creation Toolbox. Unlock the magic : Generative-AI (AIGC), easy-to-use APIs, awsome model zoo, diffusion models, for text-to-image generation, image/video restoration/enhancement, etc.项目地址https://gitcode.com/gh_mirrors/mm/mmagic点击查看免费下载相关推荐AnimatedDrawings 儿童简笔画动画化配置驱动动画渲染实战指南AnimatedDrawings 儿童简笔画动画化配置驱动动画渲染实战指南 导读 本文基于开源仓库 AnimatedDrawings论文 A Method计算机视觉图形学终极指南如何将真人视频转换为3D动漫角色动画终极指南如何将真人视频转换为3D动漫角色动画 OpenMMD是一款基于OpenPose的开源应用程序能够将真人视频转换为3D模型动画文件.vmd格式直人工智能计算机视觉3分钟上手jsonschema2md从安装到生成第一个Markdown文档的快速教程3分钟上手jsonschema2md从安装到生成第一个Markdown文档的快速教程 jsonschema2md是一款高效的JSON Schema转Markd上一篇U盘插上就能装系统用Rufus零基础做出属于自己的启动盘下一篇TimesFM驱动时间序列预测的强大基石创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考