静态模型一键动态化,教你如何集成动作捕捉能力

发布者:HarmonyOS SDK
发布于:2022-03-10 15:30

有趣的静态模型动态化是如何实现的?

 

华为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创建动作捕捉引擎。
1
2
3
4
5
6
7
8
9
// 自定义参数配置。
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。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 通过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异步方法示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
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同步方法示例代码:

1
2
3
4
SparseArray<Modeling3dMotionCaptureSkeleton> sparseArray = engine.analyseFrame(frame);
for (int i = 0; i < sparseArray.size(); i++) {
    // 检测结果处理。
};
2.3检测完成,停止引擎,释放检测资源。
1
2
3
4
5
6
7
try {
    if (engine != null) {
        engine.stop();
    }
} catch (IOException e) {
    // 异常处理。
}

Demo演示

 

 

集成开发过程中,您有任何问题都可以在线提单,将有专人为您解答。

 

了解更多详情>>

 

访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHubGitee

 

关注我们,第一时间了解 HMS Core 最新技术资讯~


声明:该文观点仅代表作者本人,转载请注明来自看雪