BBM (Browse By Motion) est une interface permettant de naviguer dans une mosaïque de vidéos indexées basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect ou à la souris.

Auteur : Alexandre BASTIEN.

I) TraKERS - Eléments requis :

Les spécifications de Microsoft font état des éléments matériels et logiciels requis afin de pouvoir utiliser le SDK :

Besoins matériels :
    Capteur Kinect.
    Processeur32-bit (x86) ou 64-bit (x64).
    Dual-core 2.66-GHz ou plus rapide.
    Bus USB 2.0 dédié.
    2 GB RAM.
Besoins logiciels :
    Microsoft® Visual Studio® 2010 Express ou une autre édition de Visual Studio 2010 (si vous souhaitez développer).
    Windows 7.
    NET Framework 4.0.

Vous les trouverez ici si vous le souhaitez : http://www.microsoft.com/en-us/kinectforwindows/develop/release-notes.aspx

La version 4.0 du Framework est présente dans l'installation de TraKERS.
Néanmoins, par soucis de taille de l'installeur, il vous sera nécessaire d'installer le SDK 1.5 de Microsoft ici :
http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx

II) BBM - Structure :

BBM est composé de deux modules, le Middleware (utilisant la Kinect afin de détecter des gestes et de suivre la position des mains et un Front (nommé Front IDILL, développé en Javascript), permettant de récupérer les WebSockets du Middleware par Client/Server WebSocket. Pour plus d'informations sur le Front, veuillez consulter la documentation située à la racine sous le nom Front IDILL.

Le middleware dispose d'une interface de debug permettant de connaître en temps réel la position de l'utilisateur à la Kinect. Ces fonctionnalités seront vues plus avant dans la partie Utilisation.

Les sources des modules sont fournies lors de l'installation, n'hésitez pas à les consulter si besoin est.

III) BBM - Utilisation :

Vous pouvez démarrer le Middleware ou bien le Front dans l'ordre que vous voulez.
Lorsque le Middleware est démarré, la Kinect s'allume et affiche ce qu'elle voit. Le capteur (situé le plus à gauche sur la Kinect) est alors allumé en rouge, signe que vous serez détecté si vous entrez dans son champ.
Lorsque le bouton ON a été appuyé, il devient un bouton OFF, et permet d'éteindre la Kinect. Il est à noter que le fait de fermer la fenêtre éteint également le capteur de la Kinect, avant de quitter.
(Plus de détails sur la Kinect : http://fr.wikipedia.org/wiki/Kinect).

Lorsque vous êtes détectés, le squelette de la personne la plus proche s'affiche. Le personnage sur les rectangles sur la droite indiquent la proximité de l'utilisateur par rapport à la Kinect, plus le personnage est proche de la Kinect, plus l'utilisateur est proche du point d'interaction maximal (point dans lequel il suffit de tendre les bras pour que les mains soient dans la zone de recherche).

Il existe une zone de détection des mains, située par défaut entre 1m et 1,5m de la Kinect mais configurable. En dehors de cette zone, les mains sont toujours détectées, mais aucun signal n'est envoyé via le serveur TUIO. Il y a deux images de mains en haut de cette fenêtre, permettant d'indiquer si une main est entrée dans ce champ (main gauche/droite dans le champ se traduit par la coloration de la main gauche/droite en bleu.

Il est possible de paramétrer des éléments du Middleware, comme la délimitation du champ pour les mains, le host et le port pour le serveur et l'intervalle de temps minimum qui sépare deux détections de gestes.

Si des erreurs surviennent durant le fonctionnement du Middleware, ceux-ci seront affichés en bas de la fenêtre. Lorsqu'un geste est détecté, une image est affichée puis disparaît de la fenêtre.

A) Position des mains :

Lorsqu'au moins une main entre dans le champ, ses/leurs coordonnées sont envoyées par le serveur au front.

B) Détection de gestes :

Pour l'instant, plusieurs gestes peuvent être détectés :

    SWIPE - Désigne un mouvement de claque horizontal, partant de la droite vers la gauche avec la main droite (et inversement pour la gauche). Durant le geste, la main ne doit pas descendre sous la hanche ni aller au dessus de la tête. Il lui faut une certaine longueur de parcours et elle ne doit aller que vers la gauche pour la main droite et vers la droite pour la main gauche. Le swipe peut donc être pour l'instant gauche ou droit.
    Lorsque ce geste est détecté, le bas de la fenêtre se colore en rouge si le swipe est vers la gauche.
    Lorsque ce geste est détecté, le bas de la fenêtre se colore en violet si le swipe est vers la droite.
    
    PUSH/PULL - Mouvement de poussée/traction rectiligne dirigé vers la kinect à partir de l'emplacement actuel de la main effectuant le geste.
    Lorsque ce geste est détecté, le bas de la fenêtre se colore en blanc s'il s'agit d'un push.
    Lorsque ce geste est détecté, le bas de la fenêtre se colore en noir s'il s'agit d'un pull.
    
    JUMP - Action de sauter vers le haut.
    
    FALL - Action de s'accroupir.
    
    BEND - Action de se pencher en avant.
    
    KNEE-UP - Action de lever le genou.
    
