Outils pour utilisateurs

Outils du site


diy:projets:facedetection

Ceci est une ancienne révision du document !


Présentation du projet

Le but de se projet est de pouvoir détecter les visages sur des photos ou vidéos.

Outils requis et Librairies Python

Ce programme se base sur la méthode de Viola et Jones donc de ce fait, on a besoin de télécharger le fichier “haarcascade_frontalface_alt.xml”

Nous allons aussi utiliser différentes librairies de python tel que:

import cv2
import numpy as np
import sys
import os

Explication du programme

La première fonction à faire est la plus importante, il s'agit de la fonction qui va permettre de détecter les visages sur l'image. Elle prend en entrée une image et retourne l'image et une liste de rectangle correspondant aux différents visages sur l'image.

def detectionVisage(img):
  cascade = cv2.CascadeClassifier("/home/pujol/Documents/L3/BE/haarcascade_frontalface_alt2.xml")
  imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  visage = cascade.detectMultiScale(imgGray, 1.2, 4,minSize=(20, 20))
  if len(visage) == 0:
    return [],img
  visage[:,2:] += visage[:,:2]
  return visage,img

La conversion en image de gris permet de faciliter la détection de visage.

Ensuite la fonction suivante, va permettre d'encadrer les différents visages en prenant en entrée le tableau de visage et l'image. Elle retourne ainsi l'image modifié.

def rect(visage,img):
  for x,y,h,w in visage:
    cv2.rectangle(img, (x, h), (y, w), (255, 0, 0), 3)
  return img

Nous avons donc en notre possession les deux fonctions importantes qui permettent la détection de visages. Il ne nous reste plus qu'a les appliquer à une images ou une vidéo.

Pour une image, il suffit juste d'utiliser les deux fonctions précédentes et écrire l'image résultat dans un nouveau fichier.

img = cv2.imread("imgDetectVisage.jpeg", cv2.IMREAD_COLOR)
visage, img = detectionVisage(img)
cv2.imwrite("imageRes.jpeg",rect(visage,img))

Pour une vidéo, il faut appliquer les fonctions de détection à chaque frame de celle-ci et remonter la vidéo avec les images modifiés.

vid = cv2.VideoCapture('vidDetectVisage.avi')
vid.open('vidDetectVisage.avi')
fourcc = cv2.VideoWriter_fourcc('D', 'I', 'V', 'X')
i=1000000
os.system('rm ~/IMGDET/*.jpeg')
  while vid.isOpened():
    ret,img = vid.read()
    if ret == True:
      vis,img = detectionVisage(img)
      img = rect(vis,img)
      cv2.imwrite('IMGDET/img_'+ str(i) + '.jpeg',img)
      i += 1
    else:
      break
vid.release()
os.system('ls ~/Documents/L3/BE/IMGDET/*.jpeg > nomImgFich.txt')
os.system("mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=720:480 -o vidRes.avi -mf type=jpeg:fps=24 mf://@nomImgFich.txt")
os.popen("rm ./nomImgFich.txt","r").read
diy/projets/facedetection.1527154693.txt.gz · Dernière modification : 2018/05/24 09:38 de spujol