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.
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. 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) 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? 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. 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
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).
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
C'est reconnu correctement! Ensuite, je n'expliquerai que les points du code.
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.
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:
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)
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