WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Identification des personnes par reconnaissance de visage pour la sécurité d'une institution bancaire

( Télécharger le fichier original )
par Serge KOMANDA BASEMA
Institut supérieur pédagogique de Bukavu- RDC - Licence en informatique de gestion option pédagogie appliquée 2010
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

0. INTRODUCTION

0.1 Problématique

De nos jours on parle de plus en plus de l'insécurité dans divers secteurs ainsi que des moyens informatiques à mettre en oeuvre pour contrer cette tendance : le contrôle d'accès aux ordinateurs, l'e-commerce, les opérations bancaires basées sur l'identification du demandeur, etc.

Parlant des opérations bancaires, une institution bancaire est amenée à effectuer ses activités quotidiennes en assurant des services à ses clients. Ces services rendus par une institution bancaire la conduisent à être en contact physique fréquent (à part quelques exceptions à l'exemple du commerce par internet) avec ses clients.

Les clients qui vont déposer, retirer des sommes d'argent, effectuer des virements bancaires, des transferts d'argent,... doivent se présenter physiquement dans cette institution afin d'être servis. Ceci fait que cette institution bancaire doit recevoir nombreuses gens de toute catégorie, de tout genre, de toute couche de la population par jour et encore plus par semaine, par mois, par an.

Les mesures de sécurité mises en place par nos institutions bancaires de la place ne leur garantissent pas la protection totale contre les espions, contre les braqueurs, contre les escrocs. Comme preuve, ici dans la province du Sud-Kivu, principalement dans notre ville de Bukavu, nous avons assisté à un braquage en pleine journée de l'une des institutions bancaires. Ces braqueurs ne se sont pas inquiétés des mesures de sécurité utilisées par cette institution bancaire (comme tant d'autres institutions bancaires de la ville de Bukavu qui utilisent seulement les agents de sécurité en uniforme).

Ces auteurs, les braqueurs pouvaient être découverts (s'ils ne le sont pas encore bien sûr) le plus vite possible, si les mesures préventives de sécurité pouvaient être mises au point avant cet événement (cette période) de braquage.

Une préoccupation nous vient en première vue:

- Comment nos institutions bancaires, en particulier de la ville de Bukavu peuvent-elles assurer le control, la surveillance, le suivi de toutes les visites dans ces dernières de personnes considérées comme clients pour afin garantir leur sécurité?

- Mais aussi, même si elles arrivaient à contrôler toutes ces visites, quelle est le moyen efficace à utiliser pour mieux identifier toutes les personnes visitant ces institutions bancaires et ainsi assurer la sécurité individuelle à chacune de ces institutions?

Nous tacherons de répondre à ces questions tout au long de notre travail et ceci pourra même constituer la base de notre sujet de recherche.

0.2 Hypothèse

Alors que l'informatique est devenue pour l'entreprise un outil incontournable de gestion, d'organisation, de production et de communication, les échanges internes et externes de cette entreprise sont exposés aux actes de malveillance de différentes natures et sans cesse changeants.

Il convient en dépit de tout ce qui précède de ne pas renoncer aux bénéfices de l'informatisation, et pour cela de faire appel à des outils informatiques qui apportent une garantie contre les risques.

D'une manière concrète pour lutter contre ces visites incontrôlées, nous proposons comme hypothèse ce qui suit :

- La mise en place d'un système de contrôle des "personnes extérieures" (ici les clients) à nos institutions bancaires de la ville de Bukavu peut les aider à assurer et à garantir leur sécurité. Ceci pourra être possible grâce à l'utilisation des cameras de surveillance placées à l'intérieur comme à l'extérieur, dans différents coins (dans toutes les positions) de bâtiment des institutions bancaires et à leurs différentes entrées pour accéder à l'intérieur de ces institutions.

- En plus de cela, une application permettant de détecter la présence de visage d'une personne se présentant devant ces cameras et plus que cela, de reconnaitre de quelle visage s'agit-il peut être un moyen efficace à utiliser pour garantir une forte sécurité. Tous ces différents visages seront stockés dans une base de données pour ainsi permettre leur exploitation pour de fins palpables futures.

Les visages ainsi découverts peuvent alors faire l'objet d'un suivi d'une image à l'autre, suivi permettant de les retrouver plus rapidement et de pérenniser leurs caractéristiques à l'aide d'une moyenne calculée sur les observations effectuées de ce visage.

0.3 Choix et intérêt du sujet

Notre investissement dans le domaine de la reconnaissance de visages est sans doute motivé par la multiplicité et la variété des champs d'application entre-autre : haute sécurité, télésurveillance et contrôle d'accès, etc.

Parmi ses applications les plus concrètes rencontrées dans la vie courante, peut-on citer à titre d'exemple : authentification de visage d'un utilisateur d'un compte de Windows pour accéder à ses données personnelles dans ce dernier, recherche des individus dans une foule par reconnaissance de leur visage par des cameras de surveillance, étude des émotions par analyse des expressions faciales, protection d'identité des personnes pour livrer les cartes d'identités surs et fiables mais aussi de permis de conduire.

0.4 Délimitation du sujet

Notre sujet de recherche porte sur l'identification des personnes par reconnaissance de visage pour la sécurité d'une institution bancaire.

Dans le présent travail, nous n'abordons que la détection et la reconnaissance du visage humain par accession dans des institutions bancaires. Nous nous arrêtons qu'à capturer les visages et les stocker dans l'ordinateur mais cette action est possible à une seule condition : il faut que le visage capturé ne soit déjà capturé une autre fois, donc ne puisse pas exister dans la liste des visages prédéfinis (dans la base de données des visages).

En ce qui concerne la délimitation spatiale, nos recherches ne concernent que les instituions bancaires de la province du Sud-Kivu et plus particulièrement de la ville de Bukavu.

0.5 Méthodologie

Nous visons à développer un système de reconnaissance faciale par authentification de visage. Ainsi, nous avons commencé par développer une technique « bas niveau » pour la localisation et la détection du visage dans un flux vidéo. Nous avons utilisé les méthodes globales (ou holistiques) et là nous avons utilisé l'une de ces techniques linéaires qui est l'Analyse en Composantes Principales mais qui est bidimensionnelle.

La méthode scientifique utilisée est la méthode comparative :

Celle-ci nous a aidé pour arriver à comparer deux visages (celui qui se présente devant la camera et celui déjà capturé dans la base de données des visages).

Nous avons utilisé la distance de Mahalanobis pour effectuer une mesure de distance (divergence) entre deux visages. Si cette distance est élevée (ici supérieur à zéro), nous prenions la décision de ne pas capturer le visage devant la caméra. La capture du visage devant la caméra était conditionnée par la distance (divergence) égale à zéro. Ainsi la sécurité est certaine si un visage ne peut être capturé qu'une seule fois et ce visage peut subir de suivi pour de fins quelconques.

0.6 Etat de la question

D'après nos recherches, nous n'avons pas trouvé d'autres travaux parlant de l'identification des personnes par reconnaissance de visage pour la sécurité d'une institution bancaire.

Les seuls travaux approchant notre sujet de recherche et parlant de la reconnaissance faciale trouvés sont :

1) Authentification d'individus par reconnaissance de caractéristiques biométriques liées aux visages 2D/3D : thèse présentée et soutenue par SOUHILA GUERFI ABABSA en vu de l'obtention du titre de Docteur de l'Université Evry Val d'Essonne, spécialité des Sciences de l'Ingénieur.

Dans ce travail, l'auteur traite de deux problématiques majeures et complémentaires rencontrées en reconnaissance de visage qui sont : l'extraction automatique de visage et de ses régions caractéristiques, et la reconnaissance du visage. Il arrive au résultat selon lequel, le choix d'un domaine variable pour la couleur de la peau peu améliorer la robustesse de la méthode de détection vis-à-vis des changements d'illumination.

Quant à nous, avons fait usage de l'un de classifieurs d'OpenCV pour arriver à détecter le visage humain mais avons utilisé les la distance de Mahalanobis pour authentifier la reconnaissance faciale.

2) Capteur Intelligent pour la Reconnaissance du visage : thèse présentée et soutenue par Walid Hizem en vu de l'obtention du titre de Docteur de l'Institut national des télécommunications et l'Université Pierre et Marie Curie - Paris 6, spécialité d'Electronique/Informatique.

Cet auteur présente dans ce travail un nouveau capteur atténuant l'illumination ambiante. Ce capteur se base sur la réduction de temps de pose pour ne capturer qu'une faible quantité de la lumière ambiante mais aussi facilite la délivrance en simultané d'une image en proche infrarouge et d'une image normale acquise avec la lumière ambiante.

Grâce à ce capteur et avec utilisation des points caractéristiques détectés et l'image de contours, un algorithme de reconnaissance de visage s'inspirant de l'elastic grap matching pour construire un modèle du visage a été mis au point.

Quant à nous, avons tenu compte de l'environnement changeant et par conséquent avons converti toutes les images de figures détectées en niveau gris égalisé.

3) Reconnaissance des personnes par le visage dans les séquences vidéo : Rapport de projet de fin d'études élaboré par Riadh HAMZAOUI de l'Institut Supérieur des Sciences Appliquées et de Technologies de Sousse.

L'auteur du présent travail aboutit au résultat qui est la conception d'une application de reconnaissance de visage dans une séquence vidéo. Pour lui, il faut que la vidéo soit déjà enregistrée dans l'ordinateur bien avant.

En ce qui concerne notre travail par rapport à celui-ci, nous avons utilisé les caméras comme source directe d'acquisition de vidéo. Ce qui nous a permis le vrai traitement des images en temps réel assurant une vrai sécurité des nos institutions bancaires.

0.7 Difficultés rencontrées

Malgré notre motivation portée au choix de ce sujet, nous nous sommes heurté à quelques difficultés:

La documentation livresque a été difficile. Nous avons été obligé de faire toutes nos recherches sur internet, ce qui nous a couté extrêmement cher du faite que nous devrions surfer à tout moment.

En plus de ce qui suit, la plus part de documentations trouvées étaient en langue anglaise, ce qui nous a semblé difficile dans notre recherche.

0.8 Plan sommaire du travail

Nous avons choisi d'articuler notre étude autour de trois chapitres principaux  hormis l'introduction et la conclusion:

