@@ -8,54 +8,47 @@ namespace NatML.Examples {
88 using UnityEngine ;
99 using NatML . Devices ;
1010 using NatML . Devices . Outputs ;
11+ using NatML . VideoKit ;
1112 using NatML . Vision ;
1213 using Visualizers ;
1314
1415 public sealed class BlazePoseSample : MonoBehaviour {
1516
17+ [ Header ( @"VideoKit" ) ]
18+ public VideoKitCameraManager cameraManager ;
19+
1620 [ Header ( @"Visualizers" ) ]
1721 public LandmarkVisualizer visualizer ;
1822 public Landmark3DVisualizer visualizer3D ;
1923
20- CameraDevice cameraDevice ;
21- TextureOutput cameraTextureOutput ;
22- BlazePosePipeline posePipeline ;
24+ private BlazePosePipeline pipeline ;
2325
24- async void Start ( ) {
25- // Request camera permissions
26- var permissionStatus = await MediaDeviceQuery . RequestPermissions < CameraDevice > ( ) ;
27- if ( permissionStatus != PermissionStatus . Authorized ) {
28- Debug . Log ( @"User did not grant camera permissions" ) ;
29- return ;
30- }
31- // Get a camera device
32- var query = new MediaDeviceQuery ( MediaDeviceCriteria . CameraDevice ) ;
33- cameraDevice = query . current as CameraDevice ;
34- // Start the camera preview
35- cameraTextureOutput = new TextureOutput ( ) ;
36- cameraDevice . StartRunning ( cameraTextureOutput ) ;
37- // Display the preview
38- await cameraTextureOutput . textureCreated ;
39- visualizer . image = cameraTextureOutput . texture ;
26+ private async void Start ( ) {
4027 // Create the BlazePose pipeline
4128 var detectorModelData = await MLModelData . FromHub ( "@natml/blazepose-detector" ) ;
4229 var predictorModelData = await MLModelData . FromHub ( "@natml/blazepose-landmark" ) ;
43- posePipeline = new BlazePosePipeline ( detectorModelData , predictorModelData , maxDetections : 1 ) ;
30+ pipeline = new BlazePosePipeline ( detectorModelData , predictorModelData , maxDetections : 1 ) ;
31+ // Listen for camera frames
32+ cameraManager . OnFrame . AddListener ( OnCameraFrame ) ;
4433 }
4534
46- void Update ( ) {
47- // Check that pipeline has been created
48- if ( posePipeline == null )
49- return ;
35+ private void OnCameraFrame ( CameraFrame frame ) {
5036 // Predict
51- var poses = posePipeline . Predict ( cameraTextureOutput . texture ) ;
52- // Visualize
37+ var poses = pipeline . Predict ( frame ) ;
38+ // Check
5339 if ( poses . Length == 0 )
5440 return ;
41+ // Visualize
5542 var pose = poses [ 0 ] ;
56- visualizer . Clear ( ) ;
57- visualizer . Render ( pose . keypoints , Color . green ) ;
43+ visualizer . Render ( pose . keypoints ) ;
5844 visualizer3D . Render ( pose . keypoints3D ) ;
5945 }
46+
47+ private void OnDisable ( ) {
48+ // Stop listening for camera frames
49+ cameraManager . OnFrame . RemoveListener ( OnCameraFrame ) ;
50+ // Dispose the pipeline
51+ pipeline ? . Dispose ( ) ;
52+ }
6053 }
6154}
0 commit comments