diff --git a/Sources/ConsoleApp/App.config b/Sources/ConsoleApp/App.config new file mode 100644 index 0000000..56efbc7 --- /dev/null +++ b/Sources/ConsoleApp/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Sources/ConsoleApp/ConsoleApp.csproj b/Sources/ConsoleApp/ConsoleApp.csproj new file mode 100644 index 0000000..e0bb9e2 --- /dev/null +++ b/Sources/ConsoleApp/ConsoleApp.csproj @@ -0,0 +1,67 @@ + + + + + Debug + AnyCPU + {27D9C879-52BB-4BD7-B08D-63A534AC6D7E} + Exe + ConsoleApp + ConsoleApp + v4.7.2 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.Kinect.2.0.1410.19000\lib\net45\Microsoft.Kinect.dll + + + + + + + + + + + + + + + + + + + + + {2496dfb1-eb55-47a1-a780-211e079b289d} + LibMyGesturesBank + + + {0751c83e-7845-4e5f-a5d3-e11aba393aca} + Lib + + + + \ No newline at end of file diff --git a/Sources/ConsoleApp/Program.cs b/Sources/ConsoleApp/Program.cs new file mode 100644 index 0000000..dc436f5 --- /dev/null +++ b/Sources/ConsoleApp/Program.cs @@ -0,0 +1,54 @@ +using Lib; +using LibMyGesturesBank; +using Microsoft.Kinect; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace ConsoleApp +{ + internal class Program + { + static void Main(string[] args) + { + KinectManager kinectManager = new KinectManager(); + if (!kinectManager.StartSensor()) + { + Console.WriteLine("Kinect n'est pas connecté ou non reconnu."); + return; + } + + // Créez les instances de vos postures + PostureHandUp handUpPosture = new PostureHandUp(); + PostureHandsOnHead handsOnHeadPosture = new PostureHandsOnHead(); + + // Abonnez-vous aux événements de reconnaissance de posture + handUpPosture.GestureRecognized += (sender, e) => + { + Console.WriteLine("Posture Hand Up reconnue !"); + }; + + handsOnHeadPosture.GestureRecognized += (sender, e) => + { + Console.WriteLine("Posture Hands On Head reconnue !"); + }; + + // Boucle pour tester les postures + while (true) + { + Body body = kinectManager.GetNextBody(); // Méthode fictive pour obtenir les données du corps + if (body != null) + { + handUpPosture.TestGesture(body); + handsOnHeadPosture.TestGesture(body); + } + + Thread.Sleep(50); // Une petite pause pour ne pas surcharger le CPU + } + } + + } +} diff --git a/Sources/ConsoleApp/Properties/AssemblyInfo.cs b/Sources/ConsoleApp/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..d40f227 --- /dev/null +++ b/Sources/ConsoleApp/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("ConsoleApp")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ConsoleApp")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("27d9c879-52bb-4bd7-b08d-63a534ac6d7e")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Sources/ConsoleApp/packages.config b/Sources/ConsoleApp/packages.config new file mode 100644 index 0000000..f7f19c3 --- /dev/null +++ b/Sources/ConsoleApp/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Sources/KinectSolution.sln b/Sources/KinectSolution.sln index d187b5e..9911da0 100644 --- a/Sources/KinectSolution.sln +++ b/Sources/KinectSolution.sln @@ -7,6 +7,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfApp", "WpfApp\WpfApp.csp EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lib", "Lib\Lib.csproj", "{0751C83E-7845-4E5F-A5D3-E11ABA393ACA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibMyGesturesBank", "LibMyGesturesBank\LibMyGesturesBank.csproj", "{2496DFB1-EB55-47A1-A780-211E079B289D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleApp", "ConsoleApp\ConsoleApp.csproj", "{27D9C879-52BB-4BD7-B08D-63A534AC6D7E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +25,14 @@ Global {0751C83E-7845-4E5F-A5D3-E11ABA393ACA}.Debug|Any CPU.Build.0 = Debug|Any CPU {0751C83E-7845-4E5F-A5D3-E11ABA393ACA}.Release|Any CPU.ActiveCfg = Release|Any CPU {0751C83E-7845-4E5F-A5D3-E11ABA393ACA}.Release|Any CPU.Build.0 = Release|Any CPU + {2496DFB1-EB55-47A1-A780-211E079B289D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2496DFB1-EB55-47A1-A780-211E079B289D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2496DFB1-EB55-47A1-A780-211E079B289D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2496DFB1-EB55-47A1-A780-211E079B289D}.Release|Any CPU.Build.0 = Release|Any CPU + {27D9C879-52BB-4BD7-B08D-63A534AC6D7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27D9C879-52BB-4BD7-B08D-63A534AC6D7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27D9C879-52BB-4BD7-B08D-63A534AC6D7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27D9C879-52BB-4BD7-B08D-63A534AC6D7E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Sources/Lib/KinectManager.cs b/Sources/Lib/KinectManager.cs index 1d100e9..ac50260 100644 --- a/Sources/Lib/KinectManager.cs +++ b/Sources/Lib/KinectManager.cs @@ -100,4 +100,4 @@ namespace Lib } } - } + } \ No newline at end of file diff --git a/Sources/LibMyGesturesBank/BaseGesture.cs b/Sources/LibMyGesturesBank/BaseGesture.cs new file mode 100644 index 0000000..7ba9866 --- /dev/null +++ b/Sources/LibMyGesturesBank/BaseGesture.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System; +using Microsoft.Kinect; + +namespace LibMyGesturesBank +{ + public abstract class BaseGesture + { + // Événement déclenché lorsque le geste est reconnu + public event EventHandler GestureRecognized; + + // Nom du geste - marqué comme virtual pour permettre la substitution + public virtual string GestureName { get; protected set; } + + // Méthode abstraite pour tester le geste + public abstract void TestGesture(Body body); + + // Méthode protégée pour déclencher l'événement GestureRecognized + protected virtual void OnGestureRecognized() + { + GestureRecognized?.Invoke(this, EventArgs.Empty); + } + } + + +} diff --git a/Sources/LibMyGesturesBank/LibMyGesturesBank.csproj b/Sources/LibMyGesturesBank/LibMyGesturesBank.csproj new file mode 100644 index 0000000..805bf1d --- /dev/null +++ b/Sources/LibMyGesturesBank/LibMyGesturesBank.csproj @@ -0,0 +1,63 @@ + + + + + Debug + AnyCPU + {2496DFB1-EB55-47A1-A780-211E079B289D} + Library + Properties + LibMyGesturesBank + LibMyGesturesBank + v4.7.2 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Microsoft.Kinect.2.0.1410.19000\lib\net45\Microsoft.Kinect.dll + + + + + + + + + + + + + + + + + + + + {0751c83e-7845-4e5f-a5d3-e11aba393aca} + Lib + + + + + + + \ No newline at end of file diff --git a/Sources/LibMyGesturesBank/Posture.cs b/Sources/LibMyGesturesBank/Posture.cs new file mode 100644 index 0000000..de00509 --- /dev/null +++ b/Sources/LibMyGesturesBank/Posture.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Microsoft.Kinect; +using System.Threading.Tasks; + +namespace LibMyGesturesBank +{ + + public abstract class Posture : BaseGesture + { + protected abstract bool TestPosture(Body body); + + public override void TestGesture(Body body) + { + if (TestPosture(body)) + { + // Posture is recognized + OnGestureRecognized(); + } + } + + // Ajoutez ici d'autres méthodes ou propriétés nécessaires + } + +} diff --git a/Sources/LibMyGesturesBank/PostureHandUp.cs b/Sources/LibMyGesturesBank/PostureHandUp.cs new file mode 100644 index 0000000..970f01e --- /dev/null +++ b/Sources/LibMyGesturesBank/PostureHandUp.cs @@ -0,0 +1,21 @@ +using Microsoft.Kinect; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LibMyGesturesBank +{ + public class PostureHandUp : Posture + { + 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; + } + + public override string GestureName => "Hand Up"; + } + +} diff --git a/Sources/LibMyGesturesBank/PostureHandsOnHead .cs b/Sources/LibMyGesturesBank/PostureHandsOnHead .cs new file mode 100644 index 0000000..34ea5b1 --- /dev/null +++ b/Sources/LibMyGesturesBank/PostureHandsOnHead .cs @@ -0,0 +1,37 @@ +using Microsoft.Kinect; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LibMyGesturesBank +{ + public class PostureHandsOnHead : Posture + { + 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]); + + // Condition pour la main gauche proche de la tête + bool leftHandNearHead = IsHandNearHead(body.Joints[JointType.HandLeft], body.Joints[JointType.Head]); + + return rightHandNearHead && leftHandNearHead; + } + + private bool IsHandNearHead(Joint hand, Joint head) + { + // Exemple de condition : la main est à moins de 30 cm de la tête + return 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)) < 0.3; + } + + public override string GestureName => "Hands On Head"; + + } + + +} diff --git a/Sources/LibMyGesturesBank/Properties/AssemblyInfo.cs b/Sources/LibMyGesturesBank/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..4138d3e --- /dev/null +++ b/Sources/LibMyGesturesBank/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Les informations générales relatives à un assembly dépendent de +// l'ensemble d'attributs suivant. Changez les valeurs de ces attributs pour modifier les informations +// associées à un assembly. +[assembly: AssemblyTitle("LibMyGesturesBank")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("LibMyGesturesBank")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// L'affectation de la valeur false à ComVisible rend les types invisibles dans cet assembly +// aux composants COM. Si vous devez accéder à un type dans cet assembly à partir de +// COM, affectez la valeur true à l'attribut ComVisible sur ce type. +[assembly: ComVisible(false)] + +// Le GUID suivant est pour l'ID de la typelib si ce projet est exposé à COM +[assembly: Guid("2496dfb1-eb55-47a1-a780-211e079b289d")] + +// Les informations de version pour un assembly se composent des quatre valeurs suivantes : +// +// Version principale +// Version secondaire +// Numéro de build +// Révision +// +// Vous pouvez spécifier toutes les valeurs ou indiquer les numéros de build et de révision par défaut +// en utilisant '*', comme indiqué ci-dessous : +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Sources/LibMyGesturesBank/packages.config b/Sources/LibMyGesturesBank/packages.config new file mode 100644 index 0000000..f7f19c3 --- /dev/null +++ b/Sources/LibMyGesturesBank/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Sources/WpfApp/MainWindow.xaml b/Sources/WpfApp/MainWindow.xaml index df5ebf5..88530fb 100644 --- a/Sources/WpfApp/MainWindow.xaml +++ b/Sources/WpfApp/MainWindow.xaml @@ -26,8 +26,12 @@