静态模型一键动态化,教你如何集成动作捕捉能力
有趣的静态模型动态化是如何实现的?
华为3D建模服务(3D Modeling Kit)的动作捕捉能力,利用人体检测技术以及模型加速与压缩技术、基于深度学习的单目姿态估计算法,仅需要普通手机的RGB摄像头,就可以捕获人体24个骨骼关键点三维信息,轻松实现静态模型动态化,让我们的模型更加生动鲜活。
想要实现此功能也很简单,一起看下集成步骤吧!
应用场景
该服务广泛应用于3D内容制作领域,特别是游戏、影视、医疗等行业。例如,UGC游戏中角色的驱动及动画视频制作,虚拟主播的实时驱动,医疗行业的康复指导等。
集成代码
1 开发准备
详细准备步骤可参考华为开发者联盟官网:
配置AppGallery Connect-开发准备-Android-3D建模服务 (huawei.com)
2 编辑工程集成
在开始API开发工作之前,您需要先3.3.1 配置AppGallery Connect,同时请确保您的工程中已经配置HMS Core SDK的Maven仓地址,并且完成了本服务的3.3.2 集成HMS Core SDK。
2.1创建动作捕捉引擎。
// 自定义参数配置。
Modeling3dMotionCaptureEngineSetting setting = new Modeling3dMotionCaptureEngineSetting.Factory()
// 设置检测模式。
// Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON_QUATERNION:输出人体姿态对应的骨骼点四元数。
// Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON:输出人体姿态对应的骨骼点坐标。
.setAnalyzeType(Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON_QUATERNION
| Modeling3dMotionCaptureEngineSetting.TYPE_3DSKELETON)
.create();
Modeling3dMotionCaptureEngine engine = Modeling3dMotionCaptureEngineFactory.getInstance().getMotionCaptureEngine(setting);
Modeling3dFrame封装了源自相机的视频帧或静态图片数据,以及相关的数据处理逻辑。
您可以自行处理视频流,将视频帧转换为Modeling3dFrame对象,用于检测视频帧,支持NV21格式。
通过android.graphics.Bitmap创建Modeling3dFrame对象,用于动作捕捉引擎检测图片,支持的图片格式包括:JPG/JPEG/PNG。
// 通过bitmap创建Modeling3dFrame。
Modeling3dFrame frame = Modeling3dFrame.fromBitmap(bitmap);
// 通过视频帧创建Modeling3dFrame。
Modeling3dFrame.Property property = new Modeling3dFrame.Property.Creator().setFormatType(ImageFormat.NV21)
// 设置视频帧宽度。
.setWidth(width)
// 设置视频帧高度。
.setHeight(height)
// 设置视频帧旋转角度。
.setQuadrant(quadant)
// 设置视频帧序号。
.setItemIdentity(framIndex)
.create();
Modeling3dFrame frame = Modeling3dFrame.fromByteBuffer(byteBuffer, property);
2.2调用同步或异步方法进行动作捕捉检测。
asyncAnalyseFrame异步方法示例代码:
Task<List<Modeling3dMotionCaptureSkeleton>> task = engine.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener<List<Modeling3dMotionCaptureSkeleton>>() {
@Override
public void onSuccess(List<Modeling3dMotionCaptureSkeleton> results) {
// 检测成功。
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(Exception e) {
// 检测失败。
}
});
analyseFrame同步方法示例代码:
SparseArray<Modeling3dMotionCaptureSkeleton> sparseArray = engine.analyseFrame(frame);
for (int i = 0; i < sparseArray.size(); i++) {
// 检测结果处理。
};
2.3检测完成,停止引擎,释放检测资源。
try {
if (engine != null) {
engine.stop();
}
} catch (IOException e) {
// 异常处理。
}
Demo演示
集成开发过程中,您有任何问题都可以在线提单,将有专人为您解答。
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
相关文章
- NETs相关基因构建预后模型干湿结合发12分+SCI
- 用 Minio 快速启动 Velero 实现 Kubernetes资源备份
- MySQL(1) - 用户管理及root密码修改
- Jmeter系列(40)- 详解 Jmeter 图形化 HTML 压测报告
- Jmeter系列(39)- 详解 Jmeter CLI 模式
- Jmeter系列(38)- Jmeter 分布式测试
- Jmeter系列(37)- 跨平台运行 Jmeter,CSV 文件路径设置
- Jenkins操作手册 - 巨详细,一篇足矣!
- 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务是否健康
- 【Spring专题】「开发指南」夯实实战基础功底之解读logback-spring.xml文件的详解实现
- 精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)
- 【深入浅出Spring原理及实战】「源码原理实战」从底层角度去分析研究PropertySourcesPlaceholderConfigurer的原理及实战注入机制
- 精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景
- 深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑点分析(攻克盲点及混淆点)「 1 」
- 【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
- 【深入浅出SpringCloud原理及实战】「SpringCloud-Alibaba系列」微服务模式搭建系统基础架构实战指南及版本规划踩坑分析
- 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析
- 作者推荐 | 【分布式技术专题】「架构设计方案」图解学习法总结集群模式下的各种软负载均衡策略实现及原理分析
- 【分布式技术专题】「架构设计方案」盘点和总结秒杀服务的功能设计及注意事项技术体系
- Kafka技术专题之「性能调优篇」消息队列服务端出现内存溢出OOM以及相关性能调优实战分析