Dans le premier chapitre, nous parlons de généralités sur la bibliothèque OpenCV. Dans le présent chapitre, nous décrivons cette bibliothèque en donnant son historique, ses fonctionnalités, sa structure et sa configuration dans différents systèmes d'exploitation (Microsoft Windows et Linux dans sa distribution Ubuntu) ainsi que sa configuration sous différents compilateurs.

Le deuxième chapitre est consacré à la notion sur la reconnaissance faciale. Nous y parlons d'abord de la détection de visage et en suite de la reconnaissance du visage proprement dite.

En ce qui concerne le troisième chapitre qui est d'ailleurs le dernier, nous parlons de la mise en place d'une application de surveillance et identification de personnes par reconnaissance de visage pour la sécurité d'une institution bancaire.

Nous y décrivons la procédure suivie pour arriver à mettre en place une application de reconnaissance faciale pouvant nous aider à assurer une sécurité dans d'un bâtiment (ou sale).

Nous y présentons les explications de différentes fonctions utilisées et tout l'algorithme utilisé.

CHAPITRE PREMIER : GENERALITES SUR OPENCV

1.1. Histoire

OpenCV (Open Computer Vision) est une bibliothèque graphique libre. Elle est conçue pour le traitement d'image en temps réel. Il est utilisable sous Windows, sous Linux et sous MacOS.

Officiellement lancé en 1999, le projet OpenCV est développé initialement par Intel pour optimiser les applications gourmandes en temps processeur. Cela faisait partie d'une série de projets tel que l'affichage d'un mur en 3 dimensions. Cette bibliothèque est distribuée sous licence BSD.

Les principaux acteurs du projet sont l'équipe de développement de bibliothèque de chez Intel ainsi qu'un certain nombre d'experts dans l'optimisation de chez Intel Russie.

Les objectifs de base du projet étaient :

· Faire des recherches sur la vision par ordinateur en vue de fournir un logiciel libre et optimisé.

· Établir une infrastructure commune s'appuyant sur les développeurs pour obtenir un code plus lisible et transférable.

· Continuer à développer en rendant le code portable et permettre des performances optimisées gratuites avec une licence qui est libre de toutes contraintes commerciales.

La première version alpha d'OpenCV fut présentée lors de la conférence IEEE sur la vision par ordinateur et la reconnaissance de formes en 2000. Après cela, cinq versions bêta ont été publiées entre 2001 et 2005 et la première version 1.0 a été publiée en 2006.

Au milieu de l'année 2008, OpenCV obtient l'appui de la société de robotique Willow Garage et la bibliothèque est encore développée à ce jour. Une version 1.1 est sortie en Octobre 2008 et un livre écrit par deux auteurs d'OpenCV, publié par O'Reilly Media est sorti sur le marché ce même mois.

La deuxième version majeure d'OpenCV née en octobre 2009. Il s'agit d'OpenCV 2 incluant des changements majeurs au niveau du langage C++ servant à faciliter le développement de nouvelles fonctions et améliorant les performances.

Voici en liste toutes les versions d'OpenCV téléchargeables pour le système d'exploitation Linux (Ubuntu) et Windows (1(*)):

1. OpenCV 1.0

2. OpenCV 1.1pre1

3. OpenCV 2.1

4. OpenCV 2.2

5. OpenCV 2.3

6. OpenCV 2.3.1

1.2. Fonctionnalités

La bibliothèque OpenCV met à disposition de nombreuses fonctionnalités très diversifiées permettant de créer des programmes partant des données brutes pour aller jusqu'à la création d'interfaces graphiques basiques.

a) Traitement d'images

Elle propose la plupart des opérations classiques en traitement bas niveau des images :

· lecture, écriture et affichage d'une image ;

· calcul de l' histogramme des niveaux de gris ou d'histogrammes couleurs ;

· lissage, filtrage ;

· binarisation, segmentation en composantes connexes ;

· morphologie mathématique.

b) Traitement vidéos

Elle met également à disposition de l'utilisateur quelques fonctions d'interfaces graphiques, comme les curseurs à glissière, les contrôles associés aux événements souris, ou bien l'incrustation de texte dans une image.

Cette bibliothèque s'est imposée comme un standard dans le domaine de la recherche parce qu'elle propose un nombre important d'outils issus de l'état de l'art en vision des ordinateurs tels que :

· lecture, écriture et affichage d'une vidéo (depuis un fichier ou une caméra)

· détection de droites, de segment et de cercles par Transformée de Hough

· détection de visages par la méthode de Viola et Jones

· cascade de classifieurs boostés

· détection de mouvement, historique du mouvement

· poursuite d'objets par mean-shift ou Camshift

· détection de points d'intérêts

· estimation de flux optique (tracker de Kanade-Lucas)

· triangulation de Delaunay

· diagramme de Voronoi

· enveloppe convexe

· ajustement d'une ellipse à un ensemble de points par la méthode des moindres carrés

c) Algorithmes d'apprentissage

Certains algorithmes classiques dans le domaine de l'apprentissage artificiel sont aussi disponibles :

· K-means

· AdaBoost

· Réseau de neurones artificiels

· Machine à vecteurs de support

· Estimateur (statistique)

d) Calculs Matriciels

Depuis la version 2.1 d'OpenCV l'accent a été mis sur les matrices et les opérations sur celles-ci. En effet, la structure de base est la matrice. Une image peut être considérée comme une matrice de pixel. Ainsi, toutes les opérations de bases des matrices sont disponibles, notamment:

· la transposé

· calcul du déterminant

· inversion

· multiplication (par une matrice ou un scalaire)

· calcul des valeurs propres

1.3. Structure de la librairie OpenCV

La librairie OpenCV se présente de la manière suivante :

Figure 1. Structure de la bibliothèque d'OpenCV

a) CV & CVAUX :

Cette partie de la bibliothèque permet le traitement d'images. Voici en liste quelques unes de ses applications :


· Gradient, contours, coins et contours actifs,


· Morphomath (érosion, dilatation, fermeture...)


· Filtrages divers (lissage, rehaussement de contraste, suppression de fond...)


· Conversion d'espace couleur (RGB, HSV,...)


· Étiquetage, manipulation de contours, Transformations diverses (Fourier, Hough...)


· Histogrammes


· Analyse de mouvement et suivi


· Suivi d'objets, flot optique...


· Reconstruction


· Calibration, mise en correspondance...


· Détection et reconnaissance de formes


· Détection de visages et autres formes particulières.

b) HIGHGUI :

En plus de traitement d'images, celle-ci permet le traitement des vidéos en temps réel. En voici, ses applications :


· Structures élémentaires


· matrices, tableaux, listes, files, graphes, arbres...


· opérateurs standards sur ces structures,


· Dessin de primitives géométriques


· lignes, rectangles, ellipses, polygones... et texte.


· Manipulation des images et des séquences


· lecture, écriture...


· Interface utilisateur


· fenêtre, entrées/sorties utilisateur.

c) CXCORE :

Cette partie regorge nombreuses fonctions de dessin dont en voici quelques applications :


· lignes, cercles, ellipses, arcs, ...


· Polygone plein ou contours


· Textes (avec différentes fonts)


· Trousse à outils pour gérer les couleurs, les tailles,...

1.4. Installation d'OpenCV

1.4.1 Sous Windows

Sous Windows, nous allons présenter la configuration d'OpenCV sous Visual Studio (la version 6) mais aussi sous Dev-C++.

a) OpenCV 1.0 sous Visual Studio 6

Ce qu'il faut d'abord faire avant tout :

· Installer la bibliothèque en double-cliquant sur le fichier téléchargé, comme un programme classique.

· Depuis le nouveau menu créé dans le menu Démarrer, lancer le workspace liée à son EDI (VS6)

· Afficher le menu Build (Clic droit dans la barre de menu en haut) et régler le mode de compilation sur Debug

· Compiler la solution (F7)

· Régler le mode de compilation sur Release

· Compiler à nouveau la solution (F7)

Maintenant les différents fichiers nécessaires au fonctionnement d'OpenCV sont installés.

Pour faire la configuration proprement-dite, il y a deux étapes :

· La configuration générale, qui est à faire une seule fois.

· La configuration nécessaire pour chaque nouveau projet

v Configuration générale

Il s'agit d'indiquer à Visual Studio les nouveaux répertoires où sont disponibles les fichiers .h et .lib d'OpenCV.
(Remarque: l'aspect du menu peut varier en fonction de votre version de Visual Studio)

· Aller dans Tools, Options.

· Rechercher le sous-menu VC++ Directories dans Projects and Solutions

· Choisir Include files pour Show directories

· Ajouter les 4 sous-répertoires comme sur l'image suivante :

Le chemin C:\program files\opencv peut varier en fonction de ce que vous avez choisi lors de l'installation.

· Choisir ensuite Library files

· Rajouter la ligne C:\Program Files\OpenCV\lib

· Valider avec OK

v Configuration pour chaque projet

Cette étape est à recommencer pour chaque nouveau projet.

· Aller dans les propriétés de votre projet (ALT+F7 ou menu Project, Properties)

· Rechercher le sous-menu Linker (voir image)

· Rajouter les fichiers lib comme sur l'image.

o cv.lib et cxcore.lib sont à ajouter dans tous les cas

o highgui.lib : à ajouter si vous utilisez le gestionnaire de fenêtre d'OpenCV

o cvcam.lib : à ajouter si vous manipulez une webcam à l'aide d'OpenCV.

· Valider avec OK

b) OpenCV1.0 sous Dev-C++ 4.9.9.x (installé en langue anglaise)

L'installation sous Windows est un peu plus simple. OpenCV est distribué en tant que package binaire prêt à l'emploi. On a aussi besoin d'un compilateur C++. L'environnement de développement libre Dev-C++ fera très bien l'affaire. Voici en quelques lignes la procédure :

- Dans le menu Tools de Dev-C++, choisissez Compiler Options. Dans le premier onglet Compiler, cochez Add these commands to the linker command line et saisissez ceci dans le champ de texte : -lhighgui -lcv -lcxcore -lcvaux -lcvcam

- Cliquez maintenant sur l'onglet Directories et dans la section Libraries ajoutez le chemin suivant : C:\Program Files\OpenCV\lib

- Il reste à lister les chemins qui contiennent les fichiers headers d'OpenCV, rajoutez pour cela dans les sections à C Includes et C++ Includes tout ce qui suit :

