[Python] Détection de visage par OpenCV (Haar Cascade)

introduction

Cette fois, j'aimerais utiliser OpenCV pour détecter les visages. Il existe différentes méthodes de détection de visage, mais cette fois, nous utiliserons la cascade de Haar.

environnement

MacOS Mojave Python 3.7

Haar Casecade? À partir de la quantité de caractéristique (quantité de caractéristique de Haar) qui exprime la faciale, il s'agit d'un classificateur qui juge s'il s'agit ou non d'un visage. Ce classificateur est appelé un classificateur Cascade car il est composé de plusieurs classificateurs combinés pour la vitesse. Les fonctionnalités en noir et blanc suivantes sont utilisées comme fonctionnalités Haar. スクリーンショット 2020-03-24 16.45.21.png Figure. Caractéristiques de Haar (Source de l'image: http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)

Je me demande pourquoi ce noir et blanc est ... Pensons à quoi ressemble le visage humain.

Si le visage humain est très abstrait, ce sera à peu près comme suit (peut-être ... w) スクリーンショット 2020-03-24 16.53.30.png Figure. Visage très abstrait

D'après la figure ci-dessus, ne pensez-vous pas que les yeux sont disposés en "noir et blanc" à partir de la gauche, par exemple? スクリーンショット 2020-03-24 17.01.59.png Figure. Disposition blanche et noire du visage très abstrait

La quantité de caractéristiques Haar représente cet arrangement blanc et noir du visage très abstrait. Une zone arbitraire est découpée dans l'image d'entrée, et s'il y a beaucoup de ces caractéristiques, elle est considérée comme un visage. スクリーンショット 2020-03-24 16.45.32.png Figure. Image considérée comme un visage (il existe de nombreuses caractéristiques Haar telles que les yeux) (Source de l'image: http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)

Ceci n'est qu'une explication approximative de l'image, donc si vous voulez en savoir plus, veuillez lire l'article suivant. https://www.cs.cmu.edu/~efros/courses/LBMV07/Papers/viola-cvpr-01.pdf

Détection facial

Maintenant, je voudrais reconnaître le visage d'une personne en utilisant la cascade de haar. L'image utilisée est l'image suivante (woman.jpg). woman.jpg

Le code exécuté ressemble à ceci:

python


import cv2
import matplotlib.pyplot as plt

#Chargement des images(Image 1066x1600)
img = cv2.imread("woman.jpg ")
#Classificateur de cascade de faces de charge
face_cascade = cv2.CascadeClassifier("haarcascades/haarcascade_frontalface_default.xml")
#Rendre l'image en échelle de gris
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#Effectuer la détection de visage!
faces = face_cascade.detectMultiScale(gray)
#Puisque la position du visage est incluse dans les faces, lisez-la avec l'instruction for
for (x,y,w,h) in faces:
    #Dessinez un rectangle à la position du visage
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),10)
#Changer l'ordre des couleurs
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
#production
plt.imshow(img)
plt.show()

résultat スクリーンショット 2020-03-24 17.27.20.png

C'est reconnu correctement! Ensuite, je n'expliquerai que les points du code.

Lecture du classificateur en cascade

python


#Classificateur de cascade de faces de charge
face_cascade = cv2.CascadeClassifier("haarcascades/haarcascade_frontalface_default.xml")

Dans cette partie, nous chargeons le classificateur en cascade pour classer les faces mentionnées ci-dessus. si

OpenCV(4.2.0) /Users/travis/build/skvark/opencv-python/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

Si vous voyez un message comme celui-ci, vous n'avez probablement pas le fichier xml pour le classificateur Cascade, alors téléchargez-le (ou clonez) à partir de: https://github.com/opencv/opencv

Après le téléchargement, placez le dossier data / haarcascades dans le même dossier que votre fichier python (ou ipynb) et exécutez-le.

Dessin rectangulaire

python


for (x,y,w,h) in faces:
    #Dessinez un rectangle à la position du visage
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),10)

La position du visage est sortie sous la forme (x, y, largeur, hauteur). Cela ressemble à ceci: スクリーンショット 2020-03-24 17.44.01.png

Les arguments de cv2.reactangle sont les suivants. cv2.reactangle (image, (supérieur gauche x, supérieur gauche y), (inférieur droit x, inférieur droit y), (couleur), épaisseur de ligne) スクリーンショット 2020-03-24 17.47.45.png

À la fin

Le classificateur en cascade peut détecter non seulement le visage, mais également le corps, le bas du corps et les chats. J'aimerais bientôt écrire cet article. Si vous avez des commentaires ou des erreurs concernant l'article, veuillez commenter.

Twitter Je l'envoie également sur Twitter. S'il vous plaît suivez-moi si vous aimez ...! https://twitter.com/ryuji33722052

Recommended Posts

[Python] Détection de visage par OpenCV (Haar Cascade)
Détection de visage avec Python + OpenCV
Détection de visage avec Python + OpenCV (rotation invariante)
Hello World et détection de visage avec OpenCV 4.3 + Python
Détection de visage avec Python + dlib
[Ubuntu] [Python] Comparaison de la détection de visage entre dlib et OpenCV
Résumé de la détection de visage en Python
Détection de visage avec Haar Cascades
Détection de visage d'anime avec OpenCV
Améliorez rapidement la précision de détection en spécifiant les paramètres avec la détection de visage openCV
Détection de visage avec Lambda (Python) + Rekognition
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Détection de visage à l'aide d'un classificateur en cascade
Enregistrer la vidéo image par image avec Python OpenCV
Détection de visage Dlib et compteur de clignotements par Python
Détection de visage en collectant des images d'Angers.
[python, openCV] base64 Reconnaissance faciale dans les images
Python2.7 + CentOS7 + OpenCV3
Comparaison des performances du détecteur de visage avec Python + OpenCV
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Exemples OpenCV (Python)
[Remarque] openCV + python
Redimensionner, mosaïque, détection de visage avec OpenCV, parfois tampon d'éléphant
Génération d'images JPEG en spécifiant la qualité avec Python + OpenCV
Jugement des nombres premiers par Python
installation de python openCV (mémo)
Mémo de visualisation par Python
Traitement de la communication par Python
Binarisation avec OpenCV / Python
Résumé sur Python3 + OpenCV3
Introduction à OpenCV (python) - (2)
Liste des API Python pour OpenCV3
Mémo du didacticiel Python OpenCV
Réponse de Beamformer par python
Capture de caméra Python, OpenCV
OpenCV pour les débutants en Python
Reconnaissance faciale en temps réel avec vidéo acquise par getUserMedia [HTML5, openCV]
Un mémo lorsque le visage est détecté avec Python + OpenCV rapidement
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
Découpez une image d'une vidéo toutes les secondes avec Python + OpenCV