[PYTHON] Reconnaissance faciale / coupe avec OpenCV

introduction

J'ai modifié le code qui reconnaît le visage dans l'image et l'enferme dans un cadre carré, et créé un code qui se découpe sous forme de fichier.

Importation de bibliothèque

Importez des bibliothèques telles que OpenCV et Pillow.

import os
import subprocess
from PIL import Image
import cv2 as cv

dir0 = 'org' 
dir1 = 'png'
dir2 = 'png_resize'
dir3 = 'face'

Préparation d'image

Placez l'image d'origine (jpg, taille 500 x 334px) dans le dossier de l'organisation. Convertissez-le en fichier png, ajustez la largeur de la taille à 600px et stockez-le dans le dossier png_resize.

files0 = os.listdir(dir0)
files0.sort()

for file in files0:

    if '.jpg'  in file:        
        command = 'sips --setProperty format png ' + dir0 +'/' + file +  ' --out ' + dir1 +'/' +  file.replace('.jpg','.png') 
        subprocess.call(command, shell=True)
        print(file) 

files1 = os.listdir(dir1)
files1.sort()

# aaa.jpg  

for file in files1:   
    if '.png' in file:   
        img0 = os.path.join(dir1, file)
        img0_img = Image.open(img0)
        h = img0_img.height
        w = img0_img.width
        img1_img = img0_img.resize((600,round(600*h/w)))
        img1 = os.path.join(dir2, file) 
        img1_img.save(img1)
        print(file) 

# aaa.png

files2 = os.listdir(dir2)
files2.sort()    

aaa.png

Classificateur de visage installé

Les classificateurs de visage sont disponibles sur ici.

face_cascade = cv.CascadeClassifier('haarcascade_frontalface_default.xml')
#face_cascade = cv.CascadeClassifier('haarcascade_profileface.xml')

Exécution du classificateur de visage, découpe de l'image du visage

Découpez l'image du visage. La plage de coupure est 10px plus large vers le haut, le bas, la gauche et la droite que la plage de détection.

for file in files2:
    if '.png' in file:
        dirfile = os.path.join(dir2, file) 
        img = cv.imread(dirfile)
        gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
        
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
        
        for (x,y,w,h) in faces:
            face = img[y-10:y+h+10, x-10:x+w+10]
            face_name = str(file.strip('.png'))+'_'+str(x)+'_'+str(y)+'.png'
            dirface = os.path.join(dir3,face_name)
            facefile = cv.imwrite(dirface, face) 
            #cv.rectangle(img,(x-10,y-10),(x+w+10,y+h+10),(255,0,0),2)
            print(face_name)  

# aaa_152_22.png
# aaa_11_70.png
# aaa_438_41.png
# aaa_79_106.png
# aaa_385_140.png
# aaa_190_175.png
# aaa_269_171.png
# aaa_76_206.png
# aaa_527_257.png
# aaa_91_277.png
# aaa_254_330.png
# aaa_446_348.png  

Un total de 12 images de visage ont été découpées à partir des images ci-dessus. Si vous pouvez voir la majeure partie du visage, vous savez que vous avez réussi à découper.

aaa_91_277.pngaaa_79_106.pngaaa_76_206.pngaaa_527_257.pngaaa_446_348.pngaaa_438_41.png aaa_385_140.pngaaa_269_171.pngaaa_254_330.pngaaa_190_175.pngaaa_152_22.pngaaa_11_70.png

À la fin

Il semble qu'il puisse être utilisé lors de la création d'une liste avec une photo d'une photo de groupe. Il serait pratique pour quiconque d'utiliser le classificateur entraîné s'il était publié sous forme de fichier en cascade.

référence

https://docs.opencv.org/4.1.0/d7/d8b/tutorial_py_face_detection.html https://github.com/opencv/opencv/tree/master/data/haarcascades

Recommended Posts

Reconnaissance faciale / coupe avec OpenCV
Reconnaissance faciale avec OpenCV de Python
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
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]
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
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
É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
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)
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!
Briller la vie avec Python et OpenCV
Principes de base du traitement d'image en temps réel avec opencv
Détection de visage avec YOLO Face (Windows10, Python3.6)
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Réseau neuronal avec OpenCV 3 et Python 3
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
Détection de visage avec Lambda (Python) + Rekognition
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Effacez des couleurs spécifiques avec OpenCV + PySimpleGUI
Présentation d'OpenCV sur Mac avec homebrew