C:\Program Files\OpenCV\cxcore\include

C:\Program Files\OpenCV\cv\include

C:\Program Files\OpenCV\otherlibs\highgui

C:\Program Files\OpenCV\cvaux\include

C:\Program Files\OpenCV\otherlibs\cvcam\include

Avant de le lancer, il reste à informer le système d'exploitation du chemin contenant les fichiers DLL d'OpenCV. Depuis les Propriétés système de Windows accessibles avec un clic droit sur le Poste de travail, cliquez sur l'onglet Avancé puis sur le bouton Variables d'environnement et dans la partie Variables système, sélectionnez la variable Path, cliquez sur le bouton Modifier et ajouter ceci à la fin du champ de saisie Valeur de la variable (n'oubliez pas le point-virgule qui sert de séparateur) :

;C:\Program Files\OpenCV\bin

Il est à signaler qu'il y a une petite différence dans l'installation des versions supérieures d'OpenCV (depuis la version 2.0), cela est du à la structure de leur dossier contenant les fichiers nécessaires à la compilation des programmes utilisant cette bibliothèque.

Par exemple pour OpenCV2.x (x représente le chiffre suivant d'une version donnéé), après avoir coché Add these commands to the linker command line et on saisit plutôt ce qui suit:

-L"C:\Program Files\OpenCV2.x\lib" -lcxcore2xx -lcv2xx -lcvaux2xx -lhighgui2xx -lml2xx

Dans les onglets des includes de C et C++, on augmente seulement une seul ligne qui est la suivante : C:\Program Files\OpenCV2.x\include\opencv.

Pour les onglets Binaries et Libraries, on augmente successivement ce qui suit :

C:\Program Files\OpenCV2.x\bin et C:\Program Files\OpenCV2.x\lib

1.4.2 Sous Linux

OpenCV ne sait pas exploiter directement un flux vidéo, pour ce faire il utilise ffmpeg, une solution complète de traitement audio/vidéo. Nous allons ici détailler l'installation de ffmpeg et d'OpenCV. Comme on ne dispose pas des droits super-utilisateurs sur la machine, on installe tout ça dans une arborescence fictive du système au sein même de notre répertoire personnel.

La procédure d'installation nécessite l'utilisation d'environ 190 Mo d'espace disque dans /tmp, qui pourront être libéré par la suite. Les fichiers qui seront installés dans votre répertoire personnel occuperont environ 60 Mo, qui ne devront pas être libéré tant que vous souhaitez continuer à utiliser OpenCV.

On commence par récupérer et extraire les sources de ffmpeg et d'OpenCV 1.0.

$ cd /tmp && mkdir `whoami` && cd `whoami`

$ wget http://ffmpeg.mplayerhq.hu/ffmpeg-checkout-snapshot.tar.bz2

$ tar xvf ffmpeg-checkout-snapshot.tar.bz2

$wget ttp://kent.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz

$ tar xvzf opencv-1.0.0.tar.gz

On installe ffmpeg dans notre répertoire personnel avec l'option --enable-shared.

$ cd ffmpeg-checkout-* && ./configure --prefix=$HOME/root/usr/local --enable-shared

$ make && make install

On configure l'installation d'OpenCV, il faut respecter à la lettre l'énumération de chaque paramètre tel qu'il est donné ci-dessous:

$ ./configure --prefix=$HOME/root/usr/local --enable-apps --enable-shared

--with-ffmpeg --with-gnu-ld --with-x --without-quicktime

CXXFLAGS=-fno-strict-aliasing

CFLAGS=-I$HOME/root/usr/local/include

CPPFLAGS=-I$HOME/root/usr/local/include

LDFLAGS=-L$HOME/root/usr/local/lib

Vérifier que ffmpeg a bien été détecté sur le système et qu'il sera utilisé pour patcher la compilation d'OpenCV. Il suffit pour cela de regarder dans les dernières lignes qui ont été écrites à l'écran. Si apparait ffmpeg: yes, vous pouvez alors continuer l'installation.

$ make && make install

Il ne reste plus qu'à rajouter ces trois lignes à la fin de votre ~/.bashrc :

#OPENCV

export LD_LIBRARY_PATH=~/root/usr/local/lib

export PKG_CONFIG_PATH=~/root/usr/local/lib/pkgconfig

Pour utiliser OpenCV tout de suite, il faut également recharger le ~/.bashrc en tapant ceci :

$ . ~/.bashrc

Pour les versions supérieures (2.0 et plus), tout a été réduit en quelques lignes de commande après avoir installé tout les atouts (c'est-à-dire mettre à jour tout le système d'exploitation et installer en particulier cmake). Taper le commande ci-dessous dans la console d'éditeur de commande unix:

1. tar -xjf OpenCV-2.x.x.tar.bz2

2. mkdir opencv.build

3. cd opencv.build

4. cmake [<extra_options>] ../OpenCV-2.x.x # CMake-way

5. make -j 2

6. sudo make install

7. sudo ldconfig # linux only

Remarque : Comme nous l'avons supposé ci-haut, x représente le chiffre de la suite de la version d'OpenCV.

Pour compiler un programme C ou C++ utilisant la bibliothèque OpenCV, on utilise cette ligne de commande :

- g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` -o Execucable Programme.c (Pour C)

- g++ `pkg-config --cflags opencv` `pkg-config --libs opencv` -o Execucable Programme.cpp(Pour C++)

CHAPITRE DEUXIEME: RECONNAISSANCE DU VISAGE

La reconnaissance du visage est un domaine très actif dans la Vision par Ordinateur et dans la Biométrie. Elle a été étudiée vigoureusement il y a déjà 25 ans et sa finalité est de produire des applications de sécurité, des applications en robotique, d'interface homme-machine, applications pour les appareils photo numériques, jeux et divertissement.

La reconnaissance du visage implique généralement deux étapes:

· La détection de visage qui consiste à chercher et à détecter un ou plusieurs visages en parcourant une image numérique ou une vidéo.

· La reconnaissance de visage qui consiste à comparer le visage détecté à celui se trouvant dans la base de données de visages reconnus afin de savoir quel est ce visage reconnu ou à qui appartient-il.

2.1 DETECTION DE VISAGE

La détection de visage est un domaine de la vision par ordinateur consistant à détecter un visage humain dans une image numérique. C'est un cas spécifique de détection d'objet, où l'on cherche à détecter la présence et la localisation précise d'un ou plusieurs visages dans une image. C'est l'un des domaines de la vision par ordinateur parmi les plus étudiés, avec de très nombreuses publications, brevets, et de conférences spécialisées. La forte activité de recherche en détection de visage a également permis de faire émerger des méthodes génériques de détection d'objet.

La détection de visage est un sujet difficile, notamment dû à la grande variabilité d'apparence des visages dans des conditions sans contraintes:

· Variabilité intrinsèque des visages humains (couleur, taille, forme)

· Présence ou absence de caractéristiques particulières ( cheveux, moustache, barbe, lunettes...)

· Expressions faciales modifiant la géométrie du visage

· Occultation par d'autres objets ou d'autres visages

· Orientation et pose (de face, de profil)

· Conditions d'illumination et qualité de l'image

2.1.1 Applications

La détection de visage a de très nombreuses applications directes en vidéo-surveillance, biométrie, robotique, commande d' interface homme-machine, photographie, indexation d'images et de vidéos, recherche d'images par le contenu, etc... Elle permet également de faciliter l'automatisation complète d'autres processus comme la reconnaissance de visage ou la reconnaissance d'expressions faciales.

Parmi les applications directes, la plus connue est sa présence dans de nombreux appareils photo numérique, où elle sert à effectuer la mise au point automatique sur les visages. C'est également une technique importante pour les interfaces homme-machine évoluées, afin de permettre une interaction plus naturelle entre un humain et un ordinateur.

La détection de visage est aussi utilisée en indexation d'images et recherche d'information, où elle peut être utilisée pour rechercher des images contenant des personnes, associer automatiquement un visage à un nom dans une page web, identifier les principales personnes dans une vidéo par clustering.

La détection de visage peut aussi servir à déterminer l'attention d'un utilisateur, par exemple face à un écran dans l'espace public, qui peut également, une fois le visage détecté, déterminer le sexe et l'âge de la personne afin de proposer des publicités ciblées. Cela peut également servir à savoir si une personne est bien présente devant une télévision allumée, et dans le cas contraire mettre l'appareil en veille ou réduire la luminosité afin d'économiser de l'énergie.

De façon plus indirecte, la détection de visage est la première étape vers des applications plus évoluées, qui nécessitent la localisation du visage, comme la reconnaissance de visage, la reconnaissance d'expression faciales, l'évaluation de l'âge ou du sexe d'une personne, le suivi de visage ou l'estimation de la direction du regard et de l'attention visuelle.

2.1.2 Méthode de détection de visage

La méthode la plus utilisée est celle de Viola et Jones (2(*)).

Elle est une méthode de détection d'objet dans une image numérique, proposée par les chercheurs Paul Viola et Michael Jones en 2001. Elle fait partie des toutes premières méthodes capables de détecter efficacement et en temps réel des objets dans une image. Inventée à l'origine pour détecter des visages, elle peut également être utilisée pour détecter d'autres types d'objets comme des voitures ou des avions. La méthode de Viola et Jones est l'une des méthodes les plus connues et les plus utilisées, en particulier pour la détection de visages et la détection de personnes.

En tant que procédé d' apprentissage supervisé, la méthode de Viola et Jones nécessite de quelques centaines à plusieurs milliers d'exemples de l'objet que l'on souhaite détecter, pour entraîner un classifieur. Une fois son apprentissage réalisé, ce classifieur est utilisé pour détecter la présence éventuelle de l'objet dans une image en parcourant celle-ci de manière exhaustive, à toutes les positions et dans toutes les tailles possibles.

Considérée comme étant l'une des plus importantes méthodes de détection d'objet, la méthode de Viola et Jones est notamment connue pour avoir introduit plusieurs notions reprises ensuite par de nombreux chercheurs en vision par ordinateur, à l'exemple de la notion d' image intégrale ou de la méthode de classification construite comme une cascade de classifieurs boostés.

Cette méthode bénéficie d'une implémentation sous licence BSD dans OpenCV qui est comme nous l'avons vu, une librairie très utilisée en vision par ordinateur.

2.1.2.1 Historique

Paul Viola et Michael Jones, alors au Cambridge Research Laboratory de la société américaine Compaq, publient la méthode qui porte leur nom pour la première fois le 13  juillet  2001 dans le journal scientifique International Journal of Computer Vision (IJCV). Les deux auteurs publient ensuite deux autres articles sur la méthode : une version moins détaillée, présentée à la Conference on Computer Vision and Pattern Recognition (CVPR) en décembre 2001 et une version révisée en 2004, toujours dans IJCV.

Les caractéristiques extraites par cette méthode sont inspirées des travaux de Papageorgiou, Oren et Poggio, datant de 1998, qui utilisent des caractéristiques construites à partir d' ondelettes de Haar. La méthode s'inspire également de précédents travaux de Paul Viola et Kinh Tieu dans un autre domaine, celui de la recherche d'image par le contenu, en reprenant l'idée de sélection de caractéristiques par AdaBoost. Parmi les nombreuses méthodes de détection de visages publiées à l'époque, Viola et Jones considèrent en particulier celle de Rowley- Kanade : en raison de ses excellents résultats et de sa rapidité, ils la prennent comme référence pour les comparaisons. À performances équivalentes, Viola et Jones notent que la détection par leur méthode est 15 fois plus rapide que le détecteur de Rowley-Kanade.

La méthode, considérée comme l'une des plus efficaces en détection de visage, devient rapidement un standard dans ce domaine. Les travaux de Viola et Jones sont parmi les plus utilisés et les plus cités par les chercheurs, et de nombreuses améliorations sont ainsi proposées. Leurs travaux sont également étendus à d'autres types d'objets que les visages et la méthode devient ainsi un standard en détection d'objet. La méthode est par ailleurs reconnue comme étant celle ayant eu le plus d'impact dans le domaine de la détection de visage dans les années 2000.

2.1.2.2 Éléments de la méthode

La méthode de Viola et Jones est une approche basée apparence, qui consiste à parcourir l'ensemble de l'image en calculant un certain nombre de caractéristiques dans des zones rectangulaires qui se chevauchent. Elle a la particularité d'utiliser des caractéristiques très simples mais très nombreuses. Une première innovation de la méthode est l'introduction des images intégrales, qui permettent le calcul rapide de ces caractéristiques. Une deuxième innovation importante est la sélection de ces caractéristiques par boosting, en interprétant les caractéristiques comme des classifieurs. Enfin, la méthode propose une architecture pour combiner les classifieurs boostés en un processus en cascade, ce qui apporte un net gain en temps de détection.

La méthode, en tant que méthode d' apprentissage supervisé, est divisée en deux étapes : une étape d'apprentissage du classifieur basé sur un grand nombre d'exemples positifs (c'est-à-dire les objets d'intérêt, par exemple des visages) et d'exemples négatifs, et une phase de détection par application de ce classifieur à des images inconnues.

a) Caractéristiques

Description

Figure 1- Un exemple des types de caractéristiques utilisées par Viola et Jones.

Source : http://fr.wikipedia.org/wiki/Méthode_de_Viola_et_Jones, valide le 10/10/2011

Plutôt que de travailler directement sur les valeurs de pixels, et pour être à la fois plus efficace et plus rapide, Viola et Jones proposent d'utiliser des caractéristiques, c'est à dire une représentation synthétique et informative, calculée à partir des valeurs des pixels. Viola et Jones définissent des caractéristiques très simples, les caractéristiques pseudo-Haar, qui sont calculées par la différence des sommes de pixels de deux ou plusieurs zones rectangulaires adjacentes. La figure ci-contre donne des exemples des caractéristiques proposées par Viola et Jones à 2, 3 ou 4 rectangles, dans lesquelles la somme de pixels sombres est soustraite de la somme des pixels blancs. Leur nom vient de leur similitude avec les ondelettes de Haar, précédemment proposées comme caractéristiques par Papageorgiou et dont se sont inspirés Viola et Jones.

Pour calculer rapidement et efficacement ces caractéristiques sur une image, les auteurs proposent également une nouvelle méthode, qu'ils appellent «  image intégrale ». C'est une représentation sous la forme d'une image, de même taille que l'image d'origine, qui en chacun de ses points contient la somme des pixels situés au-dessus de lui et à sa gauche. Plus formellement, l'image intégrale ii au point (x,y) est définie à partir de l'image i par :

Grâce à cette représentation, une caractéristique formée de deux zones rectangulaires peut être calculée en seulement 6 accès à l'image intégrale, et donc en un temps constant quelle que soit la taille de la caractéristique.

b) Calcul

Les caractéristiques sont calculées à toutes les positions et à toutes les échelles dans une fenêtre de détection de petite taille, typiquement de 24 × 24 pixels ou de 20 × 15 pixels. Un très grand nombre de caractéristiques par fenêtre est ainsi généré, Viola et Jones donnant l'exemple d'une fenêtre de taille 24 × 24 qui génère environ 160 000 caractéristiques.

En phase de détection, l'ensemble de l'image est parcouru en déplaçant la fenêtre de détection d'un certain pas dans le sens horizontal et vertical (ce pas valant 1 pixel dans l'algorithme original). Les changements d'échelles se font en modifiant successivement la taille de la fenêtre de détection [. Viola et Jones utilisent un facteur multiplicatif de 1,25, jusqu'à ce que la fenêtre couvre la totalité de l'image.

Finalement, et afin d'être plus robuste aux variations d'illumination, les fenêtres sont normalisées par la variance.

La conséquence de ces choix techniques, notamment le recours aux images intégrales, est un gain notable en efficacité, les caractéristiques étant évaluées très rapidement quelle que soit la taille de la fenêtre.

c) Sélection de caractéristiques par boosting

Le deuxième élément clé de la méthode de Viola et Jones est l'utilisation d'une méthode de boosting afin de sélectionner les meilleures caractéristiques. Le boosting est un principe qui consiste à construire un classifieur « fort » à partir d'une combinaison pondérée de classifieurs « faibles », c'est-à-dire donnant en moyenne une réponse meilleure qu'un tirage aléatoire. Viola et Jones adaptent ce principe en assimilant une caractéristique à un classifieur faible, en construisant un classifieur faible qui n'utilise qu'une seule caractéristique. L'apprentissage du classifieur faible consiste alors à trouver la valeur seuil de la caractéristique qui permet de mieux séparer les exemples positifs des exemples négatifs. Le classifieur se réduit alors à un couple (caractéristique, seuil).

L'algorithme de boosting utilisé est en pratique une version modifiée d' AdaBoost, qui est utilisée à la fois pour la sélection et pour l'apprentissage d'un classifieur « fort ». Les classifieurs faibles utilisés sont souvent des arbres de décision. Un cas remarquable, fréquemment rencontré, est celui de l'arbre de profondeur 1, qui réduit l'opération de classification à un simple seuillage.

L'algorithme est de type itératif, à nombre d'itérations déterminé. À chaque itération, l'algorithme sélectionne une caractéristique, qui sera ajoutée à la liste des caractéristiques sélectionnées aux itérations précédentes, et le tout va contribuer à la construction du classifieur fort final. Cette sélection se fait en entraînant un classifieur faible pour toutes les caractéristiques et en élisant celle de ces dernières qui génère l'erreur la plus faible sur tout l'ensemble d'apprentissage. L'algorithme tient également à jour une distribution de probabilité sur l'ensemble d'apprentissage, réévaluée à chaque itération en fonction des résultats de classification. En particulier, plus de poids est attribué aux exemples difficiles à classer, c'est à dire ceux dont l'erreur est élevée. Le classifieur « fort » final construit par AdaBoost est composé de la somme pondérée des classifieurs sélectionnés.

Plus formellement, on considère un ensemble de n images et leurs étiquettes associées , qui sont telles que yi = 0 si l'image xi est un exemple négatif et yi = 1 si xi est un exemple de l'objet à détecter. L'algorithme de boosting est constitué d'un nombre T d'itérations, et pour chaque itération t et chaque caractéristique j, on construit un classifieur faible hj. Idéalement, le but est d'obtenir un classifieur h qui prédise exactement les étiquettes pour chaque échantillon, c'est-à-dire yi = h(xi) . En pratique, le classifieur n'est pas parfait et l'erreur engendrée par ce classifieur est donnée par :

,

les wi étant les poids associés à chaque exemple et mis à jour à chaque itération en fonction de l'erreur obtenue à l'itération précédente. On sélectionne alors à l'itération t le classifieur ht présentant l'erreur la plus faible : åt = minjj).

Le classifieur fort final h(x) est construit par seuillage de la somme pondérée des classifieurs faibles sélectionnés :

Les át sont des coefficients calculés à partir de l'erreur åt.

d) Cascade de classifieurs

Figure 2 - Illustration de l'architecture de la cascade : les fenêtres sont traitées séquentiellement par les classifieurs, et rejetées immédiatement si la réponse est négative (F).

La méthode de Viola et Jones est basée sur une approche par recherche exhaustive sur l'ensemble de l'image, qui teste la présence de l'objet dans une fenêtre à toutes les positions et à plusieurs échelles. Cette approche est cependant extrêmement coûteuse en calcul. L'une des idées-clés de la méthode pour réduire ce coût réside dans l'organisation de l'algorithme de détection en une cascade de classifieurs. Appliqués séquentiellement, ces classifieurs prennent une décision d'acceptation -- la fenêtre contient l'objet et l'exemple est alors passé au classifieur suivant --, ou de rejet -- la fenêtre ne contient pas l'objet et dans ce cas l'exemple est définitivement écarté --. L'idée est que l'immense majorité des fenêtres testées étant négatives (c.-à-d. ne contiennent pas l'objet), il est avantageux de pouvoir les rejeter avec le moins possible de calculs. Ici, les classifieurs les plus simples, donc les plus rapides, sont situés au début de la cascade, et rejettent très rapidement la grande majorité des exemples négatifs. Cette structure en cascade peut également s'interpréter comme un arbre de décision dégénéré, puisque chaque noeud ne comporte qu'une seule branche.

En pratique, la cascade est constituée d'une succession d'étages, chacune étant formée d'un classifieur fort appris par AdaBoost. L'apprentissage du classifieur de l'étage n est réalisé avec les exemples qui ont passé l'étage n - 1 ; ce classifieur doit donc faire face à un problème plus difficile : plus on monte dans les étages, plus les classifieurs sont complexes.

Le choix du nombre K d'étages est fixé par l'utilisateur ; dans leur méthode originale, Viola et Jones utilisent K = 32 étages. L'utilisateur doit également spécifier le taux de détection minimal di et le taux de fausse alarme maximal fi à atteindre pour l'étage i. Le taux de détection de la cascade est alors donné par :

et le taux de fausse alarme par :

Source : http://fr.wikipedia.org/wiki/Méthode_de_Viola_et_Jones, valide le 10/10/2011

En pratique, les taux di et fi sont les mêmes pour tous les étages. Indirectement, ces taux déterminent également le nombre de caractéristiques utilisées par les classifieurs forts à chaque étage : les itérations d'Adaboost continuent jusqu'à ce que le taux de fausse alarme cible soit atteint. Des caractéristiques/classifieurs faibles sont ajoutés jusqu'à ce que les taux cibles soient atteints, avant de passer ensuite à l'étage suivant.

Pour atteindre des taux de détection et de fausse alarme corrects en fin de cascade, il est nécessaire que les classifieurs forts de chaque étage aient un bon taux de détection ; ils peuvent par contre avoir un taux de fausses alarmes élevé. Si l'on prend l'exemple d'une cascade de 32 étages, pour obtenir une performance finale D = 0.9 et F = 10 - 6, chaque classifieur fort doit atteindre di = 0,997. Chaque étage ajouté diminue donc non seulement le nombre de fausses alarmes, mais aussi le taux de détection.

Plusieurs chercheurs font remarquer que cette idée de filtrer rapidement les exemples négatifs les plus simples n'est pas nouvelle. Elle existe dans d'autres méthodes sous forme d' heuristiques, comme la détection de la couleur chair ou une étape de pré-classification.

2.1.3 Étapes clés de la méthode

a) Apprentissage

L'apprentissage est réalisé sur un très large ensemble d'images positives (c'est-à-dire contenant l'objet) et négatives (ne contenant pas l'objet). Plusieurs milliers d'exemples sont en général nécessaires. Cet apprentissage comprend :

1. Le calcul des caractéristiques pseudo-Haar sur les exemples positifs et négatifs ;

2. L'entraînement de la cascade : à chaque étage de la cascade, un classifieur fort est entraîné par AdaBoost. Il est construit par ajouts successifs de classifieurs faibles entraînés sur une seule caractéristique, jusqu'à l'obtention de performances conformes aux taux de détection et de fausse alarme souhaités pour l'étage.

b) Détection

La détection s'applique sur une image de test, dans laquelle on souhaite déceler la présence et la localisation d'un objet. En voici les étapes :

· parcours de l'ensemble de l'image à toutes les positions et échelles, avec une fenêtre de taille 24 × 24 pixels, et application de la cascade à chaque sous-fenêtre, en commençant par le premier étage :

· calcul des caractéristiques pseudo-Haar utilisées par le classifieur de l'étage courant,

· puis calcul de la réponse du classifieur,

· passage ensuite à l'étage supérieur si la réponse est positive, à la sous-fenêtre suivante sinon,

· et enfin l'exemple est déclaré positif si tous les étages répondent positivement ;

· fusion des détections multiples : l'objet peut en effet générer plusieurs détections, à différentes positions et échelles ; cette dernière étape fusionne les détections qui se chevauchent pour ne retourner qu'un seul résultat.

2.1.4 Limitations et extensions de la méthode

Figure 3 - L'extension des caractéristiques pseudo-Haar proposée par Lienhart.

Source : http://fr.wikipedia.org/wiki/Méthode_de_Viola_et_Jones, valide le 10/10/2011

De très nombreuses améliorations ont été proposées par la suite, visant à améliorer le paramétrage de la méthode, ou à en combler un certain nombre de limitations.

L'une des premières améliorations est apportée par Lienhart et Maydt en 2002. Ils proposent d'étendre l'ensemble de caractéristiques pseudo-Haar utilisé de 4 à 14 caractéristiques. De même, ils introduisent des caractéristiques « de biais » (tournées de 45°), ainsi qu'une méthode pour les calculer basée sur une extension des images intégrales.

D'autres types de caractéristiques ont également été utilisés en remplacement des caractéristiques de Haar : les histogrammes de gradients orientés, les motifs binaires locaux ou la covariance de région. Les chercheurs ont également proposé d'utiliser des variantes de l'algorithme de boosting, notamment RealBoost, qui produit un indice de confiance à valeurs réelles, en plus de la classification. Plusieurs travaux ont ainsi montré la supériorité de RealBoost sur AdaBoost dans le cadre de l'algorithme de Viola et Jones.

Viola et Jones étendent en 2003 leur système à la détection de piétons dans des vidéos, en incluant une information de mouvement en plus de l'information d'apparence.

Une des limitations de la méthode est son manque de robustesse à la rotation, et sa difficulté à apprendre plusieurs vues d'un même objet. En particulier, il est difficile d'obtenir un classifieur capable de détecter à la fois des visages de face et de profil. Viola et Jones ont proposé une amélioration qui permet de corriger ce défaut, qui consiste à apprendre une cascade dédiée à chaque orientation ou vue, et à utiliser lors de la détection un arbre de décision pour sélectionner la bonne cascade à appliquer. Plusieurs autres améliorations ont été proposées par la suite pour apporter une solution à ce problème.

Une autre limitation importante de la méthode de Viola et Jones concerne le temps d'apprentissage de la cascade, compris généralement entre plusieurs jours et plusieurs semaines de calcul, ce qui limite sévèrement les possibilités de tests et de choix des paramètres.

Un des problèmes majeurs de la méthode proposée par Viola et Jones est qu'il n'existe pas de méthode optimale pour choisir les différents paramètres régissant l'algorithme : le nombre d'étages, leur ordre ou les taux de détection et de fausses alarmes pour chaque étage doivent être choisis par essais et erreurs. Plusieurs méthodes sont proposées pour déterminer certains de ces seuils de manière automatique.

Un reproche également fait à la méthode concerne la perte d'information subie au passage d'un étage à l'autre de la cascade, perte due à l'effet couperet des décisions d'acceptation ou de rejet prises à chaque étage. Certains chercheurs proposent la solution de garder l'information contenue dans la somme pondérée des classifieurs faibles, par exemple le « boosting chain » de Xiao. Une modification plus radicale de structure est proposée par Bourdev et sa notion de cascade souple, qui consiste essentiellement à supprimer le concept d'étages, en formant un seul classifieur fort, donc une seule somme, et en permettant de prendre une décision à chaque évaluation de classifieur faible et de s'affranchir de la contrainte des taux de détection et de fausses alarmes cibles.

2.2 LA RECONNAISSANCE DU VISAGE

La reconnaissance faciale est une tâche que les humains effectuent naturellement et sans effort dans leurs vies quotidiennes. La grande disponibilité d'ordinateurs puissants et peu onéreux ainsi que des systèmes informatiques embarqués ont suscité un énorme intérêt dans le traitement automatique des images et des vidéos numériques au sein de nombreuses applications, incluant l'identification biométrique, la surveillance, l'interaction homme-machine et la gestion de données multimédia. La reconnaissance faciale, en tant qu'une des technologies biométriques de base, a pris une part de plus en plus importante dans le domaine de la recherche, ceci étant dû aux avances rapides dans des technologies telles que les appareils photo numériques, Internet et les dispositifs mobiles, le tout associé à des besoins en sécurité sans cesse en augmentation.

La reconnaissance faciale possède plusieurs avantages sur les autres technologies biométriques: elle est naturelle, non intrusive et facile à utiliser.

Parmi les six attributs biométriques considérés par Hietmeyer (3(*)), les caractéristiques faciales marquent un score de compatibilité le plus élevé dans un système MRTD Machine Readable Travel Documents») (4(*)), ce score étant basé sur plusieurs facteurs d'évaluation tels que l'enrôlement, le renouvellement des données, les requis matériels et la perception des utilisateurs (Figure 4)..

Figure 4 - Scores de compatibilité pour différentes technologies biométriques dans un système MRTD.

Idéalement, un système de reconnaissance faciale doit pouvoir identifier des visages présents dans une image ou une vidéo de manière automatique. Le système peut opérer dans les deux modes suivants : authentification ou identification ; on peut également noter qu'il existe un autre type de scénario de reconnaissance faciale mettant en jeu une vérification sur une liste de surveillance («watch-list»), où un individu est comparé à une liste restreinte de suspects. Le principe de fonctionnement de base d'un système de reconnaissance faciale (Figure 5) peut être résumé en quatre étapes : les deux premières s'effectuent en amont du système (détection (5(*))et normalisation du visage (6(*))) et les deux dernières représentent la reconnaissance à proprement dit (extraction et comparaison des caractéristiques).

Figure 5 - Principe de fonctionnement de base d'un système de reconnaissance faciale.

La performance des systèmes de reconnaissance faciale s'est significativement améliorée depuis les premiers travaux qui ont été menés dans les années 1960-1970(7(*)) et de nombreux algorithmes de reconnaissance du visage ont été proposés depuis. Certaines méthodes se basent sur une photographie (2D) du visage tandis que d'autres méthodes prennent en compte des informations 3D de celui-ci. On peut également noter qu'il existe d'autres méthodes (parfois appelées 2.5D) qui effectuent la reconnaissance du visage en se basant la plupart du temps sur l'information de profondeur.

Cependant, ces dernières méthodes peuvent demander un coup de déploiement élevé dû à l'investissement de scanners 3D coûteux. Un autre inconvénient majeur concerne le grand volume de données tridimensionnelles qu'il est souvent nécessaire de convertir afin de pouvoir les traiter convenablement, ce qui implique une utilisation encore relativement inadaptée à des contraintes temps-réel, contrairement au traitement de photographies 2D. Enfin, à notre connaissance, il n'existe pas de bases de données officielles 3D comprenant un nombre suffisamment élevé d'utilisateurs pour pouvoir évaluer le rapport entre la performance gagnée par l'utilisation d'une troisième dimension et les coûts supplémentaires en termes de ressources et de temps de calcul. Par conséquent, pour la partie concernant la reconnaissance faciale, nous privilégierons l'étude des méthodes 2D.

Les méthodes de reconnaissance faciales peuvent être séparées en deux grandes familles, les méthodes globales (ou holistiques) et les méthodes locales, basées sur des modèles. Le choix a été fait de se concentrer sur ces deux types d'approches fondamentales et de n'aborder ni les réseaux neuronaux (8(*)) (plus adaptés à la détection des visages), ni les modèles cachés de Markov (9(*)) (plus utilisés en reconnaissance de la parole) car ces deux dernières techniques rencontrent des problèmes lorsque le nombre d'individus augmente (les calculs deviennent très importants) ; de plus elles ne conviennent pas pour les systèmes de reconnaissance basés sur une seule "image modèle" car de nombreuses images par personne sont nécessaires pour entraîner les systèmes afin de configurer leurs paramètres de façon "optimale".

2.2.1 Méthodes globales

Les méthodes globales sont basées sur des techniques d'analyse statistique bien connues. Il n'est pas nécessaire de repérer certains points caractéristiques du visage (comme les centres des yeux, les narines, le centre de la bouche, etc.) à part pour normaliser les images. Dans ces méthodes, les images de visage (qui peuvent être vues comme des matrices de valeurs de pixels) sont traitées de manière globale et sont généralement transformées en vecteurs, plus faciles à manipuler.

L'avantage principal des méthodes globales est qu'elles sont relativement rapides à mettre en oeuvre et que les calculs de base sont d'une complexité moyenne. En revanche, elles sont très sensibles aux variations d'éclairement, de pose et d'expression faciale.

Ceci se comprend aisément puisque la moindre variation des conditions de l'environnement ambiant entraîne des changements inéluctables dans les valeurs des pixels qui sont traités directement.

Ces méthodes utilisent principalement une analyse de sous-espaces de visages. Cette expression repose sur un fait relativement simple : une classe de "formes" qui nous intéresse (dans notre cas, les visages) réside dans un sous-espace de l'espace de l'image d'entrée.

Par exemple, considérons une petite image de 64×64, en niveaux de gris codés sur 8 bits (donc de 0 à 255). Cette dernière possède 4096 pixels qui peuvent exprimer un grand nombre de classes de formes, comme des arbres, des maisons ou encore des visages.

Cependant, parmi les 2564096 > 109864 "configurations" possibles, seulement une petite quantité peut correspondre à des visages. Ainsi, la représentation de l'image originale est très redondante et la dimensionnalité de cette représentation pourrait être grandement réduite si l'on se concentre uniquement sur les formes qui nous intéressent. L'utilisation de techniques de modélisation de sous-espace a fait avancer la technologie de reconnaissance faciale de manière significative.

Nous pouvons distinguer deux types de techniques parmi les méthodes globales : Les techniques linéaires et les techniques non linéaires.

Les techniques linéaires projettent linéairement les données d'un espace de grande dimension (par exemple, l'espace de l'image originale) sur un sous-espace de dimension inférieure. Malheureusement, ces techniques sont incapables de préserver les variations non convexes des variétés (géométriques donc au sens mathématique du terme) de visages afin de différencier des individus.

Dans un sous-espace linéaire, les distances euclidiennes (cfr. Annexe A.1) et plus généralement les distances de Mahalanobis (cfr. Annexe A.2), qui sont normalement utilisées pour faire comparer des vecteurs de données, ne permettent pas une bonne classification entre les classes de formes "visage" et "non-visage" et entre les individus eux-mêmes. Ce facteur crucial limite le pouvoir des techniques linéaires pour obtenir une détection et une reconnaissance du visage très précises.

La technique linéaire la plus connue et sans aucun doute l'Analyse en Composantes Principales (abrégé PCA en anglais), également appelée transformée de Karhunen-Loeve. Le PCA fut d'abord utilisé afin de représenter efficacement des images de visages humains (10(*)).

En 1991, cette technique a été reprise dans le cadre plus spécifique de la reconnaissance faciale sous le nom de méthode des Eigenfaces (11(*)) (on en trouvera une explication approfondie en Annexe B.1).

Cependant, le PCA classique nécessite que les images de visage soient mises sous formes de vecteurs, ce qui a pour effet de détruire la structure géométrique de l'image.

Pour ne pas perdre les informations de voisinage lors du passage de l'image en vecteur, une méthode PCA bi-dimensionnelle (2-D PCA) a été étudiée. Cette méthode prend en entrée des images et non plus des vecteurs.

Il existe d'autres techniques également construites à partir de décompositions linéaires comme l'analyse discriminante linéaire (abrégé LDA en anglais) ou encore l'analyse en composantes indépendantes (abrégé ICA en anglais).

Tandis que le PCA construit un sous-espace pour représenter de manière "optimale" (mathématiquement parlant) seulement "l'objet" visage, le LDA construit un sous-espace discriminant pour distinguer de façon "optimale" les visages de différentes personnes.

Elle permet donc d'effectuer une véritable séparation de classes (une explication détaillée du LDA pourra être consultée en Annexe B.2). Des études comparatives montrent que les méthodes basées sur le LDA donnent généralement de meilleurs résultats que les méthodes basées sur le PCA.

L'algorithme ICA, quant à lui, est une généralisation de l'algorithme PCA avec lequel il coïncide dans le cas de données gaussiennes. L'algorithme ICA est basé sur le concept intuitif de contraste et permet d'éliminer la redondance statistique des données de départ. Ce dernier a été rendu célèbre notamment avec l'expérience de la «cocktail party» (12(*))qui met en avant la résolution d'un problème de séparation (décorrélation) de sources audio. Bartlett et al. ont fourni deux architectures différentes pour l'ICA : une première architecture (ICA I) qui construit une base d'images statistiquement indépendantes et une deuxième architecture (ICA II) qui fournit une représentation en code factoriel des données.

Bien que ces méthodes globales linéaires basées sur l'apparence évitent l'instabilité des toutes premières méthodes géométriques qui ont été mises au point, elles ne sont pas assez précises pour décrire les subtilités des variétés (géométriques) présentes dans l'espace de l'image originale. Ceci est dû à leurs limitations à gérer la non-linéarité en reconnaissance faciale : les déformations de variétés non linéaires peuvent être lissées et les concavités peuvent être remplies, causant des conséquences défavorables.

Afin de pouvoir traiter ce problème de non-linéarité en reconnaissance faciale, de telles méthodes linéaires ont été étendues à des techniques non linéaires basées sur la notion mathématique de noyau («kernel») comme le Kernel PCA (13(*)) et le Kernel LDA (14(*)).Ici, une projection non linéaire (réduction de dimension) de l'espace de l'image sur l'espace de caractéristiques («feature space») est effectuée ; les variétés présentes dans l'espace de caractéristiques résultant deviennent simple, de même que le subtilités des variétés qui sont préservées. Bien que les méthodes basées sur le noyau peuvent atteindre une bonne performance sur les données d'entraînement, il ne peut pas en être de même pour de nouvelles données en raison de leur plus grande flexibilité ; contrairement aux méthodes linéaires.

2.2.2 Méthodes locales

Les méthodes locales, basées sur des modèles, utilisent des connaissances a priori que l'on possède sur la morphologie du visage et s'appuient en général sur des points caractéristiques de celui-ci. Kanade présenta un des premiers algorithmes de ce type en détectant certains points ou traits caractéristiques d'un visage puis en les comparant avec des paramètres extraits d'autres visages. Ces méthodes constituent une autre approche pour prendre en compte la non-linéarité en construisant un espace de caractéristiques local et en utilisant des filtres d'images appropriés, de manière à ce que les distributions des visages soient moins affectées par divers changements.

Les approches Bayesiennes, les machines à vecteurs de support, la méthode des modèles actifs d'apparence ou encore la méthode «local binary pattern» ont été utilisées dans ce but.

Toutes ces méthodes ont l'avantage de pouvoir modéliser plus facilement les variations de pose, d'éclairage et d'expression par rapport aux méthodes globales. Toutefois, elles sont plus lourdes à utiliser puisqu'il faut souvent placer manuellement un assez grand nombre de points sur le visage alors que les méthodes globales ne nécessitent de connaître que la position des yeux afin de normaliser les images, ce qui peut être fait automatiquement et de manière assez fiable par un algorithme de détection.

2.2.3 Méthodes hybrides

Les méthodes hybrides permettent d'associer les avantages des méthodes globales et locales en combinant la détection de caractéristiques géométriques (ou structurales) avec l'extraction de caractéristiques d'apparence locales. Elles permettent d'augmenter la stabilité de la performance de reconnaissance lors de changements de pose, d'éclairement et d'expressions faciales.

L'analyse de caractéristiques locales et les caractéristiques extraites par ondelettes de Gabor (comme l'Elastic Bunch Graph Matching, dont on trouvera une présentation plus détaillée en Annexe B.3), sont des algorithmes hybrides typiques.

Plus récemment, l'algorithme LogGabor PCA effectue une convolution avec des ondelettes de Gabor orientées autour de certains points caractéristiques du visage afin de créer des vecteurs contenant la localisation et la valeur d'amplitudes énergétiques locales ; ces vecteurs sont ensuite envoyés dans un algorithme PCA afin de réduire la dimension des données.

La figure 6 fournit une classification des algorithmes principaux de reconnaissance faciale.

Figure 6 - Une classification des algorithmes principaux utilisés en reconnaissance faciale.

Comme nous l'avons signalé dans la partie introductive, nous avons utilisé la méthode globale (ou holistique). Dans cette dernière, nous avons utilisé l'une de ces techniques linéaires qui est l'Analyse en Composantes Principales mais qui est bidimensionnelle.

CHAPITRE TROISIEME : MISE EN PLACE D'UNE APPLICATION D'IDENTIFICATION DE PERSONNES PAR RECONNAISSANCE DE VISAGE POUR LA SECURITE D'UNE INSTITUTION BANCAIRE

3.1 ENVIRONNEMENT UTILISE

Notre sujet de recherche nous a permis d'aboutir à la conception d'une application permettant d'assurer la sécurité d'une institution bancaire.

Notre application tourne sous un ordinateur ayant les caractéristiques suivantes :

a. Environnement matériel ou le hardware

· Toshiba satellite C660

· Capacité du disque dur : 500 gigaoctet

· Modèle du processeur : Intel Celeron

· Vitesse du processeur : 2,30 gigahertz

· Mémoire RAM : 2 gigaoctet

b. Environnement immatérielle ou le software

· Système d'exploitation : Linux dans sa distribution Ubuntu 10.10

· Version d'OpenCV : 2.3.1

· Version cmake : 2.8.2

· Version ffmpeg : 0.6-4 :0.6-2ubuntu6.3

Ceci étant l'environnement sous lequel a tourné notre application, il est à signaler qu'elle peut aussi tourner sur d'autres ordinateurs à technologie moderne.

3.2 PROGRAMMATION

Nous avons commencé par importer les bibliothèques suivantes que nous allons préciser leur utilisation au fur et à mesure que nous avançons dans notre programmation. Voici les bibliothèques utilisées :· <cv.h>

· <highgui.h>

· <cvaux.h>

· <stdio.h>

· <stdlib.h>

· <string.h>

· <assert.h>

· <math.h>

· <float.h>

· <limits.h>

· <time.h>

· <ctype.h>· Détection de visage

Pour que l'application parvienne à détecter le visage humain, il faut d'abord qu'il parvienne à lire à partir d'une camera (webcam). Nous savons aussi qu'un flux est une succession d'images (appelées frames) qui ont été prises à intervalles de temps réguliers.

Pour arriver à capturer les éléments qui passent devant la caméra, nous avons utilisé la fonction cvCaptureFromCAM et nous avons stocké cette donnée dans la variable capture qui est du type Iplimage.

Une condition a été utilisée pour vérifier si la capture a été réalisée.

Si oui, ouverture d'une boucle infinie et dans cette dernière nous avons utilisé la fonction cvGrabFrame pour saisir des frames de la caméra et nous les stockons dans la variable frame.

Si non, chargement d'un fichier image d'une personne qui se trouve dans un emplacement de l'ordinateur à l'aide de la fonction cvLoadImage.

Toujours dans la boucle infinie, nous avons alloué une image de même dimension que la frame saisie et nous avons crée une copie bien sûr avec la fonction cvCopy et c'est sur cette copie que nous avions à appliquer la détection du visage. Dans cette même boucle (infinie), nous y avons mis la condition d'arrêt de la boucle au cas où on appuyait sur n'importe quelle touche du clavier avec la fonction cvWaitKey.

A la fin de cette boucle, nous avons détruit la frame et la copy de la frame (qui sont considérées ici comme étant déjà des images) à l'aide de la fonction cvReleaseImage . Pour ainsi tout afficher dans une fenêtre et donner le nom à cette dernière, nous avons utilisé la fonction cvNamedWindow, cette fenêtre est détruite à la fin de la boucle par la fonction cvDetroyWindow au cas où on quittait le programme en l'arrêtant.

Nous avons pu afficher un message sur la fenêtre de la vidéo créée grâce à la fonction cvPutText.

Cette partie expliquée étant la partie principale du programme (le main en anglais), nous a permis d'aboutir au résultat suivant et qui est représenté par l'image ci-dessous :

Pour arriver à détecter le visage présent devant la camera, nous avons fait usage de la fonction cvHaarDetectObjects.

Cette fonction fait appel à un classifieur qui permet de détecter le visage d'une personne devant la camera.

NB : Il est à noter que ces classifieurs ne sont pas les mêmes parce que sont crées pour des fins différentes : pour détecter les personnes, détecter les voiture, détecter les plaques des voitures,...

OpenCV vient déjà avec différents classifieurs du visage (face) humain dès son installation. Ces différents classifieurs sont situés dans le dossier data/ haarcascades/. Voici en exemple les classifieurs que nous trouvons dans OpenCV de sa version 2.2.0 :

haarcascade_eye

haarcascade_eye_tree_eyeglasses

haarcascade_frontalface_alt

haarcascade_frontalface_alt_tree

haarcascade_frontalface_alt2

haarcascade_frontalface_default

haarcascade_fullbody

haarcascade_lefteye_2splits

haarcascade_lowerbody

haarcascade_mcs_eyepair_big

haarcascade_mcs_eyepair_small

haarcascade_mcs_lefteye

haarcascade_mcs_mouth

haarcascade_mcs_nose

haarcascade_mcs_righteye

haarcascade_mcs_upperbody

haarcascade_profileface

haarcascade_righteye_2splits

haarcascade_upperbody

Etant donné que nous avions à détecter le visage humain, nous avons fait usage du classifieur haarcascade_frontalface_alt.xml.

C'est ainsi que nous avons crée une fonction appelée detecte_et_dessine qui détecte le visage et dessine un rectangle autour du visage comme son nom l'indique. Dans cette dernière, nous chargeons le classifieur qui a été stocké dans une variable. Si le chargement réussit, nous parcourons les frames avec la fonction cvHaarDetectObjects pour chercher à détecter tout visage devant la camera. Une fois le visage détecté, nous le parcourons en considérant ses différents cotés et nous y traçons un rectangle avec la fonction cvRectangle. Pour mieux voir le visage détecté, nous l'affichons dans une autre fenêtre Windows.

Nous savons que la reconnaissance faciale a ses limites entre autre les conditions d'éclairage pour mieux assurer la reconnaissance de visage. Pour contourner cette difficulté, nous avons converti cette figure détectée en image grise sur laquelle nous appliquons l'égalisation d'histogramme pour rendre la surbrillance et le contraste consistants à l'aide de la fonction cvEqualizeHist.

Ainsi la détection est réalisée et nous aboutissons au résultat suivant représenté par l'image ci-dessous:

Voici en quelques lignes le code utilisé pour la détection de visage :

Nous avons crée deux autres fonctions nommées Enreg_faceImg1 et Enreg_faceImg2. La première fait l'enregistrement de visages dans le dossier des visages temporaires dans et la deuxième le dossier considéré comme la base de données des visages sélectionnés. Ces deux fonctions nous ont permis d'enregistrer chaque fois 3 images successivement après chaque seconde à l'aide de la fonction cvSaveImage dans des emplacements différents ci-haut signalés.

Dans ces fonctions, nous avons utilisé le format de la date/heure pour donner le nom aux figures capturées. Ceci nous a permis de capturer une ou plusieurs images de figures ayant chacune un nom différent de l'autre.

C'est ainsi que nous avions à stocker les figures sur le disque dur dans un emplacement précis. En plus de cela, chaque enregistrement était accompagné par l'ouverture, l'écriture dans un fichier texte (d'extension .txt) et la fermeture de cet dernier. L'écriture dans le fichier texte est du format :

1 imgDataBase/face_16-01-2012_12:57:36.bmp

1 imgDataBase/face_16-01-2012_12:57:37.bmp

2 imgDataBase /face_02-02-2012_05:50:14.bmp

2 imgDataBase /face_02-02-2012_05:50:15.bmp

3 imgDataBase /face_02-02-2012_05:50:56.bmp

3 imgDataBase /face_02-02-2012_05:50:57.bmp

Ceci veut dire au programme que toutes les images (figures) ayant le même nombre entier désigne les figures d'une même personne, une fois ce nombre change c'est-à-dire par exemple passe de 1 à 2, les figures deviennent d'une autre personne qui n'est plus la première.

Nous tenons à préciser que nous avions utilisé deux fichiers de type texte : l'un nommé bdd.txt qui stocke les adresses des figures sélectionnées dan la base de données et l'autre nommé test.txt qui stocke les adresses des figures capturées temporairement qui vont subir le teste avant d'être stockées et considérées comme images de la base de données.

· Reconnaissance du visage

Pour parvenir menant à assurer une reconnaissance pour mieux sélectionner les visages à enregistrer une et une seule fois dans la base de données (ne pas enregistrer le visage d'une personne au cas où il est existe déjà dans la base de données), nous avons utilisé une autre fonction nommée apprentissage.

Dans cette fonction, nous avons commencé par charger les visages stockés dans la base de données (bien sûr par ouverture en lecture du fichier contenant les adresses des figures stockées sur le disque dur) à l'aide de la fonction loadFaceImgArray. Cette fonction permet de lire ligne par ligne dans le fichier texte bdd.txt et ainsi compter le nombre de figures chargées, ceci étant possible du fait que chaque tour de lecture d'une ligne équivaut est stocké dans une variable nommée nTrainFaces de type integer (entier). Toutes ces figures chargées sont projetées dans la fonction doPCA.

Cette fonction, n'est que celle qui permet de régénérer d'autres figures appelées ici dans notre programmation eigenface. Ces figures régénérées sont issues de la première figure capturée permettant ainsi d'avoir une multitude de figures peu semblables à la figure d'origine. En confrontant ces différentes figures, nous parvenons à reconnaitre la première figure d'origine.

Cette opération se fait de la manière suivante suivant cet exemple :

(FaceOriginale) + (13.5% de la face régénérée0) - (34.3% de la face régénérée1) + (4.7% de la face régénérée2) + ... + (0.0% de la face régénérée20).

Une fois il a résolu ceci, il peut penser à cette image source de la formation comme les 20 proportions: {13.5, -34.3, 4.7, ..., 0.0}.

Dans cette fonction apprentissage fait aussi appel à une autre fonction nommée storeTrainingData . Quant à cette dernière fonction, elle permet de créer un fichier de stockage d'extension xml. Ce fichier sert à stoker toutes les données que nous avions à utiliser et que nous aurons aussi à utiliser mais qui y sont stockées comme des entiers. Ces données sont : les différentes figures régénérées par la fonction doPCA, les figures originales, le nombre entier qui représente le nombre de visage stockées pour chaque personne, ...

Par la suite, nous avons aussi utilisé une autre fonction nommée reconnaissance. Cette fonction nous a permis aussi de charger les figures contenues dans le fichier test.txt (bien sûr avec la fonction loadFaceImgArray) pour enfin comparer la ressemblance entre les figures déjà stockées dans la base de données et les figures vouées au teste avant d'être considéré comme figures de la base de données existante. Cette fonction nous a permis aussi de calculer le pourcentage de rapprochement entre les visages.

Il faut aussi signaler qu'une autre fonction nommée loadTrainingData a été utilisée pour charger les données (visages et autres) stockées dans le fichier xml et ainsi faire la comparaison avec ceux qui vont subir le teste.

Il convient aussi de signaler que c'est dans la fonction findNearestNeighbor qu'a été calculée la distance de Mahalanobis pour effectuer une mesure de distance (divergence) entre toutes les figures (visages) détectée (cfr. Annexe A.2).

Nous avons estimé ce taux de divergence en terme de pourcentage et avons considéré 10,00% comme seuil. Ceci veut signifier que, chaque fois que la comparaison de distance entre deux visages est au-delà de ce 10,00% (c'est-à-dire 10,01% et plus), les deux visages sont différents et par conséquent le visage détecté est enregistré dans la base de données. Ainsi la condition remplie, une capture de trois images était possible.

Dans le cas contraire (c'est-à-dire entre 0,00% et 10,00%), le visage détecté existe déjà dans la base de données et par conséquent il n'est pas enregistré.

CONCLUSION

Dans ce mémoire, nous avons traité de l'identification des personnes par reconnaissance de visage pour la sécurité d'une institution bancaire.

Comme nous l'avons vu, nous avions comme problématique le control des `'personnes étrangers'' (clients) visitant une institution bancaire par jour, par semaine, par mois,... du faite que leurs visites peuvent conduire au braquage, escroquerie et espionnage. S'ils ne sont pas reconnus, aucun suivi ne pourra être fait pour arriver à les arrêter.

Notre hypothèse avait stipulé que, la mise en place d'un système de contrôle par caméras de surveillance et ces dernières assistées par une application de détection et reconnaissance faciale (des visages) afin que les figures capturées puissent subir de suivi, serait un moyen efficace pour contrer ces actes d'espionnage, d'escroquerie et de braquage.

Nous avons commencé par présenter les outils à utiliser pour nous aider à arriver à nos fins dans le premier chapitre dont la bibliothèque d'OpenCV ; ensuite nous avons montré en quoi consiste la reconnaissance faciale (du visage) en théorie et comment fonctionne-t-elle dans le chapitre deuxième.

Dans le troisième chapitre, nous avons mis en place une application de reconnaissance faciale pouvant nous aider dans la sécurité par caméra de surveillance pour les institutions bancaires de la ville de Bukavu.

D'après nos résultats, nous avons utilisé la méthode comparative pour comparer les visages déjà capturés et ceux se présentant devant la caméra. Pour arriver à faire cette comparaison, nous avons fait usage de la distance de Mahalanobis et grâce à cette dernière, nous établissions la distance de divergence existant entre deux visages.

D'après nos expériences et testes, nous confirmons que cette application de reconnaissance faciale est à la hauteur de la sécurité par caméra de surveillance pour les institutions bancaires de la ville de Bukavu tout en considérant le seuil de confiance de 0,10 soit 10,00%. C'est-à-dire l'enregistrement du visage est conditionné par une distance de divergence supérieure à 10,00%.

Nous confirmons encore notre hypothèse en disant que, la reconnaissance du visage contribue de manière efficace à la sécurité des institutions bancaires de la ville de Bukavu du faite que les visages détectés automatiquement portent comme nom, la date et l'heure de la détection.

Ceci pourra contribuer au suivi de visages capturés tout en étant sûr de la date et de l'heure que les institutions bancaires de la ville de Bukavu ont connu des événements d'escroquerie, d'espionnage et de braquages.

Néanmoins, nous suggérons une bonne position devant la caméra pour une bonne détection de visage mais aussi l'environnement bien éclairé (si pas ceci, faire usage de cameras infrarouges) pour que cette distance de divergence ne soit pas influencée par ces deux facteurs.

Le résultat offert par l'application que nous avons réalisée confirme bien notre hypothèse.

Toutes fois, un vaste champ de recherche reste ouvert aux futurs chercheurs, qui voudraient faire le suivi des visages capturés mais aussi l'amélioration les conditions de capture de visage en utilisant les outils que nous offre la bibliothèque d'OpenCV.

Tout travail humain étant sujet à des imperfections, nous disons bienvenues aux suggestions et remarques d'autres chercheurs qui pourront élargir de plus les frontières de la science.

BIBLIOGRAPHIE

A. Ouvrages

BRADSKI G. et KAEBLER A.; Learning OpenCV ; O'Reilly Media; 2008;

B. Thèses et mémoires

· Souhila GUERFI ABABSA ; Authentification d'individus par reconnaissance de caractéristiques biométriques liées aux visages 2D/3D ; Thèse; UNIVERSITE EVRY VAL D'ESSONNE; Ile-de-France; 2008.

· Walid HIZEM ; Capteur Intelligent pour la Reconnaissance du visage ; UNIVERSITE PIERRE ET MARIE CURIE - PARIS 6 ; Thèse ; Paris ; 2009.

· Nicolas MORIZET ; Reconnaissance Biométrique par Fusion Multimodale du Visage et de l'Iris ; Ecole Nationale Supérieure des Télécommunications ; Paris ; 2009.

C. Netographie

- http://www.faceRecognition.html/ valide le 11/10/2011

- http://www.face-rec.org/ valide le 16/08/2011

- http://opencv.willowgarage.com/ valide 10/10/2011

- http://www.siteduzero.com/ valide le 20/07/2011

- http://www.cppfrance.com/ valide le 5/09/2011

TABLE DES MATIERES

PRELUDE.................................................................................................I

IN MEMORIAM.........................................................................................II

DEDICACE.............................................................................................III

REMERCIEMENTS..................................................................................IV

SIGLES ET ABREVIATIONS.....................................................................VI

0. INTRODUCTION 1

0.1 Problématique 1

0.2 Hypothèse 2

0.3 Choix et intérêt du sujet 3

0.4 Délimitation du sujet 3

0.5 Méthodologie 4

0.6 Etat de la question 4

0.7 Difficultés rencontrées 6

0.8 Plan sommaire du travail 6

CHAPITRE PREMIER : GENERALITES SUR OPENCV 7

1.1 Histoire 7

1.2 Fonctionnalités 8

a) Traitement d'images 8

b) Traitement vidéos 8

