Table des matières:

Détection de visage + reconnaissance : 8 étapes (avec photos)
Détection de visage + reconnaissance : 8 étapes (avec photos)

Vidéo: Détection de visage + reconnaissance : 8 étapes (avec photos)

Vidéo: Détection de visage + reconnaissance : 8 étapes (avec photos)
Vidéo: Comment faire une IDENTIFICATION BIOMÉTRIQUE par le visage avec cette IA | Reconnaissance Faciale #2 2024, Novembre
Anonim
Image
Image
Détection de visage + reconnaissance
Détection de visage + reconnaissance

Il s'agit d'un exemple simple d'exécution de la détection et de la reconnaissance des visages avec OpenCV à partir d'une caméra. REMARQUE: J'AI RÉALISÉ CE PROJET POUR LE CONCOURS DE CAPTEURS ET J'AI UTILISÉ LA CAMÉRA COMME CAPTEUR POUR SUIVRE ET RECONNAÎTRE LES VISAGES. Donc, notre objectif Dans cette session, 1. Installer Anaconda 2. Télécharger Open CV Package 3. Définir les variables environnementales 4. Tester pour confirmer 5 Créer un code pour la détection des visages 6. Créer un code pour créer un ensemble de données 7. Créer un code pour former le reconnaisseur 8. Créer un code pour reconnaître les visages &Résultat.

Étape 1: Installez Anaconda

Installer Anaconda
Installer Anaconda

Anaconda est essentiellement un IDE Python bien emballé qui est livré avec des tonnes de packages utiles, tels que NumPy, Pandas, IPython Notebook, etc. Il semble être recommandé partout dans la communauté scientifique. Consultez Anaconda pour l'installer.

Étape 2: Télécharger Open CV Package

Télécharger Open CV Package
Télécharger Open CV Package

Tout d'abord, rendez-vous sur le site officiel d'OpenCV pour télécharger le package OpenCV complet. Choisissez une version que vous aimez (2.x ou 3.x). Je suis sur Python 2.x et OpenCV 2.x - principalement parce que c'est ainsi que les didacticiels OpenCV-Python sont configurés/basés.

Dans mon cas, j'ai extrait le package (essentiellement un dossier) directement sur mon lecteur F. (F:\opencv).

Étape 3: Définir les variables environnementales

Définir les variables environnementales
Définir les variables environnementales

Copiez et collez le fichier cv2.pyd

