forked from homuler/MediaPipeUnityPlugin
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathHandTrackingSolution.cs
More file actions
118 lines (101 loc) · 4.74 KB
/
Copy pathHandTrackingSolution.cs
File metadata and controls
118 lines (101 loc) · 4.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Copyright (c) 2021 homuler
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Mediapipe.Unity.HandTracking
{
public class HandTrackingSolution : ImageSourceSolution<HandTrackingGraph>
{
[SerializeField] private DetectionListAnnotationController _palmDetectionsAnnotationController;
[SerializeField] private NormalizedRectListAnnotationController _handRectsFromPalmDetectionsAnnotationController;
[SerializeField] private MultiHandLandmarkListAnnotationController _handLandmarksAnnotationController;
[SerializeField] private NormalizedRectListAnnotationController _handRectsFromLandmarksAnnotationController;
public HandTrackingGraph.ModelComplexity modelComplexity
{
get => graphRunner.modelComplexity;
set => graphRunner.modelComplexity = value;
}
public int maxNumHands
{
get => graphRunner.maxNumHands;
set => graphRunner.maxNumHands = value;
}
public float minDetectionConfidence
{
get => graphRunner.minDetectionConfidence;
set => graphRunner.minDetectionConfidence = value;
}
public float minTrackingConfidence
{
get => graphRunner.minTrackingConfidence;
set => graphRunner.minTrackingConfidence = value;
}
protected override void OnStartRun()
{
if (!runningMode.IsSynchronous())
{
graphRunner.OnPalmDetectectionsOutput += OnPalmDetectionsOutput;
graphRunner.OnHandRectsFromPalmDetectionsOutput += OnHandRectsFromPalmDetectionsOutput;
graphRunner.OnHandLandmarksOutput += OnHandLandmarksOutput;
// TODO: render HandWorldLandmarks annotations
graphRunner.OnHandRectsFromLandmarksOutput += OnHandRectsFromLandmarksOutput;
graphRunner.OnHandednessOutput += OnHandednessOutput;
}
var imageSource = ImageSourceProvider.ImageSource;
SetupAnnotationController(_palmDetectionsAnnotationController, imageSource, true);
SetupAnnotationController(_handRectsFromPalmDetectionsAnnotationController, imageSource, true);
SetupAnnotationController(_handLandmarksAnnotationController, imageSource, true);
SetupAnnotationController(_handRectsFromLandmarksAnnotationController, imageSource, true);
}
protected override void AddTextureFrameToInputStream(TextureFrame textureFrame)
{
graphRunner.AddTextureFrameToInputStream(textureFrame);
}
protected override IEnumerator WaitForNextValue()
{
List<Detection> palmDetections = null;
List<NormalizedRect> handRectsFromPalmDetections = null;
List<NormalizedLandmarkList> handLandmarks = null;
List<LandmarkList> handWorldLandmarks = null;
List<NormalizedRect> handRectsFromLandmarks = null;
List<ClassificationList> handedness = null;
if (runningMode == RunningMode.Sync)
{
var _ = graphRunner.TryGetNext(out palmDetections, out handRectsFromPalmDetections, out handLandmarks, out handWorldLandmarks, out handRectsFromLandmarks, out handedness, true);
}
else if (runningMode == RunningMode.NonBlockingSync)
{
yield return new WaitUntil(() => graphRunner.TryGetNext(out palmDetections, out handRectsFromPalmDetections, out handLandmarks, out handWorldLandmarks, out handRectsFromLandmarks, out handedness, false));
}
_palmDetectionsAnnotationController.DrawNow(palmDetections);
_handRectsFromPalmDetectionsAnnotationController.DrawNow(handRectsFromPalmDetections);
_handLandmarksAnnotationController.DrawNow(handLandmarks, handedness);
// TODO: render HandWorldLandmarks annotations
_handRectsFromLandmarksAnnotationController.DrawNow(handRectsFromLandmarks);
}
private void OnPalmDetectionsOutput(object stream, OutputEventArgs<List<Detection>> eventArgs)
{
_palmDetectionsAnnotationController.DrawLater(eventArgs.value);
}
private void OnHandRectsFromPalmDetectionsOutput(object stream, OutputEventArgs<List<NormalizedRect>> eventArgs)
{
_handRectsFromPalmDetectionsAnnotationController.DrawLater(eventArgs.value);
}
private void OnHandLandmarksOutput(object stream, OutputEventArgs<List<NormalizedLandmarkList>> eventArgs)
{
_handLandmarksAnnotationController.DrawLater(eventArgs.value);
}
private void OnHandRectsFromLandmarksOutput(object stream, OutputEventArgs<List<NormalizedRect>> eventArgs)
{
_handRectsFromLandmarksAnnotationController.DrawLater(eventArgs.value);
}
private void OnHandednessOutput(object stream, OutputEventArgs<List<ClassificationList>> eventArgs)
{
_handLandmarksAnnotationController.DrawLater(eventArgs.value);
}
}
}