c) Algorithmes d'apprentissage 9

d) Calculs Matriciels 9

1.3 Structure de la librairie OpenCV 10

1.4 Installation d'OpenCV 12

1.4.1 Sous Windows 12

a) OpenCV 1.0 sous Visual Studio 6 12

b) OpenCV1.0 sous Dev-C++ 4.9.9.x (installé en langue anglaise) 15

1.4.2 Sous Linux 16

CHAPITRE DEUXIEME: RECONNAISSANCE DU VISAGE 19

2.1 DETECTION DE VISAGE 19

2.1.1 Applications 20

2.1.2 Méthode de détection de visage 21

2.1.2.1 Historique 21

2.1.2.2 Éléments de la méthode 22

a) Caractéristiques 23

b) Calcul 24

c) Sélection de caractéristiques par boosting 25

d) Cascade de classifieurs 27

2.1.3 Étapes clés de la méthode 29

a) Apprentissage 29

b) Détection 29

2.1.4 Limitations et extensions de la méthode 30

2.2 LA RECONNAISSANCE DU VISAGE 32

2.2.1 Méthodes globales 35

2.2.2 Méthodes locales 39

2.2.3 Méthodes hybrides 40

CHAPITRE TROISIEME : MISE EN PLACE D'UNE APPLICATION D'IDENTIFICATION DE PERSONNES PAR RECONNAISSANCE DE VISAGE POUR LA SECURITE D'UNE INSTITUTION BANCAIRE 42

