Essayez la reconnaissance faciale avec Python

Lorsque je lisais le document en diagonale tout en étudiant le traitement d'image avec Python + OpenCV, il y avait Tutoriel sur la reconnaissance faciale. C'est une technologie qui semble m'aider à me souvenir des visages des gens de nos jours.

Reconnaissance faciale avec Haar Cascades

Je ne connais pas grand-chose à l'apprentissage automatique ici, mais pour le dire simplement, je m'entraîne pour être capable de distinguer les visages des fonctionnalités Haar en utilisant des images sans visage et des images de visage. En conséquence, des données d'identification sont produites, mais comme méthode pour utiliser efficacement les données d'identification pour l'identification, un classificateur Cascade a été conçu et semble être inclus dans la distribution OpenCV.

Pour Mac Anaconda, il se trouve dans "anaconda3 / share / OpenCV / haarcascades", et pour la version Windows Anaconda, il se trouve dans "Anaconda3 \ Library \ etc \ haarcascades".

--haarcascade_eye.xml ... Reconnaissance oculaire --haarcascade_frontalface_default.xml ... Reconnaissance faciale --haarcascade_smile.xml ... Reconnaissance de sourire

Pour le moment, j'en ai fait une copie. Alors, rendez-le utilisable comme classificateur.

face_cascade = cv2.CascadeClassifier(‘haarcascades/haarcascade_frontalface_default.xml’)

Ensuite, lisez le fichier image. cv2.imread () lit en mode échelle de gris lorsque 0 est spécifié dans le deuxième argument, mais sans utiliser cette fonction, après avoir lu en couleur comme img, utilisez cv2.cvtColor () Faites convertir une copie en échelle de gris. En effet, la reconnaissance faciale est effectuée à l'aide d'une image en échelle de gris et une image en couleur est affichée.

img = cv2.imread(file)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Trouvez le visage dans l'image et renvoyez les coordonnées de la position du visage. Une seule ligne, car vous n'utilisez que le classificateur basé sur les données d'identification déjà entraînées.

faces = face_cascade.detectMultiScale(gray, 1.3, 5)

Le visage est recherché dans l'image en échelle de gris (gris), mais un rectangle entourant le visage est dessiné dans l'image couleur d'origine (img) en fonction de la position des coordonnées du visage.

for (x, y, w, h) in faces:
    cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)

x et y indiquent respectivement les coordonnées x et y du coin supérieur gauche du rectangle et w et h indiquent respectivement la largeur et la hauteur, mais lors du dessin d'un rectangle dans l'image (img) avec OpenCV, le coin supérieur gauche Puisque les coordonnées x, y et les coordonnées x, y de l'angle inférieur droit sont respectivement requises, elles sont spécifiées comme (x, y), (x + w, y + h).

plt.imshow( cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.show()

L'image avec le rectangle écrit à la fin est affichée, mais pour une raison quelconque, l'image couleur lue par imread () d'OpenCV contient les données dans l'ordre de BGR, mais cette fois, dans le pyplot de matplotlib utilisé pour l'affichage de l'image Comme il est supposé que les données sont conservées dans l'ordre RVB, lors de la transmission des données à plt.imshow (), elles sont converties par cv2.cvtColor (img, cv2.COLOR_BGR2RGB).

Au fait, il est normal d'avoir plusieurs visages, donc je le reçois comme pour (x, y, w, h) dans les visages:, mais les droits d'auteur et de portrait sont parfaits. Je n'ai pas quelque chose comme ça, donc je ne peux pas l'essayer.

import os
import cv2
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

def facedetect(file):
    face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')
    img = cv2.imread(file)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2)
    plt.imshow( cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.show()
    
if __name__ == '__main__':
    lenna = "4.2.04.tiff"
    if os.path.exists(lenna):
        facedetect(lenna)

20160901001.jpg

Peut également reconnaître les yeux

Tutoriel contient également un exemple de reconnaissance oculaire après reconnaissance faciale. S'il y a un visage, il y a un œil, et il n'y a pas d'œil ailleurs que le visage, il est donc conçu pour exécuter la reconnaissance oculaire dans le rectangle qui a reconnu le visage.

faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in 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)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

Le problème est que je ne connais rien des "classificateurs Cascade basés sur les fonctionnalités de Haar" et je ne comprends pas du tout l'explication des arguments de la méthode detectMultiScale (). Cela dit, c'est facile et génial.

Maintenant, si vous voulez également identifier quelque chose à partir de l'image, vous devez créer correctement ce classificateur Cascade, mais c'est une autre histoire.

Ce code

Recommended Posts

Essayez la reconnaissance faciale avec Python
Essayez la reconnaissance faciale avec python + OpenCV
[Python3] [Ubuntu16] [Docker] Essayez la reconnaissance faciale avec OpenFace
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Essayez de gratter avec Python.
[python, openCV] base64 Reconnaissance faciale dans les images
API de reconnaissance faciale sans serveur conçue avec Python
Reconnaissance faciale avec OpenCV de Python
Essayez la sortie Python avec Haxe 3.2
Reconnaissance faciale par Amazon Rekognition
Détection de visage avec Python + dlib
Détection de visage avec Python + OpenCV
Essayez d'exécuter Python avec Try Jupyter
Reconnaissance faciale / coupe avec OpenCV
Essayez Python
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)
Reconnaissance des nombres dans les images avec Python
Essayez de gratter avec Python + Beautiful Soup
Détection de visage avec YOLO Face (Windows10, Python3.6)
Essayez d'exploiter Facebook avec Python
Détection de visage avec Lambda (Python) + Rekognition
Essayez la décomposition de valeurs singulières avec Python
Première reconnaissance faciale d'anime avec Chainer
Découpez le visage avec Python + OpenCV
Essayez la simulation de contrôle de fréquence avec Python
J'ai essayé la reconnaissance faciale avec OpenCV
Détection de visage avec Python + OpenCV (rotation invariante)
FizzBuzz en Python3
Essayez de reproduire un film couleur avec Python
Grattage avec Python
Essayez de vous connecter à qiita avec Python
Reconnaissance vocale en anglais avec python [speech to text]
Essayez une formule utilisant Σ avec python
Grattage avec Python
Python avec Go
Twilio avec Python
Intégrer avec Python
Introduction facile de la reconnaissance vocale avec Python
Essayez d'utiliser Python avec Google Cloud Functions
Jouez avec 2016-Python
Reconnaissance faciale des personnages d'anime avec Keras
Python> essayez: / sauf:
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Essayez rapidement l'API Face de Microsoft en Python
Essayez le scraping HTML avec la bibliothèque Python
Bingo avec python
Essayez d'appeler Python depuis Ruby avec une économie
Zundokokiyoshi avec python
Essayez de dessiner une carte avec python + cartopy 0.18.0
[Suite] Essayez l'accès au registre PLC avec Python
Essayez d'attribuer ou de changer avec Python: lambda
Excel avec Python
[Pour les débutants] Essayez le web scraping avec Python
Micro-ordinateur avec Python
Cast avec python