C) Paramètres de configuration.

Ceux-ci sont accessibles dans le fichier config.txt situé dans le même dossier que l'exécutable du Middleware nommé MainModule.
Ils sont actuellement de la forme :

Les valeurs nominales min/max définissent la distance min (plus proche) et max (plus éloignée) par rapport à la Kinect et pas à l'utilisateur.

Les variables de types float acceptent les valeurs de type N.Mf ou N,M. N étant un entier relatif et M étant un entier naturel.

minDistHands:1,0    Distance min de la zone de recherche pour les mains.    Type float.
minDist:1,0    Distance min de la zone de détection globale de l'utilisateur.    Type float.
takenPoints:10    Nombre de points pris dans une courbe de recherche. (En développement).    Type entier.
directionChangeTresholdXY:10    Pixels parcourus avant de segmenter une courbe. (En développement).    Type entier.
imagesToShow:20    Nombre d'images à afficher dans la mosaïque du Front IDILL. (Autre projet).    Type entier.
maxDistHands:1,5    Distance max de la zone de recherche pour les mains.    Type float.
maxDist:3,0    Distance max de la zone de détection globale de l'utilisateur.    Type float.
zeroPoint:1,9    Distance du point d'interaction maximal.    Type float.
directionChangeTresholdZ:0,1    Nombre de mètres avant de segmenter une courbe en profondeur. (En développement).    Type float.
tuioConnexionHost:127.0.0.1    Host du serveur TUIO.    Type string.
tuioConnexionPort:8080    Port du serveur TUIO.    Type entier.
tuioTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. TUIO.    Type entier.
wsConnexionHost:127.0.0.1    Host du serveur WebSocket.    Type string.
wsConnexionPort:8090    Port du serveur WebSocket.    Type entier.
wsTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. WebSocket.    Type entier.

readmeBBMMiddleware:..\readme - BBM Middleware.txt    Chemin du readme du Middleware.    Type string.    
docBBMFrontIDILL:..\tutorial - BBM Front IDILL.html    Chemin de la documentation du Front IDILL.    Type string.
frontIDILLS:C:\wamp\www\Front IDILL\    Chemin du code du Front IDILL.    Type string.
frontIDILLExe:http://localhost/Front%20IDILL/    Chemin du Front IDILL.    Type string.

Voici les règles à respecter lors de l'affectation des valeurs des paramètres :

1) maxDistHands doit être supérieur à 0f.
2) minDistHands doit être supérieur à 0f.
3) maxDistHands doit être inférieur ou égal à maxDist.
4) minDistHands doit être inférieur ou égal à maxDist.
5) minDistHands doit être inférieur à maxDistHands.
6) zeroPoint doit être supérieur ou égal à maxDistHands.
7) minDistHands doit être inférieur ou égal à minDist.
8) zeroPoint doit être inférieur à maxDist.
9) tuioConnexionPort doit être supérieur ou égal à 0.
10) wsConnexionPort doit être supérieur ou égal à 0.
11) tuioTimerElapsing doit être supérieur ou égal à 0.
12) wsTimerElapsing doit être supérieur ou égal à 0.
13) imagesToShow doit être supérieur ou égal à 1.
14) takenPoints doit être supérieur à 0.
15) directionChangeTresholdXY doit être supérieur ou égal à 0.
16) directionChangeTresholdZ doit être supérieur ou égal à 0.

D) Menu.

Via le menu en haut de la fenêtre de debug du Middleware, il est possible d'accéder aux readme et documentations du Middleware et du Front IDILL. Le fichier de configuration est également disponible dans ce menu. Une fois un paramètre modifié, il est nécessaire de redémarrer le Middleware pour que les nouveaux paramètres soient pris en compte.
L'exécutable et le code source du Front sont accessibles dans le menu.
- Dans le cas où l'on souhaite lancer le Front IDILL, il est nécessaire de placer le dossier Front IDILL présent à la racine de BrowseByMotion dans le répertoire www du dossier wamp (par défaut C:\wamp\www).

IV) Mention(s) importante(s) pour le debug :

Le serveur WebSocket permet de gérer le multi-client.

Paramétrage : Le Middleware était conçu à l'origine pour permettre une modification de la configuration via une fenêtre durant le runtime. Il semblerait que Fleck provoque un comportement innatendu de cette fenêtre. Par conséquent, il est nécessaie de modifier le fichier config.txt à la racine de Middleware si on souhaite modifier les paramètres du Middleware. En cas de problème, le fichier ErrorFile.txt est créé dans ce même dossier.

Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.