1. Introduction

L'apparence d'une personne est la partie la plus importante de leur premier impression sur quelqu’un d'autre. Les couleurs jouent un rôle important dans ce procès parce que chaque couleur expriment des différents sentiments et des émotions qu'une personne peut ressentir dans le moment. L'importance des couleurs se trouvent aussi sur des questions simples de fashion. Quelle couleur ira bien avec quelle couleur? Comment décider quelles couleurs donnent une bonne mélange avec une couleur spécifique? Ces opinions peuvent être d'une part personnelle mais l'opinion d'une styliste est toujours le cas le plus parfait. Cette question est quelque chose qui prend beaucoup de temps des gens, donc avec cette outille, il y a moins de temps qui se perd en choisissant des habilles. Les meilleures mixtes des couleurs sont choisis avec une étude de fashion et d’expérience personnelle. Pourquoi vous attendez!? Commencez à prendre des photos de vos habilles et voir est-ce que votre combo est génial ou a besoin d'une petite changement pour trouver sa meilleur forme!

1.1 But

Dans ce projet on essaye de découvrir les deux couleurs principales des habilles d'une personne qui consistent d'un t shirt ou chemise avec des pantalons ou jeans. En prenant une photo avec ces deux habilles devant une fond blanche ou noir le camera peut remarquer les couleurs et en allumant une LED rouge pour montrer que les habilles ne sont pas bien ensemble et une LED vert pour montrer que c'est une bonne combo, on essaye de proposer la mixte parfaite pour une bonne premier impression.

2.1 Matériel

  • 1 x Raspberry Pi Model B+
  • 1 x grande breadboard
  • 1 x Câble d’alimentation
  • 1 x Câble Ethernet RJ45
  • 1 x Ordinateur portable (MacBook Air macOS Sierra)
  • 1 x Raspberry Pi Camera Module
  • 2 x LED RGB
  • 2 x connecteurs pins femelles individuels
  • 1 x Push Button
  • 1 x Clé USB
  • 1 x Clavier
  • 1 x Souris
  • 1 x Câble HDMI
  • 1 x Ecran


2.2 Méthode

2.2.1 Mise en place du caméra

Première chose c'est d'installer la caméra. Grâce à une câble plate on peut directement connecter la caméra au port CSI (Camera Serial Interface) du Raspberry Pi. Il faut juste faire attention à la direction dans laquelle le caméra est sensé de se connecter, sinon cette étape ne pose pas trop de problème et avec une démarrage de Raspbian au dernière version le caméra est prêt à prendre des ordres.

2.2.2 Les commandes de caméra sur Python

En donnant la permission dans la configuration de la Raspberry, on active le caméra. Avec Python et le command “camera.start_preview” on peut avoir sur l'écran ce que le caméra voit. Avec le command “camera.capture” on peut prendre une photo et il faut aussi donner une lien pour la place dans laquelle la photo doit s’enregistrer. Au final pour finir la session on utilise le command “camera.stop_preview”.

2.2.3 Prise de photo en command

C’est maintenant qu’on ajoute la Push Button à l'équation. En se basant sur le photo, on la place sur le grand breadboard avec un côté sur la partie positive et l'autre côté sur la partie négative. En utilisant deux connecteurs, une qui connecte le Push Button au G17 et une qui le connecte au GND (Ground), on met le switch en place.

20170206_235308.jpg

Sur le Python il faut encore qu’on ajoute le command de Push Button pour que la personne prise une photo par elle-même. On introduit le button comme Button(17) parce qu’il est connecté au G17 et le command “button.wait_for_press” va faire le job. Il ne faut pas oublier qu’au début on doit importer le “PiCamera” depuis “picamera” et le “Button” depuis le “gpiozero”. Au total la command dans laquelle on prend une photo en command doit ressembler à suivant :

from picamera import PiCamera
from gpiozero import Button

button = Button (17)
camera = PiCamera()

camera.start_preview()
button.wait_for_press()
camera.capture(‘/home/pi/Desktop/image3.jpg’)
camera.stop_preview()

2.2.4 Programmes nécessaires pour l'analyse d'image

Il faut télécharger deux programmes :

  • NumPy
  • OpenCV

On a besoin de NumPy pour gérer les processus numériques et la commande “argparse” pour analyser les arguments de la ligne de commande en plus on a aussi besoin de la commande “cv2” pour les contraignants de OpenCV. De nouveau il ne faut pas oublier de les importer dans le codage.

