Projet Computer Vision Ing5, groupe 6 Guillaume AUBERTIN

publicité
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
Téléchargement