MoveNet 3D
Realtime 3D pose tracking with MoveNet in augmented reality with ARFoundation.
Installing MoveNet 3D
Add the following items to your Unity project's Packages/manifest.json
:
{
"scopedRegistries": [
{
"name": "NatML",
"url": "https://registry.npmjs.com",
"scopes": ["ai.fxn", "ai.natml"]
}
],
"dependencies": {
"ai.natml.vision.movenet-3d": "1.0.2"
}
}
Predicting 3D Pose in Augmented Reality
These steps assume that you are starting with an AR scene in Unity with an ARSession
and ARSessionOrigin
. In your pose detection script, first create the MoveNet 3D predictor:
MoveNet3DPredictor predictor;
async void Start () {
predictor = await MoveNet3DPredictor.Create();
}
Then in Update
, acquire the latest CPU camera image and depth image from ARFoundation, then predict the pose:
public Camera arCamera;
public ARCameraManager cameraManager;
public AROcclusionManager occlusionManager;
void Update () {
if (cameraManager.TryAcquireLatestCpuImage(out var image))
if (occlusionManager.TryAcquireEnvironmentDepthCpuImage(out var depth)) {
var imageType = image.GetFeatureType();
var imageFeature = new MLImageFeature(imageType.width, imageType.height);
imageFeature.CopyFrom(image);
var depthFeature = new MLXRCpuDepthFeature(depth, arCamera);
MoveNet3DPredictor.Pose pose = predictor.Predict(imageFeature, depthFeature);
}
}
The pose contains 3D world positions for each detected keypoint.
Note that on older iOS devices that don't support environment depth, you can use the human depth image instead which is supported by iPhone XS/XR or newer.
Requirements
Quick Tips
Thank you very much!