diff --git a/Sources/LibMyGesturesBank/ClapHands.cs b/Sources/LibMyGesturesBank/ClapHands.cs
new file mode 100644
index 0000000..c1b6e81
--- /dev/null
+++ b/Sources/LibMyGesturesBank/ClapHands.cs
@@ -0,0 +1,44 @@
+using KinectUtils;
+using Microsoft.Kinect;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LibMyGesturesBank
+{
+ public class ClapHands : Gesture
+ {
+ protected override bool TestInitialConditions(Body body)
+ {
+ // Les conditions initiales ne sont pas strictes pour un clap, on commence donc directement avec TestPosture et TestRunningGesture
+ return true;
+ }
+
+ protected override bool TestPosture(Body body)
+ {
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var handLeft = body.Joints[JointType.HandLeft].Position;
+
+ // Vérifie si les mains sont à une hauteur similaire et devant le corps
+ return Math.Abs(handRight.Y - handLeft.Y) < 0.1f && handRight.Z < 0.5f && handLeft.Z < 0.5f;
+ }
+
+ protected override bool TestRunningGesture(Body body)
+ {
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var handLeft = body.Joints[JointType.HandLeft].Position;
+
+ // Vérifie si les mains se sont rencontrées au centre
+ return Math.Abs(handRight.X - handLeft.X) < 0.1f;
+ }
+
+ protected override bool TestEndConditions(Body body)
+ {
+ // Le clap est un geste instantané, donc si les conditions sont remplies une fois, le geste est considéré comme terminé
+ return true;
+ }
+ }
+
+}
diff --git a/Sources/LibMyGesturesBank/MyGesturesBank.csproj b/Sources/LibMyGesturesBank/MyGesturesBank.csproj
index 0601293..562b0da 100644
--- a/Sources/LibMyGesturesBank/MyGesturesBank.csproj
+++ b/Sources/LibMyGesturesBank/MyGesturesBank.csproj
@@ -44,6 +44,7 @@
+
@@ -52,6 +53,10 @@
+
+ {2d44487e-f514-4063-9494-2af1e8c9e9c8}
+ KinectUtils
+
{0751c83e-7845-4e5f-a5d3-e11aba393aca}
Lib
diff --git a/Sources/LibMyGesturesBank/PostureHandUp.cs b/Sources/LibMyGesturesBank/PostureHandUp.cs
index 54b1a6e..38f5861 100644
--- a/Sources/LibMyGesturesBank/PostureHandUp.cs
+++ b/Sources/LibMyGesturesBank/PostureHandUp.cs
@@ -7,11 +7,13 @@ namespace MyGesturesBank
{
protected override bool TestPosture(Body body)
{
- // Exemple de condition : la main droite est plus haute que l'épaule droite
- return body.Joints[JointType.HandRight].Position.Y > body.Joints[JointType.ShoulderRight].Position.Y;
- }
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var handLeft = body.Joints[JointType.HandLeft].Position;
+ var head = body.Joints[JointType.Head].Position;
- public override string GestureName => "Hand Up";
+ return handRight.Y > head.Y || handLeft.Y > head.Y;
+ }
}
+
}
diff --git a/Sources/LibMyGesturesBank/PostureHandsOnHead .cs b/Sources/LibMyGesturesBank/PostureHandsOnHead .cs
index 4b8df45..239eee1 100644
--- a/Sources/LibMyGesturesBank/PostureHandsOnHead .cs
+++ b/Sources/LibMyGesturesBank/PostureHandsOnHead .cs
@@ -8,27 +8,15 @@ namespace MyGesturesBank
{
protected override bool TestPosture(Body body)
{
- // Condition pour la main droite proche de la tête
- bool rightHandNearHead = IsHandNearHead(body.Joints[JointType.HandRight], body.Joints[JointType.Head]);
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var handLeft = body.Joints[JointType.HandLeft].Position;
+ var head = body.Joints[JointType.Head].Position;
- // Condition pour la main gauche proche de la tête
- bool leftHandNearHead = IsHandNearHead(body.Joints[JointType.HandLeft], body.Joints[JointType.Head]);
+ // Ajustez les seuils selon la précision souhaitée
+ var threshold = 0.1f; // Seuil pour ajuster la précision de la détection
- return rightHandNearHead && leftHandNearHead;
+ return Math.Abs(handRight.Y - head.Y) < threshold && Math.Abs(handLeft.Y - head.Y) < threshold;
}
-
- private bool IsHandNearHead(Joint hand, Joint head)
- {
- // Exemple de condition : la main est à moins de 30 cm de la tête
- double distance = Math.Sqrt(
- Math.Pow(hand.Position.X - head.Position.X, 2) +
- Math.Pow(hand.Position.Y - head.Position.Y, 2) +
- Math.Pow(hand.Position.Z - head.Position.Z, 2));
- return distance < 0.3 && distance > 0;
- }
-
- public override string GestureName => "Hands On Head";
-
}
diff --git a/Sources/LibMyGesturesBank/RightHandUp.cs b/Sources/LibMyGesturesBank/RightHandUp.cs
index 1c6734a..8de2ef5 100644
--- a/Sources/LibMyGesturesBank/RightHandUp.cs
+++ b/Sources/LibMyGesturesBank/RightHandUp.cs
@@ -1,4 +1,6 @@
-using System;
+using KinectUtils;
+using Microsoft.Kinect;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,7 +8,15 @@ using System.Threading.Tasks;
namespace MyGesturesBank
{
- internal class RightHandUp
+ public class RightHandUp : Posture
{
+ protected override bool TestPosture(Body body)
+ {
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var head = body.Joints[JointType.Head].Position;
+
+ return handRight.Y > head.Y;
+ }
}
+
}
diff --git a/Sources/LibMyGesturesBank/SwipeRightHand.cs b/Sources/LibMyGesturesBank/SwipeRightHand.cs
index d58ddd0..c4c8eeb 100644
--- a/Sources/LibMyGesturesBank/SwipeRightHand.cs
+++ b/Sources/LibMyGesturesBank/SwipeRightHand.cs
@@ -10,28 +10,50 @@ namespace MyGesturesBank
{
public class SwipeRightHand : Gesture
{
+
+ private float previousX = float.NaN;
+
protected override bool TestInitialConditions(Body body)
{
- // Implémentez la logique pour vérifier les conditions initiales du balayage à droite
- return false;
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var shoulderRight = body.Joints[JointType.ShoulderRight].Position;
+
+ // Conditions initiales : main droite au niveau ou à droite de l'épaule droite, mais pas trop éloignée
+ return handRight.X >= shoulderRight.X && handRight.X - shoulderRight.X < 0.5f;
}
protected override bool TestPosture(Body body)
{
- // Implémentez la vérification de la posture pour le balayage à droite
- return false;
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var head = body.Joints[JointType.Head].Position;
+
+ // La main droite ne doit pas être plus haute que la tête
+ return handRight.Y <= head.Y;
}
protected override bool TestRunningGesture(Body body)
{
- // Implémentez la dynamique du geste de balayage à droite
+ var handRight = body.Joints[JointType.HandRight].Position.X;
+
+ if (!float.IsNaN(previousX))
+ {
+ // Vérifie si la main droite se déplace vers la droite
+ bool isMovingRight = handRight > previousX;
+ previousX = handRight;
+ return isMovingRight;
+ }
+
+ previousX = handRight;
return false;
}
protected override bool TestEndConditions(Body body)
{
- // Vérifiez si les conditions de fin du geste de balayage à droite sont remplies
- return false;
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var spineBase = body.Joints[JointType.SpineBase].Position;
+
+ // Condition de fin : la main droite est bien à droite de la base de la colonne vertébrale
+ return handRight.X > spineBase.X + 0.5f; // Ajustez cette valeur selon le besoin
}
}
diff --git a/Sources/LibMyGesturesBank/TwoHandsDragon.cs b/Sources/LibMyGesturesBank/TwoHandsDragon.cs
index 6cafd63..db3a161 100644
--- a/Sources/LibMyGesturesBank/TwoHandsDragon.cs
+++ b/Sources/LibMyGesturesBank/TwoHandsDragon.cs
@@ -1,4 +1,6 @@
-using System;
+using KinectUtils;
+using Microsoft.Kinect;
+using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -6,7 +8,16 @@ using System.Threading.Tasks;
namespace MyGesturesBank
{
- internal class TwoHandsDragon
+ public class TwoHandsDragon : Posture
{
+ protected override bool TestPosture(Body body)
+ {
+ var handRight = body.Joints[JointType.HandRight].Position;
+ var handLeft = body.Joints[JointType.HandLeft].Position;
+ var head = body.Joints[JointType.Head].Position;
+
+ return handRight.Y > head.Y && handLeft.Y > head.Y;
+ }
}
+
}