Middleware :
new gesture implemented :
WAVE
new kind of detection : postures
new postures implemented :
BEND
KNEE_UP
CROSS (developpement, but should be dropped because of collisions with SWIPE gestures)
Gesture/Posture detectors got a link towards Debug (For debug purpose only, will be removed later)
/*
* This file is part of the TraKERS\Middleware package.
*
* (c) IRI <http://www.iri.centrepompidou.fr/>
*
* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
* file that was distributed with this source code.
*/
/*
* Projet : TraKERS
* Module : MIDDLEWARE
* Sous-Module : Tracking/Gestures
* Classe : GestureDetector
*
* Auteur : alexandre.bastien@iri.centrepompidou.fr
*
* Fonctionnalités : Reçoit les positions des noeuds envoyés par la classe de manipulation de la Kinect
* et les stocke dans un historique.
* Contient également des variables propres à toute gesture : distance de référence, point de départ,
* durée de la gesture, FPS et nombre de frames à traiter.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Kinect;
using System.Drawing;
using Trakers.Debug;
namespace Trakers.Tracking.Gestures
{
public class GestureDetector
{
public DebugWindow debug;
//Historique des positions du squelette.
protected static List<List<Joint>> history = new List<List<Joint>>();
//protected JointCollection previousSkeleton;
//Voici les ID des noeuds d'un squelette : variables magiques en attente de factorisation.
/*protected int hipCenterID = 0, spineID = 1, shoulderCenterID = 2, headID = 3;
protected int shoulderLeftID = 4, elbowLeftID = 5, wristLeftID = 6, handLeftID = 7;
protected int shoulderRightID = 8, elbowRightID = 9, wristRightID = 10, handRightID = 11;
protected int hipLeftID = 12, kneeLeftID = 13, ankleLeftID = 14, footLeftID = 15;
protected int hipRightID = 16, kneeRightID = 17, ankleRightID = 18, footRightID = 19;*/
//Elements nécessaires à la reconnaissance du geste :
//Distance du parcours du geste (va dépendre de la distance de l'utilisateur).
protected float refDistance;
//Position de départ pour le geste.
protected SkeletonPoint startPoint;
//Estimation du temps que prend la gesture (en s).
protected float gesturePeriod = 1;
//Estimation du nombre d'indexes par seconde (framerate).
protected int indexesPerSecond = 30;
//Estimation du nombre de positions du squelette à vérifier dans l'historique.
protected int indexesToCheck;// = gesturePeriod * indexesPerSecond;
public GestureDetector(DebugWindow _debug)
{
debug = _debug;
}
//Setters.
public void setRefDistance(float _refDistance)
{
refDistance = _refDistance;
}
public void setStartPoint(SkeletonPoint _startPoint)
{
startPoint = _startPoint;
}
public void setGesturePeriod(float _gesturePeriod)
{
gesturePeriod = _gesturePeriod;
}
public void setIndexesPerSecond(int _indexesPerSecond)
{
indexesPerSecond = _indexesPerSecond;
}
public void setIndexesToCheck(int _indexesToCheck)
{
indexesToCheck = _indexesToCheck;
}
//Getters.
public float getRefDistance()
{
return refDistance;
}
public SkeletonPoint getStartPoint()
{
return startPoint;
}
public float getGesturePeriod()
{
return gesturePeriod;
}
public int getIndexesPerSecond()
{
return indexesPerSecond;
}
public int getIndexesToCheck()
{
return indexesToCheck;
}
//Stocke les gestes du skelette pour ~3 seconds (si on prend en compte que le framerate de la Kinect
//est de ~30 fps.
public static void UpdateSkeletonHistory(List<Joint> latestSkeleton)
{
history.Add(latestSkeleton);
if (history.Count > 90)
{
history.RemoveAt(0);
}
}
}
}