Séance pédagogique sur la reconnaissance faciale à l'aide d'un script Python (David Fialaire _ Aout 2019)
Téléchargements : 
ATTENTION : Mes scripts ont été réalisés en Python dans l’environnement Anaconda
Anaconda, c’est du Python avec des bibliothèques plus poussées pour permettre des traitements (traitements de données par exemple) plus lourd. 
Par ailleurs l’IDLE de Python dans Anaconda se nomme Spider, et il est génial car il possède un explorateur de variables ce qui est INDISPENSABLE pour faire des activités sur le thème « Données » de l’enseignement SNT. 
Télécharger et installer Anaconda n’est pas compliqué du tout !  
Il suffit d’aller à cette adresse : https://www.anaconda.com/distribution/ 
Normalement, le téléchargement dure environ 1h et vous récupérez un fichier en .exe 
Ensuite, vous double cliquez sur ce fichier en .exe pour l’installer. 
ATTENTION : je vous conseille de l’installer en mode administrateur, ce qui vous permettra par la suite d’utiliser la console Python (dans l’IDLE Spider !!) pour installer d’autres sous- bibliothèque. 
Pour ma part, j’ai mis ce fichier .exe sur une clé USB pour pouvoir le coller sur les ordis des élèves de 2nd : ça prends 15 secondes à coller, puis 20 minutes en classe entière d’installation tous en même temps pendant qu’on fait autre chose… 
Téléchargement de Py_Face : 
Une fois dans la console de Spider, vous devrez installer un module complémentaire : il faudra écrire dans la console : pip install opencv-python 
Opencv est indispensable pour utiliser cv2 nécessaire à la lecture des images dans une matrice numérique. 
Par ailleurs, il est intéressant, au cours de ce travail d’algorithme de visualiser les photos dans la console pendant que l’algorithme travaille : Pour ce faire, une bibliothèque particulière est utilisée : (ligne 504 : from IPython.display import Image, display) : Normalement, anaconda possède ce qu’il faut, sinon il faudra l’installer (pip install ipython). 

I Résumé : 

Bonjour à tous, 
Ce thème de SNT 'Photographie numérique' est passionnant, et notamment en ce qui concerne les algorithmes de transformation d'images.
Pour autant la reconnaissance faciale reste assez confidentielle comme technique, et c'est pourquoi il était intéressant de créer cet algorithme que j'ai nommé Py_Face pour ensuite l'expliquer aux élèves.
Assurément, c'est d'un niveau Amateur, mais il fonctionne à 82% sur 16 photos.
Les principes algorithmiques employés ici sont faiblement équivalents à ceux utilisés par les grands groupes numériques ; Malgré tout, c'est l'occasion de découvrir de nombreuses notions attendues dans ce programme de SNT.

A+ 
David Fialaire, Lycée Libergier, Reims, France.
 

II. Etude d’un algorithme de reconnaissance faciale en Python :  

A. Installation de l’algorithme PyFace sur votre ordinateur : (3min) 

• Créez un dossier nommé ‘ PyFace’ ; 
• Ce dossier contient (doit contenir) : les dossiers ‘Base_de_Donnees’ ; ‘Portraits_a_analyser’ ; ‘Travail_Brouillon’; et ‘Rangement_Portraits’. Le dossier ‘ PyFace’ contient aussi 3 images (à télécharger) : Logo2, 3 et 4 ; et enfin le script Python ‘PyFace.py’:

 Les 3 premiers dossiers, pour l’instant, ne contiennent rien. 
 Seul le dossier ‘Rangement_Portraits’ devra contenir les photos fonctionnelles (16 à télécharger). 
• Déposez ce dossier ‘PyFace’ dans votre dossier ‘SNT’. 

Ca y est ! Py_Face est correctement installé avec ses bons dossiers voisins : Dès que vous le mettez en route, il s'interroge lui même sur son adresse absolue (=variable Lieu) et utilise cette adresse en relativisant les dossiers voisins : donc vous n'avez aucune adresse de dossier à spécifier.