3.1 ENVIRONNEMENT UTILISE 42

3.2 PROGRAMMATION 42

CONCLUSION 50

BIBLIOGRAPHIE 52

TABLE DES MATIERES 53

Annexes...............................................................................................................................................................55

* 1 http://sourceforge.net/projects/opencvlibrary/files/ , valide le 10/06/2011 a 15h20

* 2 http://fr.wikipedia.org/wiki/Méthode_de_Viola_et_Jones, valide le 10/10/2011

* 3R. Hietmeyer, «Biometric identification promises fast and secure processing of airline passengers». The International Civil Aviation Organization Journal, Vol. 17, No. 9, pp. 10-11, 2000.

* 4 «Machine Readable Travel Documents (MRTD)». 2008. http://www2.icao.int/en/mrtd/Pages/default.aspx. valide le 12/07/2011

* 5 Y. Hori, M. Kusaka, et T. Kuroda. «A 0.79mm2 29mW Real-Time Face Detection Core». Symposium on VLSI Circuits Digest of Technical Papers, pp. 188-189, June 2006.

* 6 D. Bolme, J. Beveridge, M. Teixeira, et B. Draper. «The CSU Face Identification Evaluation System : Its Purpose, Features, and Structure». In : Proceedings of the 3rd International Conference on Computer Vision Systems (ICVS), pp. 304-313, 2003.

* 7 T. Kanade. «Computer Recognition of Human Faces». Interdisciplinary Systems Research, Vol. 47, 1977.

* 8 S. Lin, S. Kung, and L. Lin. «Face Recognition/Detection by Probabilistic Decision-Based Neural-Network». Transactions on Neural Networks, Vol. 8, No. 1, pp. 114-132, Janvier 1997.

* 9 A. Nefian and M. Hayes. «Face Detection and Recognition Using Hidden Markov Models». In : International Conference on Image Processing (ICIP), pp. 141-145, 1998.

* 10L. Sirovich et M. Kirby. «Low-dimensional procedure for the characterization of human faces». Journal of Optical Society of America, Vol. 4, No. 3, pp. 519-524, 1987.

* 11 M. Turk et A. Pentland, «Eigenfaces for recognition». Journal of Cognitive Neuroscience, Vol. 3, No. 1, pp. 71-86, 1991.

* 12 G. Brown, S. Yamada, and T. Sejnowski. «Independent Component Analysis at the Neural Cocktail Party». Trends in Neuroscience, Vol. 24, pp. 54-63, 2001.

* 13 B. Schölkopf, A. Smola, and K.-R. Müller. «Nonlinear component analysis as a kernel eigenvalue problem». Neuralomputation, Vol. 10, No. 5, pp. 1299- 1319, 1998.

* 14 S. Mika, G. Ratsch, J.Weston, B. Schölkopf, and K.-R. Müller. «Fisher Discriminant Analysis With Kernels». In : Neural Networks for Signal Processing IX,v pp. 41-48, 1999.






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Entre deux mots il faut choisir le moindre"   Paul Valery