On m'a demandé "Vous ne pouvez pas faire la reconnaissance faciale rapidement?", Alors j'ai essayé. Je ne peux pas faire de réglage fin.
C'est assez facile sur un Mac. Installez OpenCV en utilisant brew. python utilise ce que j'ai mis dans brew. Il semble que numpy soit également nécessaire, mais il est omis car il était déjà installé. Apparemment, lors de l'installation d'OpenCV, le package cv2 pour Python est copié dans site-package, donc l'ordre d'installation est Python → numpy → OpenCV.
bash
brew tap homebrew/science
brew install opencv
Pour le moment, exposez d'abord le code. J'ai décidé de laisser les commentaires lorsque je l'ai utilisé pour des essais et des erreurs, même s'il était sale. J'ai laissé l'explication pour le réglage des paramètres, mais www
recognize.py
# -*- coding: utf-8 -*-
import cv2
#Caractéristiques pour la détection de visage du classificateur HAAR
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml"
cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml"
#cascade_path = "/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt_tree.xml"
image_path = "lena.jpg "
color = (255, 255, 255) #blanc
#color = (0, 0, 0) #noir
#Lecture de fichiers
image = cv2.imread(image_path)
#Conversion de l'échelle de gris
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
#Acquérir la quantité de caractéristiques du classificateur en cascade
cascade = cv2.CascadeClassifier(cascade_path)
#Exécution de la reconnaissance d'objets (reconnaissance faciale)
#image – CV_Matrice de type 8U. Les objets sont détectés dans les images stockées ici
#objets - Un vecteur dont les éléments sont des rectangles. Chaque rectangle contient l'objet détecté
#scaleFactor - Représente la quantité de réduction à chaque échelle d'image
#minNeighbors - Les rectangles candidats doivent contenir au moins ce nombre de voisins
#flags - Ce paramètre n'est pas utilisé dans la nouvelle cascade. Pour les cascades plus anciennes, il a la même signification que pour la fonction cvHaarDetectObjects.
#minSize - La taille minimale qu'un objet peut prendre. Les objets plus petits seront ignorés
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
#facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=3, minSize=(10, 10), flags = cv2.cv.CV_HAAR_SCALE_IMAGE)
print "face rectangle"
print facerect
if len(facerect) > 0:
#Créez un rectangle qui entoure le visage détecté
for rect in facerect:
cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)
#Enregistrer les résultats de la reconnaissance
cv2.imwrite("detected.jpg ", image)
Comme nous n'avons pas préparé d'image pour l'apprentissage cette fois, nous utilisons la quantité de fonctionnalités du classificateur HAAR fourni avec OpenCV. Voir ici pour le classificateur HAAR ([10e CV Study Group OpenCV Festival Explanation of Object Detection!](Http://www.slideshare.net/takmin/opecv-object-detectiontakmin opencv)). Je pouvais reconnaître n'importe quelle quantité de fonctionnalités dans la célèbre image de Lena, mais quand je l'ai essayé avec d'autres images, haarcascade_frontalface_default.xml ne pouvait pas être très bien reconnu, il est donc préférable d'essayer diverses choses.
Image originale
Image après reconnaissance
Recommended Posts