III. Préambules pour une utilisation correcte de Py-Face : 

1) Les photos que l’algorithme doit analyser doivent être placées dans le dossier ‘Portraits_a_analyser’ ; Le dossier ‘ Rangement_Portraits ‘ ne sert qu’à vous, pour ranger les « bonnes » photos quand vous ne souhaitez pas les analyser. 

2) Les 16 photos préalablement installées dans votre dossier ‘ Rangement_Portraits ‘ ont été longuement sélectionnées pour valoriser la réussite de l’algorithme (82%), et sont celles qui sont utilisées pour la séquence pédagogique qui suit : Donc, dans un premier temps, ne surtout pas égarer ces 16 photos. 

3) Lorsque l’algorithme travaille, il enregistre des transformations sur les photos étudiées : ces enregistrements se réaliseront dans le dossier ‘Travail_Brouillon’ :  
                 a. Tant que l’algorithme travaille, ne modifiez pas ce dossier ‘Travail_Brouillon’ ; 
                 b. Par contre, il serait judicieux de vider couramment tout son contenu à la poubelle à chaque fois que vous avez fini de travailler avec l’algorithme (pour des raisons de mémoire). 

4) Le contenu du dossier ‘ Base_de_Donnee ‘ est constitué de multiples assemblages de photos en travaux qui servent à la base de données pour présenter des résultats, ainsi qu’un fichier nommé ‘Baz_Analyz_Photos.pickle’ qui sert de support à l’écriture des informations de cette base de données : 
              a. Réfléchissez à deux fois avant de vider ce dossier (à faire uniquement si vous voulez tester d’autres photos sans les précédentes)
 
5) Py_Face n’est pas un algorithme de reconnaissance faciale professionnel ; Il n’utilise qu’une seule des multiples stratégies numériques employées par les professionnels : les projections horizontales et verticales (voir plus loin). 

IV. Visite rapide de Py-Face : Niveau utilisateur

A. Lançons l’analyse d’une photographie de la base de données :
• Commencez par faire le ménage et l’installation des photos : 
 Videz le dossier ‘Travail_Brouillon’ 
 Déplacez les 16 photos de ‘Rangement_Photos’ vers ‘Photos_a_analyser’ ; 

• Dans Spider, une fois l’algorithme ouvert et enregistré, 
• Assurez vous d’avoir un curseur clignotant dans la partie ‘Console’ de Spider, à droite de votre écran ; 
• Appuyez sur la touche ‘F5’ (de votre clavier) (ou appuyez sur le triangle vert) :

Le programme démarre alors dans la partie droite de l’écran (console)
 
Problème : Cette partie d’écran est trop petite… 

==> Vous pouvez l’agrandir en appuyant sur l’icône en forme de volet basculant dans le menu haut de Spider.
  
Attention, assurez-vous d’avoir un curseur clignotant dans la console pour y écrire, sinon vous allez écrire n’importe où dans le script… !!! 

• Dans le menu Py_Face, choisir : 1 : (Analyser une nouvelle photo) ; 

 Vérifiez votre dossier ‘Photo_a_analyser’, puis appuyez sur Entrée ;
 
 L’algorithme vous liste toutes les photos présentes dans le dossier ‘Photos_a_analyser’ ; 

 Il attend que vous lui donniez un numéro de photo, tapez 1 (entrée) ; 

• Cela va prendre maximum 1 minute de travail à l’algorithme pour analyser la photo : cela dépend de votre ordinateur .. Ne Touchez à Rien 
 Pendant qu’il travaille, vous observerez 2 choses : 
- Le ventilateur de votre ordi va grandement s’activer (signe de nombreux calculs _ tout va bien) ; 
- La barre de défilement verticale (à droite) glisse vers le haut, car des choses s’accumulent en bas de votre écran. 

 Quand il a fini, il revient au menu principal. 
