Reconnaissance faciale avec OpenCV de Python

Aperçu

Cet article s'adresse aux personnes qui souhaitent reconnaître des visages avec OpenCV de Python. Dans cet article, j'expliquerai comment détecter un visage à partir d'une image, une image de caméra, un fichier mp4, et comment couper et enregistrer uniquement le visage de l'image.

environnement

macOS Catalina 10.15.4 Python 3.7.5 opencv-python 4.2.0.34 numpy 1.18.2

Installation d'OpenCV

$ pip install opencv-python

Structure du répertoire

.
├── cascades
│  └── haarcascade_frontalface_default.xml
├── image_detect.py
├── images
│  └── 001.jpg
├── trimmed
└── venv

La structure des répertoires est comme ça. Le détecteur de détection de visage dans le dossier cascades se trouve dans lib / python3.7 / site-packages / cv2 / data dans le répertoire où Python est installé ou dans le répertoire de l'environnement virtuel.

Détectez un visage et placez-le dans un rectangle

Détecté de l'image

`` image_detect.py`


import cv2

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/001.jpg "
color = (255, 255, 255) #La couleur du carré qui entoure le visage détecté

src = cv2.imread(img_path,0)
gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
rect = cascade.detectMultiScale(gray)
if len(rect) > 0:
    for x, y, w, h in rect:
        cv2.rectangle(src, (x, y), (x+w, y+h), color)

cv2.imshow('detected', src)
cv2.waitKey(0)
cv2.destroyAllWindows()


x, y, w, h correspondent à la coordonnée x du coin supérieur gauche du visage, la coordonnée y du coin supérieur gauche du visage, la largeur du visage et la hauteur du visage. De plus, bien que non limité à OpenCV, l'origine des coordonnées xy est le coin supérieur gauche de l'image.

Détecté à partir de l'image de la caméra

`` image_detect.py`


import cv2

cascade_path = "./cascades/haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(cascade_path)
color = (255, 255, 255) #La couleur du carré qui entoure le visage détecté
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    rect = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
    if len(rect) > 0:
        for x, y, w, h in rect:
            cv2.rectangle(frame, (x, y), (x+w, y+h), color)
    cv2.imshow('detected', frame)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Vous pouvez obtenir l'image de la caméra en définissant l'argument de cv2.VideoCapture () sur le numéro de périphérique de la caméra, mais vous pouvez également gérer le fichier vidéo en entrant le chemin du fichier mp4.

Détecter, découper et enregistrer les faces

Lorsqu'il n'y a qu'une seule image

`` image_detect.py`


import cv2

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/001.jpg "
out_path = "./trimmed/"


src = cv2.imread(img_path,0)
gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
rect = cascade.detectMultiScale(gray)
if len(rect) > 0:
    for i,[x, y, w, h] in enumerate(rect):
        img_trimmed = src[y:y + h, x:x + w]
        file_name = "{}.jpg ".format(i)
        file_path = out_path + file_name
        cv2.imwrite(file_path, img_trimmed)

Vous pouvez obtenir le nombre de boucles et le contenu de rect en même temps en utilisant enumerate dans l'instruction for. Lors de la coupe, sortez en tranche.

Lorsque vous souhaitez détecter à partir de plusieurs images à la fois

`` image_detect.py`


import cv2
import os

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/"
out_path = "./trimmed/"

files = os.listdir(img_path)
cascade = cv2.CascadeClassifier(cascade_path)

for file in files:
    src = cv2.imread(img_path+file,0)
    gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
    rect = cascade.detectMultiScale(gray)
    if len(rect) > 0:
        for i,[x, y, w, h] in enumerate(rect):
            img_trimmed = src[y:y + h, x:x + w]
            file_name = "{}_{}".format(i,file)
            file_path = out_path + file_name
            cv2.imwrite(file_path, img_trimmed)

Si vous placez l'image que vous souhaitez rogner dans le dossier images et que vous l'exécutez, elle sera enregistrée dans le dossier rogné au format «{face index number} _ {original file name}».

Résumé

OpenCV est pratique

Recommended Posts

Reconnaissance faciale avec OpenCV de Python
Reconnaissance faciale / coupe avec OpenCV
Essayez la reconnaissance faciale avec python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
J'ai essayé la reconnaissance faciale avec OpenCV
Reconnaissance faciale avec Edison
[python, openCV] base64 Reconnaissance faciale dans les images
Reconnaissance faciale par Amazon Rekognition
Détection de visage avec Python + OpenCV
Essayez la reconnaissance faciale avec Python
Reconnaissance d'image avec Keras + OpenCV
Détection de visage d'anime avec OpenCV
[OpenCV] Identification personnelle avec photo du visage
Première reconnaissance faciale d'anime avec Chainer
Découpez le visage avec Python + OpenCV
Reconnaissance d'objets avec openCV par traincascade
Reconnaissance faciale en temps réel avec vidéo acquise par getUserMedia [HTML5, openCV]
Reconnaissance faciale à l'aide d'OpenCV (classificateur de caractéristiques de type Haar)
Détection de visage avec Python + OpenCV (rotation invariante)
Essayez d'utiliser l'appareil photo avec OpenCV de Python
Reconnaissance faciale des personnages d'anime avec Keras
API de reconnaissance faciale sans serveur conçue avec Python
ZOOM en remplaçant votre visage par une icône Twitter avec la reconnaissance faciale openCV
Hello World et détection de visage avec OpenCV 4.3 + Python
Comparaison des performances du détecteur de visage avec Python + OpenCV
[Python3] [Ubuntu16] [Docker] Essayez la reconnaissance faciale avec OpenFace
Redimensionner, mosaïque, détection de visage avec OpenCV, parfois tampon d'éléphant
Détecter le retour du chat avec OpenCV
Binarisation avec OpenCV / Python
Reconnaissance d'image avec keras
Faire pivoter les sprites avec OpenCV
Augmentation des données avec openCV
TopView facile avec OpenCV
Trébucher avec opencv3 de homebrew
Maintenant, essayons la reconnaissance faciale avec Chainer (phase de prédiction)
Essai de reconnaissance faciale facile avec Jetson Nano et caméra Web
Maintenant, essayons la reconnaissance faciale avec Chainer (phase d'apprentissage)
Améliorez rapidement la précision de détection en spécifiant les paramètres avec la détection de visage openCV
"Traitement Apple" avec OpenCV3 + Python3
Essayez la détection des bords avec OpenCV
Implémenter des sous-commandes avec l'argparse de Python
Édition d'image avec python OpenCV
Capture de caméra avec Python + OpenCV
J'ai essayé la reconnaissance faciale avec Face ++
[Python] Utilisation d'OpenCV avec Python (basique)
Un mémo lorsque le visage est détecté avec Python + OpenCV rapidement
Détection de visage avec Python + dlib
Binariser les données photo avec OpenCV
Chargement de la vidéo en boucle avec opencv
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
Détection des bords en temps réel avec OpenCV
Co-localisation d'objets pour la reconnaissance faciale
Obtenez des fonctionnalités d'image avec OpenCV
Détection de visage avec Haar Cascades
Essayez OpenCV avec Google Colaboratory
Création d'un classificateur en cascade avec opencv
Utiliser OpenCV avec Python @Mac
Je veux vérifier la position de mon visage avec OpenCV!
Reconnaissance des nombres dans les images avec Python