2.2.5 Préparation d'analyse de l'image

On construit les arguments de la ligne de commande et après les parser, il faut ajouter l’adresse de l’image, laquell qui a été prise par l’utilisateur. On effectue ce travail avec la commande “ap.add_argument” dans laquelle “ap” signifie “argparse.ArgumentParser”. On ajoute l’adresse (‘/home/pi/Desktop/image3.jpg’) et on lance la command “cv2.imread(args“image”)” pour mettre l’image en état d’analyse. (Dans le codage l’image s'appelle “image3.jpg”)

2.2.6 Choisir les couleurs

Dans cette étape on doit essayer de détecter les couleurs dans l’image. On choisit des couleurs avec leurs limites dans le RGB. Chaque tuple a deux valeurs, une limite inférieure et une limite le plus haut qui sont nécessaires pour chaque couleur donc ici on présente les couleurs et leurs tuples choisis :

  • Couleur : Limite inférieure (R, G, B) Limite le plus haut (R, G, B)
  • Blanc : (224, 224, 224) (225, 225, 225)
  • Blue : (0, 0, 153) (51, 153, 255)
  • Brun : (51, 25, 0) (204, 102, 0)
  • Gris : (64, 64, 64) (192, 192, 192)
  • Jaune : (255, 255, 0) (255, 255, 102)
  • Noir : (0, 0, 0) (32, 32, 32)
  • Orange : (255, 128, 0) (255, 178, 102)
  • Rouge : (153, 0, 0) (255, 51, 51)
  • Vert : (0, 51, 0) (153, 255, 51)
  • Violet : (51, 0, 102) (204, 153, 255)

Ici par exemple on dit que pour tous les pixels dans l'image avec un R plus que 224, un G plus que 224 et un B plus que 224 avec un R moins que 225, un G moins que 225 et un B moins que 225 sont considérés comme "Blanc".

2.2.7 Performance de la détection des couleurs

Avec la liste des limites, on peut engager la commande "cv2.inRange" pour faire fonctionner la détection des couleurs. Cette commande a besoin de trois arguments:

#"image": La place dans laquelle on veut détecter les couleurs.
#"lower": La limite inférieur des couleurs.
#"upper": La limite la plus haute des couleurs.

Il ne faut pas oublier qu'au début on doit montrer qu’on va travailler avec les limites donc on utilise la commande “for” pour les valeurs et la commande “in” pour les limites après il faut aussi convertir les valeurs des limites au NumPy qui devient "uint8".

2.2.8 Affichage des résultats

Au final pour avoir des images juste avec des couleurs proposés on utilise la commande "cv2.bitwise_and" et avec les commades "cv2.imshow" et "cv2.waitKey" on les démontre. Le codage sur le Python est finit donc on peut directement engager le fichier "Finding Color.py" sur le terminal avec l'adresse de l'image qu'on veut analyser qui est (‘/home/pi/Desktop/image3.jpg’). La ligne sur le terminal se démontre par cette façon :

$ python Finding Color.py /home/pi/Desktop/image3.jpg

Il ne faut pas oublier qu'avant cette commande, il faut prendre une photo avec le fichier "Taking Picture.py"

3. Résultats

A cause d'espace insuffisante sur le Raspberry, ce n’était pas possible d'installer les programmes NumPy et OpenCV donc le projet ne peut pas marcher. Le codage exprimé est basé sur la théorie et il n'y a pas quelque chose de réel qui peut la démontrer. L’idée de jugement des couleurs avec des LEDs n'a pas pris de place parce que ce n’était non plus possible de mettre cette action en route avec des résultats qui n'existent pas. La seule chose qui marche c'est la prise de photo en commande de l'utilisateur avec le PushButton.

4. Discussion

Avec une carde SD qui a un peu plus d'espace c'est possible d'installer les programmes et redémarrer le codage qui doit normalement marcher. Il fallait un peu plus de temps et un peu plus de recherche pour trouver une façon de gérer la comparaison des couleurs avec les LEDs.

5. Conclusion

Dans ce projet on apprend beaucoup plus sur le sujet des couleurs et leurs analyses. La faite d'avoir besoin d'installer deux autres programmes pour trouver les couleurs dans une image était assez surprenante. En conclusion maintenant j'ai beaucoup plus de connaissances sur le codage de Python qui sera 100% utile dans le futur.