Pour visualiser son travail, vous pouvez taper 3 : (Visualiser – gérer la base de données) : 
• Vous accédez alors au menu ‘Base de données’ 
 Tapez 1, pour voir le travail réalisé : 


• Ce que vous observez sont les projections horizontales et verticales des moyennes de valeurs de gris de la photo analysée (Nous verrons plus tard les explications techniques .. Profitons de la visite.) ; 

 Sachez que l’algorithme de Comparaison utilisera uniquement la 4ème petite photo sur ces deux assemblages : 

 Tapez Entrée, pour revenir au menu de Base de Donnée. 

• Allons donc regarder dans le dossier ‘ Base_de_Donnee’ :  

Vous observez 3 éléments : les 2 assemblages de photos, et le fichier d’enregistrement ###.pickle ; 

 Nous allons exceptionnellement vider cette base de données simpliste (1 seule photo) pour en construire une plus grande (16 photos) :  

==>Dans le dossier ‘ Base_de_Donnee’, faîtes Ctrl A, puis appuyez sur la touche Suppr de votre clavier. 
 Revenez dans Spider, au menu ‘ Base_de_Donnee’ ; Faîtes 1 pour voir le contenu de la Base de données : il nous dit que la base est vide : Normal. 
 Revenir au menu de Py_Face : Entrée, puis 0, puis Entrée. 

• Nous allons, à présent, lancer l’analyse des 16 photos : Tapez 2 (Analyser une série de photos..), puis Entrée, puis Entrée ; 

 Vous entendez… ? L’algorithme travaille et votre ventilo s’allume ! 
 Cela va prendre 2 à 4 minutes pour analyser les 16 photos : Ne Touchez à Rien  
• De temps à autre, vous pouvez appuyer sur la touche ‘Curseur vers la droite’ de votre clavier pour visualiser où il en est… 

 Quand vous entendez le ventilo se calmer, c’est que l’algorithme a fini de travailler, et il vous présente le menu Py_Face. 

 Vous pouvez, si vous le souhaitez, aller dans le menu de base de données (tapez 3, Entrée), et demander à visualiser la base de données (tapez 1, Entrée) : 

Comme vous pouvez le constater, il y a : 
- Des photos qui correspondent à la même personne ; 
- Des photos qui correspondent à des personnes différentes ayant des caractéristiques similaires de visage ; 
- Des photos ‘dessins de visage’. 
***************************************************************************************** 

• Parlons immédiatement de problèmes légaux et éthiques : 

Problème 1 :  
* Ces personnes sur ces photos ont-elles donné leur autorisation pour que nous utilisions leur image pour comprendre un algorithme de reconnaissance faciale ? 
 Non. 
* Est-il nécessaire d’avoir de multiples photos de personnes pour comprendre un algorithme de reconnaissance faciale ? 
 Oui. 
* Est-il nécessaire d’avoir de multiples photos d’une même personne prise sous différents angles pour comprendre un algorithme de reconnaissance faciale ? 
 Oui. 
* Dès lors, l’utilisation de photos de qualité de mannequins s’exposant beaucoup sur Internet permet-elle de correctement alimenter la base de données ? 
 Assurément. 
* Dans quelle mesure cette séance pédagogique peut-elle restée légale ? 
 Aucune image initiale ou transformée ne devra être utilisée de façon malhonnête (commerciale, injurieuse...) 

 Problème 2 :  
* Dans quelle mesure cette phrase (et sa pratique) : « Des photos qui correspondent à des personnes différentes ayant des caractéristiques similaires de visage » peut être considéré comme non immorale, et non raciste ? 
 Rappelons qu’un algorithme n’est qu’une liste de codes qui réalisent des calculs sans aucune compréhension de sens. 
 L’algorithme ne manipule que des chiffres sans RIEN comprendre aux visages. 
