Tests de vision
Afin de tester si la solution vision était réalisable, plusieurs essais ont été effectués. Le premier test à permis de déterminer si le globe était complètement opaque ou s’il était possible de capter une ombre au travers.
Le test, avec un simple spot placé au dessus du globe est très prometteur. L’ombre portée est très nette et il ne devrait pas y avoir de problème pour la capturer avec un bout de code et OpenCV.
Le deuxième test à permis de faire un choix entre le visible et l’infrarouge. L’ombre est beaucoup plus nette en infrarouge qu’en visible. Nous utiliserons donc une caméra TouCam modifiée pour l’IR.
Algorithme
L’algorithme utilisé pour détecter la position de la main utilise paradoxalement le bras pour commencer. En effet, l’idée est de savoir ou rentre l’ombre du bras puis de la suivre jusqu’a son extrémité opposée pour trouver le doigt le plus éloigné.
-Etape 1 : L’utilisateur touche le globe. L’ombre portée de son bras est isolée par le programme en soustrayant l’image de fond (capturée au moment du calibrage, au démarrage du programme) de l’image capturée.
Il est bien sûr exclu de faire tourner le gloe ou de changer l’éclairage en cours de fonctionnement...
-Etape 2 : Les bords de l’image sont parcourus par le programme afin de déterminer par quel bord est entré le bras (occlusion). Ces bords sont appellée pas convention Nord, Sud, Est et Ouest (rien à voir avec le globe lui même !). Le bord utilisé est celui qui a la plus grande occlusion.
-Etape 3 : En partant du bord occlus, on parcours l’image en testant la valeur des pixels afin de trouver le point d’ombre le plus éloigné possible du bord occlus. En cas d’occlusion sur les cotés (Ouest ou Est), l’image est parcourue colone par colone vers l’Ouest (occlusion Est) ou vers l’Est (occlusion à l’Ouest). Pour les occlusions Nord ou Sud, l’image est parcourue ligne par ligne (respectivement vers le Sud ou vers le Nord).
- Etape 4 : Une fois déterminées les coordonnées du point dans l’image, on applique une correction correspondant grossièrement à la taille de l’empreinte d’un doigt, afin d’utiliser le centre du doigt comme référence.
Bien sûr, cet algorithme ne peut fonctionner qu’avec des usagers disciplinés (qui ne se couchent pas sur le globe, qui utilisent l’interactif les uns après les autres). Mais créér une interaction fonctionnelle dans ce cas de figure relève de la gageure.
Il permet tout de même de résoudre presque tous les cas possibles dans un usage raisonnable :
Les cas 1 a été exposé plus haut. Le cas 2 est identique, mais le parcours se fait de haut en bas (depuis l’occulsion au Nord vers le Sud).
Le cas 3 est réduit au cas 1 ou 2 en fonction du coté ayant la plus grande occlusion. Ici la plus grande occlusion est au Nord, et non à l’Ouest. On se retrouve donc dans le cas 2.
En revanche, le cas 4 pose problème. En effet, il est réduit au cas 2 (plus grande occlusion au Nord) mais le positionnement de la main et le sens du parcours font qu’un mauvais point est déterminé (auriculaire replié au lieu de l’index). Il faudra modifier l’algorithme pour déterminer non pas l’ordonnée (ou l’abscisse) la plus éloignée d el’occlusion, mais le point le plus éloigné géométriquement. En effet, si l’on trace un cercle centré sur l’occlusion, on remarquera que le point à la plus grande distance du cercle est systématiquement le point recherché. Ce raffinement sera introduit ultérieurement.
Test
Les premiers tests hors globe sont positifs.
L’extraction de la main de l’arrière plan de référence se fait par soustraction de la dernière image.
Le resultat de cette soustraction est converti en noir et blanc, rogné (les petites différences s’estompent) puis dilaté (pour retrouver la taille initiale).
L’application de l’algorithme permet ensuite de determiner le "point" choisi par l’usager.