Pose detection on ScanningView (#57)
author손광훈/Tizen Platform Lab(SR)/Engineer/삼성전자 <k.son@samsung.com>
Mon, 7 Jun 2021 13:00:13 +0000 (22:00 +0900)
committerPiotr Czaja <p.czaja@samsung.com>
Tue, 14 Sep 2021 11:01:34 +0000 (13:01 +0200)
* Pose detection on ScanningView
* Fix hard-coded frame size
* Fix hard-coded frame plane

Fitness/Views/ScanningView.cs

index 381130597484c36259451e2e74eee0b7d6904036..fc2b842c498add9c641b11dd35d17eb4c1dc0b7c 100644 (file)
@@ -1,5 +1,7 @@
-using Fitness.Controls;
-using Tizen.NUI.BaseComponents;
+using System.Threading;
+using System.Threading.Tasks;
+using Fitness.Services;
+using Tizen.Multimedia;
 
 namespace Fitness.Views
 {
@@ -8,12 +10,18 @@ namespace Fitness.Views
     /// </summary>
     public partial class ScanningView : Fitness.Controls.Page
     {
+        private PoseDetector poseDetector;
+        private int isInferencing;
+
         /// <summary>
         /// Initializes a new instance of the <see cref="ScanningView"/> class.
         /// </summary>
         public ScanningView()
         {
             InitializeComponent();
+            poseDetector = new PoseDetector();
+            isInferencing = 0;
+            cameraView.Preview += DetectPreview;
         }
 
         /// <summary>
@@ -23,8 +31,20 @@ namespace Fitness.Views
         {
             if (cameraView.PreviewState == Tizen.Multimedia.CameraState.Preview)
             {
+                cameraView.Preview -= DetectPreview;
                 cameraView.StopPreview();
             }
         }
+
+        private async void DetectPreview(object sender, PreviewEventArgs e)
+        {
+            if (e.Preview.PlaneType == PlaneType.TriplePlane && Interlocked.Exchange(ref isInferencing, 1) == 0)
+            {
+                await Task.Run(() => poseDetector.Detect(e.Preview.Plane as TriplePlane, (uint)e.Preview.Resolution.Height, (uint)e.Preview.Resolution.Width));
+                Interlocked.Exchange(ref isInferencing, 0);
+
+                // TODO: draw line
+            }
+        }
     }
 }