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

前言

1 开发准备

详细准备步骤可参考华为开发者联盟官网:

配置AppGallery Connect-开发准备-Android-3D建模服务

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> task = engine.asyncAnalyseFrame(frame);
task.addOnSuccessListener(new OnSuccessListener>() {

@Override 
public void onSuccess(List results) { 
    // 检测成功。 
} 

}).addOnFailureListener(new OnFailureListener() {

@Override 
public void onFailure(Exception e) { 
    // 检测失败。 
} 

});

analyseFrame同步方法示例代码:

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

你可能感兴趣的:(java)