Module knn.plusProchesVoisins

Compléter le programme pour qu'il associe à une image de test la valeur (3 ou 7) du plus proche voisin ; le programme doit au final afficher 'cette image est un 7' ou 'cette image est un 3'

Adaptez votre programme pour qu'il associe maintenant à une image de test la valeur majoritaire parmi les 5 plus proches voisins. Attention à ne pas effacer le travail de la question précédente, soit en créant une nouvelle fonction (une pour le plus proche, une pour les 5 plus proches), soit en faisant les modifications dans un nouveau fichier.

Expand source code
#!/usr/bin/python3
#-*- coding: utf8 -*-
"""
**Compléter le programme** pour qu'il associe à une image de test la valeur (3 ou 7) du plus proche
voisin ; le programme doit au final afficher 'cette image est un 7' ou 'cette image est un 3'

**Adaptez votre programme** pour qu'il associe maintenant à une image de test la valeur majoritaire
parmi les 5 plus proches voisins. Attention à ne pas effacer le travail de la question précédente,
soit en créant une nouvelle fonction (une pour le plus proche, une pour les 5 plus proches), soit en
faisant les modifications dans un nouveau fichier.
"""
pass

import sys
import copy

#On fait les imports selon le contexte
if __name__=="__main__":
    from distance import *
else:
    from knn.distance import *

