====== 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