Le répertoire Anaconda Site-packages (par exemple, F:\Program Files\Anaconda2\Lib\site-packages dans mon cas) contient les packages Python que vous pouvez importer. Notre objectif est de copier et coller le fichier cv2.pyd dans ce répertoire (afin que nous puissions utiliser l'import cv2 dans nos codes Python.).

Pour cela, copiez le fichier cv2.pyd…

À partir de ce répertoire OpenCV (la partie de début peut être légèrement différente sur votre machine):

# Machine Python 2.7 et 64 bits: F:\opencv\build\python\2.7\x64# Machine Python 2.7 et 32 bits: F:\opencv\build\python\2.7\x84

Dans ce répertoire Anaconda (la partie de début peut être légèrement différente sur votre machine):

F:\Program Files\Anaconda2\Lib\site-packages

Après avoir effectué cette étape, nous pourrons maintenant utiliser import cv2 en code Python. MAIS, nous devons encore faire un peu plus de travail pour que FFMPEG (codec vidéo) fonctionne (pour nous permettre de faire des choses comme traiter des vidéos.)

Faites un clic droit sur "Poste de travail" (ou "Ce PC" sous Windows 8.1) -> clic gauche sur Propriétés -> clic gauche sur l'onglet "Avancé" -> clic gauche sur le bouton "Variables d'environnement…". Ajoutez une nouvelle variable utilisateur pour pointer vers l'OpenCV (soit x86 pour le système 32 bits, soit x64 pour le système 64 bits.) Je suis actuellement sur une machine 64 bits.

32 bitsOPENCV_DIRC:\opencv\build\x86\vc12

64 bitsOPENCV_DIRC:\opencv\build\x64\vc12

Ajoutez %OPENCV_DIR%\bin au PATH de la variable utilisateur.

Par exemple, ma variable utilisateur PATH ressemble à ceci…

Avant:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts

Après:

F:\Users\Johnny\Anaconda;C:\Users\Johnny\Anaconda\Scripts;%OPENCV_DIR%\bin

Ça y est nous avons terminé ! FFMPEG est prêt à être utilisé !

Étape 4: Testez pour confirmer

Tester pour confirmer
Tester pour confirmer
Tester pour confirmer
Tester pour confirmer

Nous devons tester si nous pouvons maintenant les faire dans Anaconda (via Spyder IDE):

  • Importer le package OpenCV
  • Utiliser l'utilitaire FFMPEG (pour lire/écrire/traiter des vidéos)

Test 1: Peut-on importer OpenCV ?

Pour confirmer qu'Anaconda est maintenant capable d'importer le package OpenCV-Python (à savoir, cv2), émettez-les dans la console IPython:

importer cv2

imprimer cv2._version_

Si le package cv2 est importé correctement sans erreur et que la version cv2 est imprimée, alors tout va bien !

Test 2: Peut-on utiliser le codec FFMPEG ?

Placer un échantillon

input_video.mp4

fichier vidéo dans un répertoire. Nous voulons tester si nous pouvons:

  • lisez ce fichier vidéo.mp4, et
  • écrivez un nouveau fichier vidéo (peut être.avi ou.mp4 etc.)

Pour ce faire, nous devons avoir un code python de test, appelez-le test.py. Placez-le dans le même répertoire que l'échantillon

input_video.mp4

déposer.

C'est quoi

test.py

peut ressembler (Remarque: merci aux suggestions de Pete et Warren dans le champ de commentaire - j'ai remplacé mon code de test d'origine par le sien - veuillez le tester vous-même et nous faire savoir si cela fonctionne mieux):

importer cv2

cap = cv2. VideoCapture("input_video.mp4") print cap.isOpened() # True = lire la vidéo avec succès. False - ne parvient pas à lire la vidéo. fourcc = cv2. VideoWriter_fourcc(*'XVID') out = cv2. VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = écrire la vidéo avec succès. False - ne pas écrire la vidéo. cap.release() out.release()

Ce test est TRÈS IMPORTANT. Si vous souhaitez traiter des fichiers vidéo, vous devez vous assurer qu'Anaconda / Spyder IDE peut utiliser le FFMPEG (codec vidéo). Il m'a fallu des jours pour que cela fonctionne. Mais j'espère que cela vous prendra beaucoup moins de temps !:)Remarque: un autre conseil très important lors de l'utilisation de l'IDE Anaconda Spyder. Assurez-vous de vérifier le répertoire de travail actuel (CWD) !!!

Étape 5: Créer un code pour la détection de visage

Créer du code pour la détection des visages
Créer du code pour la détection des visages
Créer du code pour la détection des visages
Créer du code pour la détection des visages

But

Dans cette séance,

  • Nous verrons les bases de la détection de visage à l'aide des classificateurs en cascade Haar
  • Nous allons étendre la même chose pour la détection des yeux, etc.

Détection en cascade Haar dans OpenCV

Nous traiterons ici de la détection. OpenCV contient déjà de nombreux classificateurs pré-formés pour le visage, les yeux, le sourire, etc. Ces fichiers XML sont stockés dans le dossier opencv/data/haarcascades/. Créons un détecteur de visage et d'yeux avec OpenCV. Nous devons d'abord charger les classificateurs XML requis. Chargez ensuite notre image d'entrée (ou vidéo) en mode niveaux de gris OU nous pouvons utiliser la caméra (pour la détection de visage en temps réel)

importer numpy en tant que np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades_eyes/haarcascade.xml') cap = cv2. VideoCapture(0) tandis que 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) pour (x, y, w, h) dans les faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = gray[y:y +h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) pour (ex, ey, ew, eh) dans les yeux: cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2) print "found " +str(len(faces)) +" face(s)" cv2.imshow ('img', img) k = cv2.waitKey(30) & 0xff si k == 27: break cap.release() cv2.destroyAllWindows()

Étape 6: Créer du code pour créer un ensemble de données

Créer du code pour créer un ensemble de données
Créer du code pour créer un ensemble de données
Créer du code pour créer un ensemble de données
Créer du code pour créer un ensemble de données

Nous faisons de la reconnaissance faciale, vous aurez donc besoin de quelques images de visage ! Vous pouvez soit créer votre propre ensemble de données, soit commencer avec l'une des bases de données de visages disponibles, https://face-rec.org/databases/ vous donne un aperçu à jour. Trois bases de données intéressantes sont (des parties de la description sont extraites de

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Yale Facedatabase B étendu

ICI j'utilise mon propre ensemble de données….avec l'aide du code qui est donné ci-dessous:

importer numpy en tant que np

import cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) id = raw_input('enter user id') sampleN=0; tandis que 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) pour (x, y, w, h) dans les faces: sampleN =échantillonN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", gray[y:y+h, x: x+w]) cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey(100) cv2.imshow('img', img) cv2.waitKey(1) si sampleN > 20: break cap.release() cv2.destroyAllWindows()