* Dans quelle mesure l’utilisateur de l’algorithme qui sélectionne des visages qui se ressemblent ne réalise-t-il pas un acte raciste ? 
 Trouver des ressemblances entre personnes n’est pas un acte raciste. 
 Il est important de ne pas utiliser ces ressemblances dans un but malhonnête (dénigrement d’emploi au faciès, nettoyage ethnique…) 

 Conclusion : 
Albert Einstein (1879-1955) a dit : « Le progrès technique est comme une hache qu'on aurait mise dans les mains d'un psychopathe ». 
Aristote (philosophe grec, 384-322 av. J.-C) a dit : « Le progrès ne vaut que s'il est partagé par tous ». 
***************************************************************************************** 
• Revenez au menu Py_Face ; 
• Nous allons à présent demander à l’algorithme de comparer Une photo avec toutes celles de la base de données ; 

 Tapez 4, puis Entrée ; 
 L’algorithme vous donne la liste des éléments de sa base de données, et vous devez choisir dans cette liste, quelle photo vous voulez comparer à toutes les autres. 

• Nous allons choisir la photo ‘MK1’ : tapez 8, puis Entrée ; 

 Il nous présente l’analyse graphique de ‘MK1’, et nous propose de lancer la recherche dans la base de données : Tapez Entrée. 

 Qu’obtenez-vous ? :  

 
• Il nous demande si on veut voir d’autres résultats ayant un % plus faible : tapez o pour oui, puis Entrée ; 

 Vous remarquerez alors que cette nouvelle image ‘NC5’ (puis ‘TP7’, puis ‘NC2’) ne correspond pas du tout à la même personne, ce qui veut dire : 
- Soit que l’algorithme est assez bon pour reconnaître du 1er coup la même personne, mais pas assez bon pour reconnaître toutes les photos de cette même personne… 
 
- Soit qu’il est aussi vrai que des personnes qui nous paraissent différentes partagent tout de même certaines caractéristiques de visage identiques ! 

 Faîtes Entrée, puis Entrée pour revenir au menu Py_Face. 

• Faîtes un autre essai (4, Entrée) avec ‘TP5’ (13, Entrée), puis ‘o’, Entrée : 4-5 fois pour voir toutes les ressemblances détectées : 

• Qu’observez-vous au début ? :  

B. Lançons l’analyse d’une photographie modifiée de la base de données : 

1) Modification d’une image de la base de données : 
 
==> On pourrait se dire que l’algorithme triche de plusieurs manières : 
 
- Peut être qu’il compare les titres des photos et que s’ils sont identiques, il dit que les photos se ressemblent ; 
- Peut être que l’algorithme compare les métadonnées des photos et qu’il assemble celles qui ont à peu près les mêmes métadonnées ! 
 
 Pour tester si l’algorithme triche, nous allons faire 3 choses : 
- Nous allons faire une capture écran d’une des photos de la base de données, puis la recadrer : dès lors les métadonnées auront disparues. 
- Nous allons donner un autre nom à cette nouvelle photo. 
- Nous allons modifier cette photo en rajoutant un gros bouton à ce visage. 
 
• Ouvrir le dossier ‘Portraits_a_analyser’ ; 
 Double-cliquez sur la photo MK1 : 
La photo s’ouvre dans votre application de visionnage de photos ; 
• Appuyez, 1 fois, sur la touche ‘ Impécr Syst ‘ de votre clavier pour faire une capture d’écran ; 
 
• Ouvrir Paint (Tapez Paint dans votre barre de recherche de Windows) ; 

Cliquez (en haut à gauche) sur ‘Coller’ (1) : 
 Puis cliquez sur le rectangle en pointillé (2) pour sélectionner ; 
 Avec votre curseur Réticule, encadrez parfaitement la photo sans récupérer de bordure blanche ; 
 Puis cliquez sur ‘Rogner’ en 3 : c’est quasiment la même photo que MK1 sauf qu’elle n’a pas du tout les mêmes métadonnées ! 

 Cliquez alors sur l’icône du pinceau, choisissez la couleur marron foncé, choisissez la taille la plus grande de pinceau, et.. 
• …Réalisez 1 gros bouton (1 seul clic) sous la pupille à hauteur des narines comme dans l’exemple ci-dessous : 

 Il ne nous reste plus qu’à sauvegarder cette photo : Cliquez sur Fichier --> Enregistrer sous ; 
 Retrouvez le dossier ‘Portraits_à_analyser’, donnez un prénom de votre choix à cette nouvelle photo, et sauvegardez-là en .jpg (JPEG)…
 
• … Ainsi, cette photo a un titre différent, des métadonnées différentes, et est, un poil (plutôt un bouton), différente de la photo originale… L’algorithme va-t-il la reconnaître ? 
 
• De retour dans le menu Py_Face, tapez 1, Entrée (Analyse d’une image) ;  
 Puis, Entrée, après avoir vérifié que votre nouvelle image est bien dans le dossier ‘Portraits_à_analyser’ ; 
 Il vous donne alors la liste des images, repérez le N° de celle que vous venez de sauvegarder et tapez-le, puis Entrée ; 

• Il vous affiche alors la photo analysée du visage avec le bouton, puis il revient au menu Py_Face ; 

 Nous allons à présent comparer cette photo avec toutes les autres de la base de données : Tapez 4, Entrée ; 

 Tapez le N° correspondant à votre nouvelle photo, puis Entrée, puis Entrée … Suspense !... : 

 Bingo ! 
La 1ère photo reconnue est bien la photo originale de la base de données qui nous a servi à faire la nouvelle photo ! 
Pour rappel : ni le titre, ni les métadonnées ne sont identiques. 
 
-Quel est le % de reconnaissance ? : 

-Qu’observez-vous au niveau du bouton rajouté ? : 


Qu’en pensez-vous ? Est-ce que l’algorithme triche ? :  

 Maintenant que nous sommes rassurés sur les faibles compétences Réelles de cet algorithme, nous allons étudier comment il fonctionne : 


V. Etude technique de Py-Face : 
 
A. Construction des lignes caractéristiques horizontales et verticales du visage : 1ère partie 
 
 La stratégie numérique employée est totalement d’un niveau Amateur, pour autant, elle s’inspire d’une stratégie d’un niveau professionnel :  
 
Dans le PDF dont voici le lien :

se trouve la phrase suivante : 
 
« …les caractéristiques du visage sont localisées à l’aide de la méthode de projection proposée par Kanade[Kan73] pour détecter les contours d’un visage. Soit I(x,y) l’intensité de la luminance du pixel (x,y) de l’image m x n, les projections horizontale et verticale de cette image sont définies par… » 

 Voici l’explication de la stratégie de projection des intensités de luminescence : 

• Figure 1 : La lettre M est constituée de pixel noir et de pixel blanc. 
 
• Figure 2 : chaque emplacement de pixel (coordonnées x et y) est caractérisé par une valeur de nuance de gris allant de 0 pour la couleur noire à 255 pour le blanc. Classiquement, notre cerveau peut déceler le ‘M’ dans cette figure 2, et vous ? 
 
• Figure 3 : la technique de projection horizontale (et c’est pareil pour la verticale, mais dans l’autre sens) consiste à réaliser la moyenne des valeurs de nuance de gris pour chaque ligne : 
 1ère ligne de pixel : (11x255)/11 = 255 
 2ème ligne de pixel : [ (9x255)+(2x0) ] / 11 = 208,6 …
 
• Figure 4-5 : l’algorithme crée donc une nouvelle image de la même taille que la précédente, sauf que cette fois ci, on ne retrouve plus du tout le ‘M’, mais plutôt des bandes colorées en nuances de gris correspondants aux moyennes qu’il vient de calculer. 

Voici la partie de l’algorithme qui s’occupe de créer les lignes de projection horizontales : 

En ligne 279 : on crée une nouvelle fonction : def Nouvelle_fonction () : 
C’est comme une adresse : il suffira d’appeler Nouvelle_fonction () pour accéder à ce bloc de code. 
 
En ligne 287 : l’algorithme charge ( imread = image read) la photo et range toutes les valeurs de nuances de gris (le ‘0’ sert à récupérer les nuances de gris même si la photo est en couleur) de chaque pixel dans un tableau, une matrice. 
 
En ligne 292-293 : l’algorithme récupère les tailles (shape) (hauteur et largeur) de l’image. 
 
En ligne 296 : l’algorithme crée une autre matrice vide (zerros) qu’il appelle tab_moyen_horizon qui aura la particularité d’avoir le même nombre de ligne que l’image, mais seulement une seule colonne d’information comme visualisé sur l’illustration précédente en 3. 
 
En ligne 297-298 : l’algorithme va balayer l’image sur toute sa hauteur : x prenant progressivement (selon une boucle) les valeur de 0 jusqu’à la hauteur d’image. 
A chaque valeur de x, il va calculer la moyenne des valeurs de gris de la ligne : 
 Quelle est la commande Python qui permet de calculer cette moyenne sur une ligne x de la matrice ? : 
 

Ligne 308-313 : Comme vu en figure 4-5, il ne reste plus qu’à créer une nouvelle matrice d’image (newImg) de la même taille que la précédente, et de remplir chaque ligne de la moyenne de nuance de gris calculée précédemment à partir de chaque ligne de la photographie. 

En ligne 313, dans la variable ‘tab_moy_horizon[x][0]’ , le 0 correspond en fait à la 1ère et unique colonne du tableau des moyennes… En Python, la 1ère valeur d’une série est toujours le 0 !
 
 Voici le début du code pour produire les lignes verticales : 

Le programmeur a trouvé une astuce pour cette partie du code ; quelle-est-elle ? : 




B. Construction des lignes caractéristiques horizontales et verticales du visage : 2ème partie
 Pour l’instant, l’algorithme a créé une image de dégradé de gris (1ère partie ci-dessus). 
 Comment transforme t’il cette image 1ère partie en cette autre image 2ème partie ? 
 Comparez les zones A et B dans la 1ère puis la 2ème partie et proposez une explication : 











• Retrouvons cette partie de l’algorithme dans le code : 

• Le contraste est réalisé grâce à deux fonctions : tout d’abord ‘contours’ qui de temps à autre fait appel à ‘quantite’ en ligne 98,100,102…; 

Ligne 94 à 97 : on va regarder pour chaque pixel de coordonnées x,y, les valeur RGB du pixel (x,y), mais aussi du pixel voisin (x-1,y-1) … 

Ligne 98 et 88 : pour ces deux triplets de valeurs RGB, on va amplifier leur différence en les mettant au carré : 
 En effet, dans ces deux exemples : (5-3)² = 2² = 4 et (5-1)² = 4² =16 , on voit bien que plus la différence est grande (1 est plus éloigné de 5 que ne l’est 3), plus le carré sera grand. 

 Donc, faire le carré des différences permet d’Amplifier les différences : donc de créer du contraste ! 
 Quels sont les pixels qui sont étudiés de la ligne 96 à 111 ? : 

 Que tente d’évaluer l’algorithme en ligne 113 ? :

 
 Que se passe-t-il dans les cas où 1) le seuil est dépassé, et où 2) le seuil n’est pas dépassé ? :




 Est-ce que la valeur du seuil diffère si l’algorithme réalise une analyse horizontale ou une analyse verticale ? Faîtes Ctrl F dans l’algorithme et recherchez le mot « seuil » : parmi les 6 résultats trouvés, 2 d’entres eux vous donneront la réponse à la question : 




C. Comment fonctionne le comparatif de Py-Face ?
                 1) Notions de cadrage et de positions de lignes : 
 Regardez bien ces 2 images A et B, et leurs lignes caractéristiques horizontales : 

Pour notre cerveau, il est évident que la photo B est la partie basse de la photo A ; 
 Donc, ce qui importe n’est pas la position x des lignes horizontales mais plutôt … : 



 
           2) Notions de distances entres lignes et de Zoom : 
 Observez bien ces deux photos A et B, zoomées différement, ainsi que les distances d1, d2, d3 et D1, D2 et D3 , respectivement égales à 3, 2, 1 et 12, 8, 4. 

Nous avons dit précédemment que si les distances entres les lignes sont égales alors les photos sont identiques ; or, ici, il s’agit bien de la même photo, pourtant on a d1différent de D1, de même pour d2 et D2, et d3 et D3. 

Problème… 
 Proposez une solution mathématique (simple) qui permette à l’algorithme de dire que A = B : 










• Observons tous ces notions dans le code : 

Des lignes 18 à 47 : La fonction ‘Position_lign()’ cherche la position x des lignes horizontales et verticales du visage ; 
 Quelle est la valeur seuil utilisée par cette fonction pour déterminer si oui ou non il y a une ligne noire le long de l’axe qu’elle scanne ? : 

Ensuite, cette fonction enregistre (commande append = apply at the end = rajouter à la fin d’une liste) toutes ces positions de lignes dans une liste nommée list1. 

Des lignes 49 à 60 : La fonction ‘lissage(list1)’ va désépaissir les lignes trop grasses pour constituer une nouvelle liste : la liste …

Des lignes 63 à 81 : La fonction ‘calcul_distance(list4)’ va justement calculer les distances entre chaque position de ligne contenues dans la liste 4. 

 A quelle ligne se trouve le calcul des distances ? :
 
Sachant que lorsqu’on écrit : list [ x ], cela appelle l’élément (ici, une position de ligne) qui se trouve à la position x dans la liste, expliquez le calcul qui est fait en boucle : 




Chaque distance est alors enregistrée dans une list5, et cette dernière est même classée par ordre croissant ligne 71. 

 D’après vous, que contient la variable ‘mini’ ligne 75, dont on a parlé précédement en 2) ? 


 Des lignes 77 à 80, d’après vous, qu’est-ce qui est enregistré dans la list6 ? : 



• Relancez Py_Face : et refaîtes une analyse (1) d’une photo : Ex : ER1. Après la présentation des photos travaillées, vous observerez dessous toutes les notions que nous venons de voir à l’instant : positions des lignes, distances raccourcies par mini.
 
 Retrouvez pourquoi, dans ce cas, mini =3 pour l’analyse horizontale et 4 pour la verticale ? : 



Ligne 451 : on retrouve la list6 (pour l’analyse horizontale) et la list6_vert (pour l’analyse verticale), de même que ‘mini’ et ‘mini_vert’, on retrouve le nom de l’image (= « photo_initiale »).. 
 Dans quoi sont envoyées toutes ces informations ? : 


Dans les lignes 590, 591, 603 et 679 : l’algorithme récupère, à partir de la base de données, les matricules d’identification de la photo étudiée et celui d’un élément de la base de donnée. 

Dans les lignes 628 et 630 : est réalisé la comparaison entre le matricule de la photo étudiée et celui d’un élément de la base de donnée ;  
 Sur quelle base repose se calcul de comparaison ? : l





Pour finir, les lignes 662 et 663 : contiennent le calcul du % de recouvrement (ressemblance) enre 2 photos.
 Sachant que la list7 correspond au croisement des list6 horizontale et verticale ; que la variable ‘Baz_Donnees_Photos_lu[numer-1][3]’ n’est autre que ‘mini’, et que la commande sum est une addition : à quoi correspond ‘somme’ ? : 



 sachant que ‘Baz_Donnees_Photos_lu[numer-1][4]’ est la hauteur totale de l’image, que représente alors le calcul de ‘recouvr’ ? :