Outils pour utilisateurs

Outils du site


diy:projets:faceswap

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 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
diy/projets/faceswap.txt · Dernière modification : 2018/06/01 11:07 de spujol