Étape 7: Créer du code pour former le module de reconnaissance

Créer du code pour former le reconnaisseur
Créer du code pour former le reconnaisseur

Créer la fonction pour préparer l'ensemble d'apprentissage

Maintenant, nous allons définir une fonction

getImagesWithID(chemin)

qui prend le chemin absolu vers la base de données d'images comme argument d'entrée et renvoie un tuple de 2 listes, l'un contenant les visages détectés et l'autre contenant l'étiquette correspondante pour ce visage. Par exemple, si le ième index dans la liste des visages représente le 5ème individu dans la base de données, alors le ième emplacement correspondant dans la liste des étiquettes a une valeur égale à 5.

Convertissez maintenant les faces de l'ensemble de données (créées à l'étape 6) en fichier.yml à l'aide du code ci-dessous:

importer le système d'exploitation

import numpy as np import cv2 de PIL import Image # Pour la reconnaissance faciale, nous utiliserons le reconnaisseur de reconnaissance faciale LBPH = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) faces = IDs = pour imagePath dans imagePaths: # Lire l'image et la convertir en niveaux de gris facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Récupère l'étiquette de l'image ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Détecte le visage dans l'image faces.append(faceNP) IDs.append (ID) cv2.imshow("Ajout de visages pour la formation", faceNP) cv2.waitKey(10) return np.array(IDs), faces Ids, faces = getImagesWithID(path) Recognizer.train(faces, Ids) Recognizer.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()

en utilisant ce code, tous les ensembles de données de visage convertis en un seul fichier.yml…..l'emplacement du chemin est ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Étape 8: Créez un code pour reconnaître les visages et le résultat

Guyzz c'est la dernière étape dans laquelle nous pouvons créer le code pour reconnaître les visages à l'aide de votre webcam DANS CETTE ÉTAPE IL Y A DEUX OPÉRATIONS QUI VA EFFECTUER…. 1. capturer la vidéo de la caméra 2. la comparer avec votre fichier.yml

importer numpy en tant que npimport cv2 face_cascade = cv2. CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture(0) rec = cv2.createLBPHFaceRecognizer(); rec.load("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id=0 font=cv2.cv. InitFont(cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) tandis que 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) pour (x, y, w, h) dans les faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf=rec.predict(gray[y:y+h, x:x+w]) if(id==2): id="alok" if id==1: id="alok" if id==3: id="anjali" if id==4: id="Gaurav" if id= =5: id='rahul' si id==6: id="akshay" cv2.cv. PutText(cv2.cv.fromarray(img), str(id), (x, y+h), police, 255) cv2.imshow('img', img) si cv2.waitKey(1) == ord('q'): break cap.release()

cv2.destroyAllWindows()

et enfin le résultat viendra devant vos yeux…… vous pouvez également télécharger le fichier zip sous le lien:Cliquez ici pour télécharger les codes. comme cette instructable….. plzzz abonnez-moi et votez pour moi…..merci les amis:)

Conseillé: