Projet Computer Vision Ing5, groupe 6 Guillaume AUBERTIN Thomas FORICHER Charles ROLAND Encadré par Guillaume Jacquemin Sujet : Environnement 3D Abstract La tendance actuelle dans le monde de l’informatique tend à vouloir contrôler un environnement graphique de la façon la plus aisée possible. Un grand nombre de nouvelles technologies fleurissent dans ce domaine, tactiles, vocales, gestuelles permettant de contrôler nos équipements. Nous avons souhaité nous inscrire dans cette évolution en créant une solution logicielle capable d’immerger l’utilisateur dans un environnement virtuel. Ce document illustre notre démarche de réalisation du projet. Nous aborderons les spécifications, la conception, la réalisation et la validation. Mots clés : OpenCV, caméra, Langage C, détection de visage, image 360 degrés. 1 Sommaire I) Présentation du projet I.1 I.2 II) Intérêts et objectifs…………………………………………………..……3 Etat de l’art………………………………………………………………………4 Algorithme II.1 II.2 Diagramme bloc……………………………………………………………...9 Copies d’images intermédiaires.……………………………………13 III) Tests et limites III.1 Etape de validation de l’algorithme.……………………………..32 III.2 Temps de calcul par bloc..………………………………………..…..33 III.3 Limites de l’algorithme……………………………………………………33 Annexe ……………………………………………………………………………………………….…….39 2 I. Présentation du projet I.1 Intérêts et objectifs Contrôler son équipement informatique de manière rapide et efficace est devenu une nécessité. Il existe déjà des solutions novatrices et très au point pour le contrôle d’applications à distance, notamment la commande de Google Earth via des capteurs infrarouges. Une solution encore plus révolutionnaire pour le contrôle à distance pourrait être imaginée. Aucune carte électronique, aucuns branchements à l’ordinateur, mise à part une webcam qui souvent est déjà intégrée dans les boitiers des ordinateurs portables. L’intérêt majeur est donc de disposer d’un contrôle à distance d’une application sans nécessiter de matériel superflu. L’élément clef étant la webcam qui grâce à une application que nous mettrons au point sera en mesure de détecter les mouvements de l’utilisateur et créer une réponse en conséquence. Notre objectif est donc de créer un programme afin d’illustrer cette technique. L’utilisateur se place devant la caméra, sélectionne son visage à la souris et le programme s’occupe de le suivre. Les mouvements sont ensuite imputés à une image panoramique placée sous les yeux de l’utilisateur. Ainsi, en fixant l’image, l’utilisateur voit son image fixe, s’il déplace la tête vers la gauche ou la droite, l’image défile dans ce sens. Il se trouve ainsi immergé dans un environnement virtuel. 3 I.2 Etat de l’art A l’état actuel, très peu de solutions de ce type existent. Voici un exemple d’application du tracking de visages appliqué à un jeu vidéo. http://fr.youtube.com/watch?v=GDINqY9kekU. Concernant le visionnage d’images panoramiques via le déplacement du visage, il n’existe pas à notre connaissance de solutions existantes, nous allons pouvoir donner libre court à notre imagination. 4 I. Algorithme II.1 Diagrammes blocs L’objectif principal de notre projet est de pouvoir suivre les mouvements d’un visage sur une vidéo, filmé par une webcam dans notre cas. Nous utilisons la librairie OpenCV, développée par Intel. C’est une librairie de « computer vision ». Voici le diagramme bloc général du projet. Chaque étape sera ensuite étudiée séparément : Détection du mouvement de la tête Analyse de la position Affichage de l’image panoramique Dans un premier temps, nous allons décrire la méthode utilisée pour suivre les mouvements de la tête sur la suite d’image envoyée par la webcam. Nous verrons ensuite comment ces données sont interprétées et la méthode utilisée pour afficher de manière interactive l’image panoramique. Remarque : Pour le premier bloc, nous avons repris l’algorithme du programme exemple « camshiftdemo » présent dans le répertoire d’OpenCV. 5 Détection du déplacement de la tête : L’utilisateur va dans un premier temps sélectionner, sur l’image de la webcam, son visage dans un rectangle. Cela va permettre de délimiter la zone de l’image à traquer. Une fois cette sélection faite, nous utilisons l’algorithme de suivi d’objet CAMSHIFT, développé par « G.R. Bradski ». Voici le l’algorithme général de suivi d’objet, présenté sous forme de diagramme bloc : Sélection de la zone à suivre Conversion RGB -> HSV L’utilisateur choisit à la souris la zone à suivre. On converti l’image RGB de la webcam au format HSV. Récupération de la composante h du HSV On isole la composante « H » du signal HSV : c’est la « couleur » de l’image. Calcul de l’histogramme et égalisation Calcul de l’histogramme de la composante H. Calcul de la « back projection » Camshift Affichage La « back projection » correspond à une image à laquelle on a réappliqué son histogramme, après correction de celui-ci. Suivi de la zone sélectionnée par l’utilisateur. Dessin d’une ellipse pour signaler le nouvel emplacement de la zone sélectionnée. 6 Analyse du déplacement de la tête : Une fois que l’objet est traqué correctement, (la tête dans notre cas) nous pouvons utiliser les informations récupérées pour savoir quand l’utilisateur bouge la tête à gauche ou à droite. Pour cela, nous utilisons les coordonnées de l’ellipse indiquant la position à l’écran de la tête de l’utilisateur. On compare l’abscisse de l’ellipse avec le centre de l’écran. Si l’ellipse est suffisamment éloignée du centre vers la gauche, alors on décide de faire déplacer l’image vers la gauche. Il en est de même pour la droite. Lecture de l’abscisse de la tête Si (abscisse > centre) Comparaison avec le centre de l’image Déplacer panoramique vers la droite Si (abscisse < centre) Déplacer panoramique vers la droite 7 Affichage de l’image panoramique : Maintenant que le mouvement de la tête est décodé, et que les directions de défilement de l’image identifié, nous pouvons nous occuper de faire défiler l’image panoramique. C’est une image prise à 360 degrés, ce qui va permettre à l’utilisateur de sentir pleinement immergé. L’idée principale, pour le défilement de l’image, est d’afficher seulement le bout d’image correspondant à la « position » de l’utilisateur dans le panorama. Nous utilisons pour cela 2 images : - Une première image « pic » ou nous stockons l’intégralité de l’image panoramique. - Une deuxième image « pic2 » ou l’on copie à chaque fois le bout d’image correspondant A chaque déplacement de la tête, on va recopier le bout de l’image panoramique qui nous intéresse dans l’image « pic2 » et l’afficher. L’image perçue pour l’utilisateur sera donc un aperçu du panorama entier, comme le schématise le dessin suivant : Vue de l’utilisateur Panorama 8 II.2 Captures d’images intermédiaires Conversion RGB -> HSV : Isolation du h : 9 Égalisation de l’histogramme + « back Project » : Camshift : 10 III. Test et limites II.1 vidéo de démonstration Voir pièce jointe avec le mail, Ou bien : http://drukky.free.fr/perso/video_environnement_3D.avi 11 II.2 temps de calcul Nous allons présenter ici les différentes mesures recueillies lors des tests des différents blocs de notre algorithme. Chaque valeur est une valeur moyenne, basée sur 10 mesures successives. - Détection du mouvement de la tête : 35 ms Le camshift est un algorithme peu gourmant en calcul. Grâce à cela, nous arrivons à un temps de calcul très raisonnable. - Analyse de la position : 0,0001 ms L’algorithme de ce bloc est très simple : son temps de calcul est négligeable. - Affichage de l’image panoramique : 3,5 ms Ici aussi, le temps de calcul est très léger. En effet, nous effectuons seulement une opération de copie d’un bout de l’image panoramique vers l’image de l’utilisateur. II.3 limites de l’algorithme 12 Cet algorithme, bien que très efficace pour notre usage, possède quand même certaines limites. En effet, l’algorithme camshift a été, pour nous, plus simple à mettre en place que celui de détection de visages. Le revers est que l’utilisateur est obligé de « déplacer » sa tête à gauche ou à droite, alors que la détection de visage aurait permis à l’utilisateur de simplement tourner la tête. De plus, cela nous empêche de pouvoir faire évoluer l’image de manière verticale (Il est en effet peu pratique de « déplacer » sa tête de bas en haut, comparé à un simple hochement de tête !). L’autre limite est liée à la méthode d’affichage de l’image panoramique. La méthode utilisée dans ce projet ne permet pas d’utiliser n’importe quel type d’image, car pour rendre l’enchainement entre les deux bout de l’image possible, nous avons du la modifier. Il faut donc une image « préparée » pour utiliser le logiciel. 13