42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import cv2
|
|
import os
|
|
|
|
DOSSIER_IMAGES = "./images_extraites"
|
|
DOSSIER_VISAGES = "./visages_detectes"
|
|
|
|
def detecter_visages(dossier_src=DOSSIER_IMAGES, dossier_dst=DOSSIER_VISAGES):
|
|
os.makedirs(dossier_dst, exist_ok=True)
|
|
modele = cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
|
|
detecteur = cv2.CascadeClassifier(modele)
|
|
compteur = 0
|
|
|
|
for nom_fichier in os.listdir(dossier_src):
|
|
if not nom_fichier.lower().endswith((".jpg", ".jpeg", ".png")):
|
|
continue
|
|
|
|
chemin = os.path.join(dossier_src, nom_fichier)
|
|
image = cv2.imread(chemin)
|
|
if image is None:
|
|
continue
|
|
|
|
gris = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
|
|
visages = detecteur.detectMultiScale(gris, scaleFactor=1.05, minNeighbors=4, minSize=(20, 20))
|
|
|
|
if len(visages) == 0:
|
|
print(f" {nom_fichier} : aucun visage")
|
|
continue
|
|
|
|
print(f" {nom_fichier} : {len(visages)} visage(s) détecté(s)")
|
|
|
|
for (x, y, largeur, hauteur) in visages:
|
|
cv2.rectangle(image, (x, y), (x + largeur, y + hauteur), (0, 255, 0), 2)
|
|
|
|
chemin_sortie = os.path.join(dossier_dst, nom_fichier)
|
|
cv2.imwrite(chemin_sortie, image)
|
|
compteur += 1
|
|
|
|
print(f"\n{compteur} images avec visages sauvegardées dans {dossier_dst}/")
|
|
|
|
if __name__ == "__main__":
|
|
detecter_visages() |