def isDistanceMin(image2test:list,imageMin:list,imagesref:list)->bool:
    """
    Fonction booléenne qui renvoie True si la distance entre image2test et imageMin
    est inférieure ou égale à chaque distance entre image2test et un élément de imagesref

    **Paramètres**

    * image2test est une liste d'entiers dont le premier élément est un '?'
    * imageMin est une liste dont il faut tester si la distance à image2test est minimale
    * imagesref est l'échantillon d'images de référence

    **Préconditions**

    * image2test, imageMin et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

    **Postconditions**

    * la sortie est un booléen

    **Sortie**

    * Un booléen

    """
    pass
    #Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    assert isinstance(imageMin,list),"l'image candidate n'est pas sous forme de liste"
    assert len(image2test[1:])==len(imageMin[1:]),"image2test et imageMin n'ont pas le même nombre de pixels"
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256) or int(imageMin[i]) not in range(256)):
            raise ValueError("L'un des deux premiers paramètres au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    #Préconditions

    # a priori c'est la plus petite distance
    isTrue = True
    i = 0
    while (i<len(imagesref) and isTrue):
        if distance(image2test[1:],imageMin[1:])>distance(image2test[1:],imagesref[i][1:]):
            isTrue = False
        i = i+1

    #Postconditions
    assert isinstance(isTrue,bool),"isTrue n'est pas un booléen"
    #Postconditions

    return isTrue

def plusProcheVoisin(image2test:list,imagesref:list)->list:
    """
    Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester.

    **Paramètres** 
    
    * image2test est une liste d'entiers dont le premier élément est un ?
    * imagesref est une liste de listes dont le premier élément  vaut 3 ou 7 

    **Préconditions** 

    * image2test et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

    **Postconsitions** 
    
    * La sortie est un tableau de deux éléments
    * le premier est une liste dont tous les éléments sont des codes entre 0 et 255
    * le second un entier compris entre 0 et la taille de imagesref    
    * La distance avec image2test est minimale

    **Sorties** 
    Un tableau contenant :

    * le plus proche voisin parmi les images de référence
    * son indice dans imagesref
    """
    pass

    # Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256)):
            raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    # Préconditions

    nbRefs = len(imagesref) # nombre d'images de référence
    ppv = [imagesref[0],0] # on initialise avec la premiere image 
    # On teste toutes les images si on en trouve une plus proche on change ppv
    for i in range(nbRefs):
        if distance(image2test[1:],imagesref[i][1:])<distance(image2test[1:],ppv[0][1:]):
            ppv = [imagesref[i],i]
    
    # Postconditions
    assert len(ppv)==2,"la sortie n'a pas deux éléments"
    assert isinstance(ppv[0],list),"le premier élément de la sortie n'est pas une liste"
    for i in range(1,len(ppv[0])):
        assert (int(ppv[0][i]) in range(256)),"l'un des éléments de la liste de sortie n'est pas un code de gris"
    assert isinstance(ppv[1],int),"le second élément de la sortie n'est pas un entier"
    assert ppv[1] in range(len(imagesref))
    assert isDistanceMin(image2test,ppv[0],imagesref)
    # Postconditions

    return ppv

def affichage3ou7(image:list)->str:
    """
    Fonction qui renvoie une chaine de caractère selon le plus proche voisin

    **Paramètres** 
    
    * image : une liste contenant le plus proche voisin d'une image à tester    

    **Préconditions** 
    
    * image est une liste
    * le premier élément de image vaut 3 ou 7

    **Postconsitions**

    * la sortie est une chaine qui vaur ' est un 3' ou ' est un  7'

    **Sortie** 
    
    * Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7
    """
    pass

    # Préconditions
    assert isinstance(image,list),"image n'est pas une  liste"
    assert (image[0][0] == '3' or image[0][0] == '7'),"image n'est pas une image de l'échantillon de référence"
    for i in range(1,len(image)):
        if (int(image[i]) not in range(256)):
            raise ValueError("L'un des éléments de image au moins n'est pas un code de dégradés de gris")
    # Préconditions
    
    is3ou7 = ' est un '+image[0][0]

    # Postconditions
    assert (is3ou7 == " est un 3" or is3ou7 == " est un 7"),"l'écart n'est pas un entier"
    # Postconditions

    return is3ou7    

def cinqPlusProchesVoisins(image2test:list,imagesref:list)->list:
    """
    Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester.

    **Paramètres** 
    
    * image2test une liste d'entiers sauf le premier élément qui est '?'
    * imagesref une liste de listes dont le premier élément  est '3' ou '7' 

    **Préconditions** 

    * image2test et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément    

    **Postconsitions**

    * La sortie est un tableau de cinq éléments
    * chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255

    **Sorties** 
    Un tableau de tableaux contenant :
    
    * les 5 plus proches voisins parmi les images de référence
    * leurs indices dans imagesref
    """
    pass

    # Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256)):
            raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    # Préconditions
    
    references = copy.deepcopy(imagesref)    
    i=0
    five_ppv = []    
    while i<5:        
        five_ppv.append(plusProcheVoisin(image2test,references))
        references.pop(five_ppv[i][1])        
        i +=1
    
    # Postconditions
    assert len(five_ppv) == 5,"la sortie ne contient pas 5 éléments"
    for i in range(len(five_ppv)):
        for j in range(1,len(five_ppv[i])):
            if (int(five_ppv[i][j]) not in range(256)):
                raise ValueError("L'un des éléments des cinq plus proches voisins au moins n'est pas un code de dégradés de gris")
    # Postconditions

    return five_ppv

def plusDe3ou7(five_ppv_image2test:list)->str:
    """
    Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester

    **Paramètres** 
    
    * five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester 
    
    **Préconditions** 
    
    * five_ppv_image2test est une liste de 5 listes
    * chacune des listes est une liste de codes de gris
    * le premier éléments de chaque liste est un 3 ou un 7

    **Postconsitions**
    
    * la sortie est une chaine qui vaur ' est un 3' ou ' est un  7'


    **Sortie**
    
    * Une chaine de caracteres
    """
    pass

    # Préconditions
    assert len(five_ppv_image2test) == 5,"la liste en entrée ne contient pas 5 éléments"
    for i in range(len(five_ppv_image2test)):
        assert (five_ppv_image2test[i][0][0] == '3' or five_ppv_image2test[i][0][0] == '7'),"le premier élément de la liste "+str(i+1)+" n'est pas un 3 ou  un 7"
        for j in range(1,len(five_ppv_image2test[i])):
            if (int(five_ppv_image2test[i][j]) not in range(256)):
                raise ValueError("L'un des éléments des cinq éléments de l'entrée au moins n'est pas un code de dégradés de gris")
    # Préconditions
    
    nb_3 = 0
    nb_7 = 0
    maxDe3ou7 = ' est un '
    for i in range(len(five_ppv_image2test)):        
        if five_ppv_image2test[i][0][0]=='3':
            nb_3 +=1
        if five_ppv_image2test[i][0][0]=='7':
            nb_7 +=1            
    if (nb_3>nb_7):
        maxDe3ou7 +='3'
    else:
        maxDe3ou7 +='7'
          
    # Postconditions
    assert (maxDe3ou7 == " est un 3" or maxDe3ou7 == " est un 7"),"l'écart n'est pas un entier"
    # Postconditions

    return maxDe3ou7

if __name__=="__main__":

    # On récupère les images de référence
    train = open("ressources/training","r")
    l = train.readlines()
    listetraining = [ligne.split() for ligne in l] 

    # Test isDistanceMin()
    # Une image du lot à tester
    img2test = ['3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '43', '105', '255', '253', '253', '253', '253', '253', '174', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '43', '139', '224', '226', '252', '253', '252', '252', '252', '252', '252', '252', '158', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '252', '252', '252', '252', '253', '252', '252', '252', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '230', '132', '133', '132', '132', '189', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '29', '29', '24', '0', '0', '0', '0', '14', '226', '252', '252', '172', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '243', '252', '252', '144', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '88', '189', '252', '252', '252', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '212', '247', '252', '252', '252', '204', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '125', '193', '193', '193', '253', '252', '252', '252', '238', '102', '28', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '222', '252', '252', '252', '252', '253', '252', '252', '252', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '223', '253', '253', '253', '253', '255', '253', '253', '253', '253', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '123', '52', '44', '44', '44', '44', '143', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '15', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '86', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '75', '9', '0', '0', '0', '0', '0', '0', '98', '242', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '183', '252', '29', '0', '0', '0', '0', '18', '92', '239', '252', '252', '243', '65', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '147', '134', '134', '134', '134', '203', '253', '252', '252', '188', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '252', '252', '252', '252', '252', '252', '253', '230', '153', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '49', '157', '252', '252', '252', '252', '252', '217', '207', '146', '45', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '103', '235', '252', '172', '103', '24', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'] 
    # La même image légèrement modifiée
    img2testModif = ['3', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '43', '105', '255', '253', '253', '253', '253', '253', '174', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '43', '139', '224', '226', '252', '253', '252', '252', '252', '252', '252', '252', '158', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '252', '252', '252', '252', '253', '252', '252', '252', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '230', '132', '133', '132', '132', '189', '252', '252', '252', '252', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '4', '29', '29', '24', '0', '0', '0', '0', '14', '226', '252', '252', '172', '7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '243', '252', '252', '144', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '88', '189', '252', '252', '252', '14', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '212', '247', '252', '252', '252', '204', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '125', '193', '193', '193', '253', '252', '252', '252', '238', '102', '28', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '222', '252', '252', '252', '252', '253', '252', '252', '252', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '45', '223', '253', '253', '253', '253', '255', '253', '253', '253', '253', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '123', '52', '44', '44', '44', '44', '143', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '15', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '86', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '75', '9', '0', '0', '0', '0', '0', '0', '98', '242', '252', '252', '74', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '183', '252', '29', '0', '0', '0', '0', '18', '92', '239', '252', '252', '243', '65', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '147', '134', '134', '134', '134', '203', '253', '252', '252', '188', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '208', '252', '252', '252', '252', '252', '252', '252', '252', '253', '230', '153', '8', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '49', '157', '252', '252', '252', '252', '252', '217', '207', '146', '45', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '103', '235', '252', '172', '103', '24', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']     
    # un test qui doit retourner True
    assert(isDistanceMin(img2test,img2test,listetraining) == True)
    # un test qui doit retourner False
    assert(isDistanceMin(img2test,img2testModif,listetraining) == False)

    # Test plusProcheVoisin()
    #  Une image du lot à tester
    img_2_test = ['?', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '84', '185', '159', '151', '60', '36', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '222', '254', '254', '254', '254', '241', '198', '198', '198', '198', '198', '198', '198', '198', '170', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '67', '114', '72', '114', '163', '227', '254', '225', '254', '254', '254', '250', '229', '254', '254', '140', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '17', '66', '14', '67', '67', '67', '59', '21', '236', '254', '106', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '83', '253', '209', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '233', '255', '83', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '129', '254', '238', '44', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '59', '249', '254', '62', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '254', '187', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '9', '205', '248', '58', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '126', '254', '182', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '75', '251', '240', '57', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '19', '221', '254', '166', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '203', '254', '219', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '254', '77', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '224', '254', '115', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '254', '254', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '242', '254', '254', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '121', '254', '254', '219', '40', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '121', '254', '207', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
    # Son plus proche voisin
    img_2_test_ppv = ['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '46', '179', '254', '186', '104', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '87', '244', '254', '253', '253', '253', '253', '193', '118', '118', '118', '192', '155', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '234', '253', '235', '137', '174', '186', '253', '254', '253', '253', '253', '253', '254', '135', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '219', '253', '142', '0', '0', '3', '57', '214', '247', '253', '253', '253', '244', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '58', '23', '0', '0', '0', '0', '0', '49', '193', '253', '253', '195', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '58', '224', '254', '231', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '214', '253', '253', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '41', '241', '253', '237', '66', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '201', '253', '253', '164', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '253', '253', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '231', '255', '254', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '253', '254', '228', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '217', '253', '254', '68', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '130', '253', '253', '169', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '235', '253', '253', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '254', '254', '193', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '232', '253', '234', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '183', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '96', '238', '154', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
    # Ses 5 plus proches voisins dans un tableau
    img_2_test_five_ppv = [
        [['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '46', '179', '254', '186', '104', '59', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '87', '244', '254', '253', '253', '253', '253', '193', '118', '118', '118', '192', '155', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '234', '253', '235', '137', '174', '186', '253', '254', '253', '253', '253', '253', '254', '135', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '219', '253', '142', '0', '0', '3', '57', '214', '247', '253', '253', '253', '244', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '32', '58', '23', '0', '0', '0', '0', '0', '49', '193', '253', '253', '195', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '58', '224', '254', '231', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '214', '253', '253', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '41', '241', '253', '237', '66', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '201', '253', '253', '164', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '38', '254', '253', '253', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '231', '255', '254', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '85', '253', '254', '228', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '217', '253', '254', '68', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '130', '253', '253', '169', '18', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '235', '253', '253', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '178', '254', '254', '193', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '232', '253', '234', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '183', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '253', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '96', '238', '154', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 154],
        [['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '109', '109', '109', '212', '253', '255', '253', '253', '253', '192', '150', '149', '109', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '63', '222', '252', '252', '252', '252', '252', '253', '252', '252', '252', '253', '252', '252', '252', '238', '72', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '73', '252', '252', '252', '252', '252', '252', '253', '241', '241', '231', '253', '252', '252', '252', '253', '231', '52', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '31', '108', '108', '108', '108', '108', '108', '108', '77', '78', '46', '108', '108', '211', '252', '253', '252', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '37', '252', '253', '252', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '181', '252', '253', '189', '10', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '73', '252', '252', '253', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '155', '252', '252', '253', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '47', '233', '253', '253', '145', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '233', '252', '252', '210', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '105', '253', '252', '252', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '206', '253', '252', '231', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '99', '253', '255', '222', '41', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '63', '242', '252', '253', '138', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '16', '181', '252', '252', '237', '30', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '109', '252', '252', '252', '62', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '171', '253', '253', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '253', '252', '252', '148', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '232', '252', '252', '252', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '47', '148', '148', '108', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 108],
        [['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '255', '240', '115', '0', '0', '0', '0', '103', '121', '32', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '91', '108', '209', '253', '253', '253', '241', '242', '241', '170', '251', '253', '244', '132', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '35', '229', '253', '253', '253', '243', '159', '159', '205', '253', '169', '209', '234', '253', '213', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '94', '253', '253', '253', '253', '114', '0', '0', '19', '39', '4', '47', '217', '253', '213', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '94', '253', '253', '253', '221', '20', '0', '0', '0', '0', '0', '81', '253', '253', '177', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '75', '245', '253', '242', '98', '0', '0', '0', '0', '0', '0', '109', '253', '253', '80', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '110', '213', '168', '0', '0', '0', '0', '0', '0', '86', '241', '253', '216', '25', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '228', '253', '253', '115', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '70', '242', '253', '250', '63', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '64', '247', '253', '253', '116', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '122', '254', '254', '174', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '248', '253', '253', '46', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '164', '254', '253', '120', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '57', '253', '254', '253', '26', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '8', '175', '253', '254', '132', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '56', '253', '253', '165', '4', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '175', '253', '253', '113', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '6', '133', '253', '252', '226', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '253', '253', '233', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '54', '253', '239', '50', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 52],
        [['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '26', '247', '152', '83', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '216', '235', '195', '251', '204', '164', '121', '79', '79', '79', '44', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '156', '189', '2', '8', '26', '95', '125', '153', '165', '181', '210', '239', '91', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '21', '242', '189', '0', '0', '0', '0', '0', '0', '0', '0', '6', '92', '254', '113', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '74', '254', '87', '0', '0', '0', '0', '0', '0', '0', '0', '0', '2', '194', '241', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '7', '21', '2', '0', '0', '0', '0', '0', '0', '0', '0', '0', '6', '206', '249', '43', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '254', '252', '57', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '254', '241', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '114', '254', '166', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '23', '246', '254', '112', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '112', '254', '240', '12', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '25', '244', '254', '155', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '5', '145', '254', '227', '13', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '44', '254', '243', '53', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '17', '207', '252', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '3', '113', '254', '224', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '48', '254', '241', '78', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '18', '206', '254', '184', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '139', '254', '226', '15', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '53', '254', '254', '71', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 170],
        [['7', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '60', '255', '203', '146', '110', '38', '38', '38', '94', '146', '146', '146', '119', '23', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '151', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '56', '248', '248', '249', '249', '248', '248', '248', '192', '139', '139', '200', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '20', '24', '0', '0', '0', '0', '0', '0', '154', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '244', '253', '150', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '244', '253', '54', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '61', '250', '241', '35', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '181', '253', '106', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '55', '250', '252', '76', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '129', '253', '226', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '18', '235', '253', '102', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '132', '253', '203', '5', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '22', '242', '253', '85', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '133', '253', '205', '9', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '194', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '200', '253', '236', '137', '3', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '30', '194', '253', '212', '6', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 59]
        ]
    # Un test qui doit retourner True
    assert (plusProcheVoisin(img_2_test,listetraining)[0] == img_2_test_ppv)

    # Test de affichage3ou7()
    assert(affichage3ou7(plusProcheVoisin(img_2_test,listetraining)[0]) == " est un 7")

    # Test de cinsPlusProchesVoisins
    assert(cinqPlusProchesVoisins(img_2_test,listetraining) == img_2_test_five_ppv)

    # Test de plusDe3ou7()
    assert(plusDe3ou7(cinqPlusProchesVoisins(img_2_test,listetraining)) == " est un 7")

Functions

def affichage3ou7(image: list) ‑> str

Fonction qui renvoie une chaine de caractère selon le plus proche voisin

Paramètres

  • image : une liste contenant le plus proche voisin d'une image à tester

Préconditions

  • image est une liste
  • le premier élément de image vaut 3 ou 7

Postconsitions

  • la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'

Sortie

  • Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7
Expand source code
def affichage3ou7(image:list)->str:
    """
    Fonction qui renvoie une chaine de caractère selon le plus proche voisin

    **Paramètres** 
    
    * image : une liste contenant le plus proche voisin d'une image à tester    

    **Préconditions** 
    
    * image est une liste
    * le premier élément de image vaut 3 ou 7

    **Postconsitions**

    * la sortie est une chaine qui vaur ' est un 3' ou ' est un  7'

    **Sortie** 
    
    * Une chaine de caractère indiquant ce qu'est l'image, un 3 ou un 7
    """
    pass

    # Préconditions
    assert isinstance(image,list),"image n'est pas une  liste"
    assert (image[0][0] == '3' or image[0][0] == '7'),"image n'est pas une image de l'échantillon de référence"
    for i in range(1,len(image)):
        if (int(image[i]) not in range(256)):
            raise ValueError("L'un des éléments de image au moins n'est pas un code de dégradés de gris")
    # Préconditions
    
    is3ou7 = ' est un '+image[0][0]

    # Postconditions
    assert (is3ou7 == " est un 3" or is3ou7 == " est un 7"),"l'écart n'est pas un entier"
    # Postconditions

    return is3ou7    
def cinqPlusProchesVoisins(image2test: list, imagesref: list) ‑> list

Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester.

Paramètres

  • image2test une liste d'entiers sauf le premier élément qui est '?'
  • imagesref une liste de listes dont le premier élément est '3' ou '7'

Préconditions

  • image2test et les éléments de imagesref sont les listes
  • image2test et les éléments de imagesref ont le même nombre de pixels
  • image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

Postconsitions

  • La sortie est un tableau de cinq éléments
  • chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255

Sorties Un tableau de tableaux contenant :

  • les 5 plus proches voisins parmi les images de référence
  • leurs indices dans imagesref
Expand source code
def cinqPlusProchesVoisins(image2test:list,imagesref:list)->list:
    """
    Fonction qui renvoie, parmi un echantillon de référence, les 5 plus proches voisins d'une liste à tester.

    **Paramètres** 
    
    * image2test une liste d'entiers sauf le premier élément qui est '?'
    * imagesref une liste de listes dont le premier élément  est '3' ou '7' 

    **Préconditions** 

    * image2test et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément    

    **Postconsitions**

    * La sortie est un tableau de cinq éléments
    * chaque élément est une liste dont tous les éléments sauf le premier sont des codes entre 0 et 255

    **Sorties** 
    Un tableau de tableaux contenant :
    
    * les 5 plus proches voisins parmi les images de référence
    * leurs indices dans imagesref
    """
    pass

    # Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256)):
            raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    # Préconditions
    
    references = copy.deepcopy(imagesref)    
    i=0
    five_ppv = []    
    while i<5:        
        five_ppv.append(plusProcheVoisin(image2test,references))
        references.pop(five_ppv[i][1])        
        i +=1
    
    # Postconditions
    assert len(five_ppv) == 5,"la sortie ne contient pas 5 éléments"
    for i in range(len(five_ppv)):
        for j in range(1,len(five_ppv[i])):
            if (int(five_ppv[i][j]) not in range(256)):
                raise ValueError("L'un des éléments des cinq plus proches voisins au moins n'est pas un code de dégradés de gris")
    # Postconditions

    return five_ppv
def isDistanceMin(image2test: list, imageMin: list, imagesref: list) ‑> bool

Fonction booléenne qui renvoie True si la distance entre image2test et imageMin est inférieure ou égale à chaque distance entre image2test et un élément de imagesref

Paramètres

  • image2test est une liste d'entiers dont le premier élément est un '?'
  • imageMin est une liste dont il faut tester si la distance à image2test est minimale
  • imagesref est l'échantillon d'images de référence

Préconditions

  • image2test, imageMin et les éléments de imagesref sont les listes
  • image2test et les éléments de imagesref ont le même nombre de pixels
  • image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

Postconditions

  • la sortie est un booléen

Sortie

  • Un booléen
Expand source code
def isDistanceMin(image2test:list,imageMin:list,imagesref:list)->bool:
    """
    Fonction booléenne qui renvoie True si la distance entre image2test et imageMin
    est inférieure ou égale à chaque distance entre image2test et un élément de imagesref

    **Paramètres**

    * image2test est une liste d'entiers dont le premier élément est un '?'
    * imageMin est une liste dont il faut tester si la distance à image2test est minimale
    * imagesref est l'échantillon d'images de référence

    **Préconditions**

    * image2test, imageMin et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

    **Postconditions**

    * la sortie est un booléen

    **Sortie**

    * Un booléen

    """
    pass
    #Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    assert isinstance(imageMin,list),"l'image candidate n'est pas sous forme de liste"
    assert len(image2test[1:])==len(imageMin[1:]),"image2test et imageMin n'ont pas le même nombre de pixels"
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256) or int(imageMin[i]) not in range(256)):
            raise ValueError("L'un des deux premiers paramètres au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    #Préconditions

    # a priori c'est la plus petite distance
    isTrue = True
    i = 0
    while (i<len(imagesref) and isTrue):
        if distance(image2test[1:],imageMin[1:])>distance(image2test[1:],imagesref[i][1:]):
            isTrue = False
        i = i+1

    #Postconditions
    assert isinstance(isTrue,bool),"isTrue n'est pas un booléen"
    #Postconditions

    return isTrue
def plusDe3ou7(five_ppv_image2test: list) ‑> str

Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester

Paramètres

  • five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester

Préconditions

  • five_ppv_image2test est une liste de 5 listes
  • chacune des listes est une liste de codes de gris
  • le premier éléments de chaque liste est un 3 ou un 7

Postconsitions

  • la sortie est une chaine qui vaur ' est un 3' ou ' est un 7'

Sortie

  • Une chaine de caracteres
Expand source code
def plusDe3ou7(five_ppv_image2test:list)->str:
    """
    Fonction qui renvoie une chaine selon la valeur majoritaire parmi les 5 plus proches voisins d'une liste à tester

    **Paramètres** 
    
    * five_ppv_image2test la liste des 5 plus proches voisins d'une liste à tester 
    
    **Préconditions** 
    
    * five_ppv_image2test est une liste de 5 listes
    * chacune des listes est une liste de codes de gris
    * le premier éléments de chaque liste est un 3 ou un 7

    **Postconsitions**
    
    * la sortie est une chaine qui vaur ' est un 3' ou ' est un  7'


    **Sortie**
    
    * Une chaine de caracteres
    """
    pass

    # Préconditions
    assert len(five_ppv_image2test) == 5,"la liste en entrée ne contient pas 5 éléments"
    for i in range(len(five_ppv_image2test)):
        assert (five_ppv_image2test[i][0][0] == '3' or five_ppv_image2test[i][0][0] == '7'),"le premier élément de la liste "+str(i+1)+" n'est pas un 3 ou  un 7"
        for j in range(1,len(five_ppv_image2test[i])):
            if (int(five_ppv_image2test[i][j]) not in range(256)):
                raise ValueError("L'un des éléments des cinq éléments de l'entrée au moins n'est pas un code de dégradés de gris")
    # Préconditions
    
    nb_3 = 0
    nb_7 = 0
    maxDe3ou7 = ' est un '
    for i in range(len(five_ppv_image2test)):        
        if five_ppv_image2test[i][0][0]=='3':
            nb_3 +=1
        if five_ppv_image2test[i][0][0]=='7':
            nb_7 +=1            
    if (nb_3>nb_7):
        maxDe3ou7 +='3'
    else:
        maxDe3ou7 +='7'
          
    # Postconditions
    assert (maxDe3ou7 == " est un 3" or maxDe3ou7 == " est un 7"),"l'écart n'est pas un entier"
    # Postconditions

    return maxDe3ou7
def plusProcheVoisin(image2test: list, imagesref: list) ‑> list

Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester.

Paramètres

  • image2test est une liste d'entiers dont le premier élément est un ?
  • imagesref est une liste de listes dont le premier élément vaut 3 ou 7

Préconditions

  • image2test et les éléments de imagesref sont les listes
  • image2test et les éléments de imagesref ont le même nombre de pixels
  • image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

Postconsitions

  • La sortie est un tableau de deux éléments
  • le premier est une liste dont tous les éléments sont des codes entre 0 et 255
  • le second un entier compris entre 0 et la taille de imagesref
  • La distance avec image2test est minimale

Sorties Un tableau contenant :

  • le plus proche voisin parmi les images de référence
  • son indice dans imagesref
Expand source code
def plusProcheVoisin(image2test:list,imagesref:list)->list:
    """
    Fonction qui renvoie, parmi un echantillon de référence, le plus proche voisin d'une liste à tester.

    **Paramètres** 
    
    * image2test est une liste d'entiers dont le premier élément est un ?
    * imagesref est une liste de listes dont le premier élément  vaut 3 ou 7 

    **Préconditions** 

    * image2test et les éléments de imagesref sont les listes
    * image2test et les éléments de imagesref ont le même nombre de pixels
    * image2test et imagesref ont des pixels dont le code est compris entre 0 et 255 à partir du second élément

    **Postconsitions** 
    
    * La sortie est un tableau de deux éléments
    * le premier est une liste dont tous les éléments sont des codes entre 0 et 255
    * le second un entier compris entre 0 et la taille de imagesref    
    * La distance avec image2test est minimale

    **Sorties** 
    Un tableau contenant :

    * le plus proche voisin parmi les images de référence
    * son indice dans imagesref
    """
    pass

    # Préconditions
    assert isinstance(image2test,list),"l'image à tester n'est pas sous forme de liste"    
    for i in range(len(imagesref)):
        assert isinstance(imagesref[i],list),"l'image "+str(i+1)+" de l'échantillon de référence n'est pas sous forme de liste"
        assert len(image2test[1:])==len(imagesref[i][1:]),"image2test l'image "+str(i+1)+" de l'échantillon de référence n'ont pas le même nombre de pixels"
    for i in range(1,len(image2test)):    
        if (int(image2test[i]) not in range(256)):
            raise ValueError("L'un des éléments de imge2test au moins n'est pas un code de dégradés de gris")            
    for j in range(len(imagesref)):
        for i in range(1,len(imagesref[j])):
            if(int(imagesref[j][i]) not in range(256)):
                raise ValueError("L'un des codes des images de l'échantillon de référence n'est pas un code de dégradé de gris.")
    # Préconditions

    nbRefs = len(imagesref) # nombre d'images de référence
    ppv = [imagesref[0],0] # on initialise avec la premiere image 
    # On teste toutes les images si on en trouve une plus proche on change ppv
    for i in range(nbRefs):
        if distance(image2test[1:],imagesref[i][1:])<distance(image2test[1:],ppv[0][1:]):
            ppv = [imagesref[i],i]
    
    # Postconditions
    assert len(ppv)==2,"la sortie n'a pas deux éléments"
    assert isinstance(ppv[0],list),"le premier élément de la sortie n'est pas une liste"
    for i in range(1,len(ppv[0])):
        assert (int(ppv[0][i]) in range(256)),"l'un des éléments de la liste de sortie n'est pas un code de gris"
    assert isinstance(ppv[1],int),"le second élément de la sortie n'est pas un entier"
    assert ppv[1] in range(len(imagesref))
    assert isDistanceMin(image2test,ppv[0],imagesref)
    # Postconditions

    return ppv