| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> Pose Animator:使用实时TensorFlow.js模型的SVG动画工具 -> 正文阅读 |
|
[Python知识库]Pose Animator:使用实时TensorFlow.js模型的SVG动画工具 |
背景PoseNet和Facemesh(来自Mediapipe)TensorFlow.js 模型通过一个简单的网络摄像头使浏览器中的实时人类感知成为可能。作为一名努力掌握复杂的角色动画艺术的动画爱好者,我看到了希望,并且非常兴奋地尝试使用这些模型进行交互式身体控制动画。结果就是Pose Animator,这是一个开源网络动画工具,它通过网络摄像头的身体检测结果使 SVG 角色栩栩如生。这篇博文涵盖了 Pose Animator 的技术设计,以及设计师创建和动画化自己的角色的步骤。 将 FaceMesh 和 PoseNet 与 TensorFlow.js 一起使用来制作全身角色动画Pose Animator 的总体思路是采用 2D 矢量图,并根据 PoseNet 和 FaceMesh 的识别结果实时更新其包含的曲线。为了实现这一点,Pose Animator 从计算机图形学中借鉴了基于骨架的动画的思想,并将其应用于矢量角色。 在骨骼动画中,角色由两部分表示:
在 Pose Animator 中,表面由输入 SVG 文件中的 2D 矢量路径定义。对于骨骼结构,Pose Animator 基于来自 PoseNet 和 FaceMesh 的关键点提供预定义的绑定(骨骼层次)表示。此骨骼结构的初始姿势与字符插图一起在输入 SVG 文件中指定,而实时骨骼位置由 ML 模型的识别结果更新。 ?来自 PoseNet(蓝色)和 FaceMesh(红色)的检测关键点 查看这些步骤,为 Pose Animator 创建您自己的 SVG 角色。 ?由 PoseNet 和 FaceMesh 控制的动画贝塞尔曲线? 索具流程概述完整的装配(骨架绑定)流程需要以下步骤:
钻机定义rig 结构是根据 PoseNet 和 FaceMesh 的输出关键点设计的。PoseNet 返回全身的 17 个关键点,这很简单,可以直接包含在 rig 中。然而,FaceMesh 提供了 486 个关键点,所以我需要更有选择性地选择要包含的关键点。最后,我从 FaceMesh 输出中选择了 73 个关键点,我们得到了一个包含 90 个关键点和 78 个骨骼的全身装备,如下所示:
矢量路径的线性混合蒙皮Pose Animator 使用最常见的绑定算法之一来使用骨架结构变形曲面 - 线性混合蒙皮 (LBS),它通过将由每个骨骼单独控制的变换混合在一起来变换曲面上的顶点,并由每个骨骼的影响加权。在我们的例子中,顶点指的是矢量路径上的锚点,骨骼由上述绑定中的两个连接的关键点定义(例如,“leftWrist”和“leftElbow”关键点定义骨骼“leftWrist-leftElbow”)。代入数学公式,顶点vi'的世界空间位置计算为 其中 - w?i是骨骼 i 对顶点 i 的影响, - v?i描述了顶点 i 的初始位置, - T?j描述了将骨骼 j 的初始姿势与其当前姿势对齐的空间变换。 骨骼的影响可以通过权重绘制自动生成或手动分配。Pose Animator 目前仅支持自动权重分配。骨骼 j 对顶点 i 的原始影响计算如下: 其中 d 是 vi 到骨骼 j 上最近点的距离。最后,我们将一个顶点的所有骨骼的权重归一化,使其总和为 1。 现在,要将 LBS 应用于由直线和贝塞尔曲线组成的 2D 矢量路径,我们需要对带有输入和输出手柄的贝塞尔曲线段进行一些特殊处理。我们需要分别计算曲线点、入控制点和出控制点的权重。这会产生更好看的结果,因为控制点的骨骼影响被更准确地捕获。 共线曲线手柄共享相同的权重以保持共线? 运动稳定虽然 LBS 已经为我们提供了动画帧,但 FaceMesh 和 PoseNet 原始输出引入了明显的抖动量。为了减少抖动并获得更平滑的动画,我们可以使用预测结果的置信度分数来不均匀地加权每个输入帧,从而减少对低置信度帧的影响。按照这个想法,Pose Animator 计算关节 i 在帧 t 处的平滑位置为 其中
基于置信度分数的剪裁 除了用置信度分数对关节位置进行插值外,我们还引入了一个最小阈值来决定是否应该渲染路径。路径的置信度得分是其分段点的平均置信度得分,而这又是影响骨骼得分的加权平均值。当特定帧的分数低于某个阈值时,整个路径将被隐藏。 这对于隐藏低置信区域中的路径很有用,这些区域通常是相机视图之外的身体部位。想象一个上半身镜头:PoseNet 将始终返回腿部和臀部的关键点预测,尽管它们的置信度得分较低。使用这种夹紧机制,我们可以确保下半身部分被正确隐藏,而不是显示为奇怪扭曲的路径。 展望未来网格化或不网格化当前的绑定算法主要集中在 2D 曲线上。这是因为由 PoseNet 和 FaceMesh 构建的 2D 装备具有大范围的运动和不同的骨骼长度——这与游戏中骨骼具有相对固定长度的动画不同。我目前从变形贝塞尔曲线得到比从输入路径变形三角网格更平滑的结果,因为贝塞尔曲线更好地保持输入线的曲率/直线度。我热衷于改进网格的绑定算法。此外,我想探索一种比线性混合蒙皮更高级的绑定算法,它有一些限制,例如弯曲区域周围的体积变薄。 新的编辑功能Pose Animator 将插图编辑委托给 Illustrator 等设计软件,这些软件在编辑矢量图形方面功能强大,但不适用于动画/蒙皮要求。我想通过浏览器内的 UI 支持更多的动画功能,包括:
自己试试吧!试用现场演示,您可以在其中玩现有角色,或添加您自己的 SVG 角色,让它们栩栩如生。 参考网址 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 11:51:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |