前言

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<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) {     // 异样解决。 }