====== Présentation du projet ====== Le but de ce projet est de pouvoir intervertir les différents visages sur des photos. ====== Outils requis et Librairies Python====== Ce programme se base sur la [[diy:projets:facedetection|détection de visages]] et utilise donc la même fonction que celle-ci pour pouvoir détecter les faces à échanger Il utilise aussi les mêmes librairies que la détection de visages à savoir: import cv2 import numpy as np import sys import os ====== Explication du programme====== Comme écrit ci-dessus le Faceswap utilise la fonction detectVisage pour détecter les visages à échanger. Une fois que ceux-ci sont détectées on vérifie s'il y a au moins deux visages sinon on quitte le programme. #Verification du nombre de visage if len(vis) < 2: print("Le nombre de visage n'est pas suffisant pour executer le FaceSwap") Ensuite, on enregistre dans des fichiers temporaires au formats images tous les visages obtenus. #Creation d'image temporaire pour l'execution du FaceSwap i = 0 for x,y,w,h in vis: cv2.imwrite("temp"+str(i)+".jpg",img[y:h,x:w]) i=i+1 Puis en décalant l'indice, on parcourt une nouvelle fois le tableau de visages, on récupère le visage temporaire correspondant à l'indice, on redimensionne celui-ci à la taille du visage que l'on veut remplacer et on remplace le visage actuel. #Remplacement des visages présent sur l'image par les autres visages enregistrés dans des fichiers temp i = 1; for x,y,w,h in vis: rep=cv2.imread("temp"+str(i)+".jpg", cv2.IMREAD_COLOR) repR = cv2.resize(rep,img[y:h,x:w].shape[:2]) img[y:h,x:w] = repR i=i+1 if i == len(vis): i = 0 Et enfin, il ne reste plus qu'à écrire l'image résultat et à supprimer les fichiers temporaires. cv2.imwrite("IMGRES/"+res,img) os.system("rm temp*.jpg") ====== Utilisation du Raspberry ====== Ce programme fonctionne évidemment avec des images et vidéos importées directement d'un raspberry. Pour ce faire, nous avons besoin des scripts Bash ci-dessous permettant la connexion au raspberry. #!/bin/sh ip=$1 cat detectVisImg.sh | ssh pi@$ip sh rm imgDetectVisage.jpeg scp pi@$ip:~/tempPS/imgDetectVisage.jpeg ./DetectVisage #!/bin/sh if [ -d "/home/pi/tempPS" ]; then cd tempPS sudo rm *.jpeg else mkdir ./tempPS cd tempPS fi raspistill -vf -hf -o imgDetectVisage.jpeg exit Pour appeler un script Bash en python on utilise la commande suivante, qui permet de lire une commande systeme : os.popen("./connexPiDetectVisageVid.sh " + ipRasp,"r").read