|
39
|
1 |
/* |
|
37
|
2 |
* This file is part of the TraKERS\Middleware package. |
|
|
3 |
* |
|
|
4 |
* (c) IRI <http://www.iri.centrepompidou.fr/> |
|
|
5 |
* |
|
|
6 |
* For the full copyright and license information, please view the LICENSE |
|
|
7 |
* file that was distributed with this source code. |
|
|
8 |
*/ |
|
|
9 |
|
|
|
10 |
/* |
|
|
11 |
* Projet : TraKERS |
|
|
12 |
* Module : MIDDLEWARE |
|
|
13 |
* Sous-Module : Tracking/Postures |
|
|
14 |
* Classe : BendDetector |
|
|
15 |
* |
|
|
16 |
* Auteur : alexandre.bastien@iri.centrepompidou.fr |
|
|
17 |
* |
|
|
18 |
* Fonctionnalités : Permet de détecter si l'utilisateur est bien tracké. |
|
|
19 |
*/ |
|
|
20 |
|
|
|
21 |
using System; |
|
|
22 |
using System.Collections.Generic; |
|
|
23 |
using System.Linq; |
|
|
24 |
using Microsoft.Kinect; |
|
|
25 |
using Trakers.Debug; |
|
|
26 |
|
|
|
27 |
namespace Trakers.Tracking.Postures |
|
|
28 |
{ |
|
|
29 |
public class CorrectPosture : PostureDetector |
|
|
30 |
{ |
|
|
31 |
public CorrectPosture(DebugWindow _debug) |
|
|
32 |
: base(_debug) |
|
|
33 |
{ |
|
|
34 |
} |
|
|
35 |
|
|
|
36 |
/* |
|
|
37 |
* Méthode de détection du penché. |
|
|
38 |
*/ |
|
|
39 |
public bool CheckForCorrectPosture() |
|
|
40 |
{ |
|
|
41 |
//Crée un état local afin de pouvoir analyser s'il y a une posture. |
|
|
42 |
List<Joint> localState = new List<Joint>(currentState); |
|
|
43 |
|
|
|
44 |
bool c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13; |
|
|
45 |
|
|
|
46 |
//Si les genoux sont plus hauts que le centre |
|
|
47 |
//OU si les pieds sont plus hauts que le centre |
|
|
48 |
//OU si la tête est plus basse que les hanches |
|
|
49 |
//OU si les épaules sont plus basses que les genoux |
|
|
50 |
//OU si les épaules droites et gauches sont trop proches |
|
|
51 |
//OU si les genoux droites et gauches sont trop proches |
|
|
52 |
//OU si les pieds sont plus hauts que les genoux, les genoux étant plus bas que le bassin |
|
|
53 |
//OU si les genoux sont inversés par rapport aux épaules |
|
|
54 |
//Alors on ne s'est pas tracké. |
|
|
55 |
c1 = localState[(int)JointType.KneeLeft].Position.Y < localState[(int)JointType.Spine].Position.Y; |
|
|
56 |
c2 = localState[(int)JointType.KneeRight].Position.Y < localState[(int)JointType.Spine].Position.Y; |
|
|
57 |
c3 = localState[(int)JointType.FootLeft].Position.Y < localState[(int)JointType.Spine].Position.Y; |
|
|
58 |
c4 = localState[(int)JointType.FootRight].Position.Y < localState[(int)JointType.Spine].Position.Y; |
|
|
59 |
c5 = localState[(int)JointType.Head].Position.Y > localState[(int)JointType.HipCenter].Position.Y; |
|
|
60 |
c6 = localState[(int)JointType.ShoulderCenter].Position.Y > localState[(int)JointType.KneeLeft].Position.Y; |
|
|
61 |
c7 = localState[(int)JointType.ShoulderCenter].Position.Y > localState[(int)JointType.KneeRight].Position.Y; |
|
|
62 |
c8 = Math.Abs(localState[(int)JointType.ShoulderLeft].Position.X - localState[(int)JointType.ShoulderRight].Position.X) < 0.20; |
|
|
63 |
c9 = Math.Abs(localState[(int)JointType.KneeLeft].Position.X - localState[(int)JointType.KneeRight].Position.X) < 0.20; |
|
|
64 |
c10 = localState[(int)JointType.FootLeft].Position.Y < localState[(int)JointType.KneeLeft].Position.Y && localState[(int)JointType.KneeLeft].Position.Y > localState[(int)JointType.HipCenter].Position.Y; |
|
|
65 |
c11 = localState[(int)JointType.FootRight].Position.Y < localState[(int)JointType.KneeRight].Position.Y && localState[(int)JointType.KneeRight].Position.Y > localState[(int)JointType.HipCenter].Position.Y; |
|
|
66 |
c12 = localState[(int)JointType.ShoulderRight].Position.X < localState[(int)JointType.ShoulderLeft].Position.X && localState[(int)JointType.KneeRight].Position.X > localState[(int)JointType.KneeLeft].Position.X; |
|
|
67 |
c13 = localState[(int)JointType.ShoulderRight].Position.X > localState[(int)JointType.ShoulderLeft].Position.X && localState[(int)JointType.KneeRight].Position.X < localState[(int)JointType.KneeLeft].Position.X; |
|
|
68 |
if (c1 || c2 || c3 || c4 || c5 || c6 || c7 || c8 || c9 || c10 || c11 || c12 || c13) |
|
|
69 |
{ |
|
|
70 |
return false; |
|
|
71 |
} |
|
|
72 |
return true; |
|
|
73 |
} |
|
|
74 |
} |
|
|
75 |
} |