Détection de visage avec Python + OpenCV (rotation invariante)

Détection de visage avec Python + OpenCV (rotation invariante)

Détection de visage lors de la rotation de l'image Je n'ai pas réglé le meilleur angle, etc. Si nécessaire, reportez-vous aux

API de détection de visage simple avec Heroku + OpenCV

Face Detection using Haar Cascades

Je veux que vous fassiez pivoter le filtre au lieu de l'image d'entrée et que vous le détectiez automatiquement ...

Point de montage

Cela peut être naturel pour les personnes habituées au traitement d'image, mais comme je ne l'ai presque pas fait, j'en suis assez accro.

L'ordre peut être différent lors de l'acquisition / spécification de la hauteur et de la largeur de l'image.

--forme… hauteur (lignes), largeur (colonnes) --Slice by index ... [Hauteur inférieure (y): Limite supérieure de hauteur (y + h), Limite inférieure de largeur (x): Limite supérieure de largeur (x + l)]

Dans le système de coordonnées de l'affichage, l'axe y est vers le bas, mais l'angle est dans le sens antihoraire, donc lorsque l'axe y normal est converti en système de coordonnées ascendant, il tourne dans le sens des aiguilles d'une montre.

code

face_rotate_detect.py


# -*- coding: utf-8 -*-

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import cv2, os, sys, imghdr, shutil, math
import numpy as np

CWD = os.getcwd()
DIR_ORIGIN = CWD + '/images/'
DIR_DESTINATION = CWD + '/faces/'

classifier = cv2.CascadeClassifier('{python_dir}/{classifier_dir}/haarcascade_frontalface_alt2.xml'.format(
    python_dir = os.path.split(sys.executable)[0],
    classifier_dir = '../share/OpenCV/haarcascades',
))

def getFaces(path_full):
    results = []
    image = cv2.imread(path_full)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    rows, cols, colors = image.shape
    center = tuple(np.array([cols, rows]))
    # get rotations
    for angle in range(-90, 91, 5):
        radian = np.deg2rad(angle)
        output_height = int(np.absolute(cols * np.sin(radian)) + np.absolute(rows * np.cos(radian)))
        output_width = int(np.absolute(cols * np.cos(radian)) + np.absolute(rows * np.sin(radian)))
        output_size = tuple(np.array([output_width, output_height]))
        # rotate
        Matrix = cv2.getRotationMatrix2D(center, degree, 1.0)
        # translate
        Matrix[0, 2] += (output_width - width) * 0.5
        Matrix[1, 2] += (output_height - height) * 0.5
        # warp affine
        rotated = cv2.warpAffine(gray, Matrix, output_size, flags = cv2.INTER_LINEAR)
        # detect faces
        faces = classifier.detectMultiScale(rotated)
        if len(faces):
            rotated_color = cv2.warpAffine(image, Matrix, output_size, flags = cv2.INTER_LINEAR)
            for x, y, w, h in faces:
                results.append(rotated_color[y : y + h, x : x + w])
    return results

def saveFaces(faces):
    global count

    for face in faces:
        cv2.imwrite(
            '{dir_destination}{count}.jpg'.format(dir_destination = DIR_DESTINATION, count = count),
            face,
            [cv2.IMWRITE_JPEG_QUALITY, 100]
        )
        count += 1

count = 1
for path, subdirs, files in os.walk(DIR_ORIGIN):
    for name in files:
        path_full = os.path.join(path, name)
        if imghdr.what(path_full) in ['jpeg']:
            saveFaces(getFaces(path_full))
            print(path_full)

Recommended Posts

Détection de visage avec Python + OpenCV (rotation invariante)
Détection de visage avec Python + OpenCV
Hello World et détection de visage avec OpenCV 4.3 + Python
Détection de visage avec Python + dlib
Détection de visage d'anime avec OpenCV
Détection de visage avec YOLO Face (Windows10, Python3.6)
Détection de visage avec Lambda (Python) + Rekognition
[Python] Utilisation d'OpenCV avec Python (détection des bords)
Rendre la rotation de détection d'objets OpenCV invariante
Essayez la reconnaissance faciale avec python + OpenCV
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
[Python] Détection de visage par OpenCV (Haar Cascade)
[python, openCV] base64 Reconnaissance faciale dans les images
Binarisation avec OpenCV / Python
Comparaison des performances du détecteur de visage avec Python + OpenCV
Redimensionner, mosaïque, détection de visage avec OpenCV, parfois tampon d'éléphant
Reconnaissance faciale avec OpenCV de Python
"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
[Python] Utilisation d'OpenCV avec Python (basique)
Détection des bords en temps réel avec OpenCV
[Ubuntu] [Python] Comparaison de la détection de visage entre dlib et OpenCV
Résumé de la détection de visage en Python
Reconnaissance faciale / coupe avec OpenCV
Détection de falsification de la blockchain avec Python
Essayez la reconnaissance faciale avec Python
Détection de visage avec Haar Cascades
Utiliser OpenCV avec Python @Mac
Améliorez rapidement la précision de détection en spécifiant les paramètres avec la détection de visage openCV
Un mémo lorsque le visage est détecté avec Python + OpenCV rapidement
Briller la vie avec Python et OpenCV
[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)
Programmation facile Python + OpenCV avec Canopy
[OpenCV] Identification personnelle avec photo du visage
J'ai essayé la détection de visage avec MTCNN
Détection des fonctionnalités OpenCV avec Google Colaboratory
Charger une image gif avec Python + OpenCV
Détection de chat avec OpenCV (distribution de modèles)
Trouver la similitude d'image avec Python + OpenCV
Utiliser OpenCV avec Python 3 dans Window
Dessinez une illustration avec Python + OpenCV
Suivre les balles de baseball avec Python + OpenCV
Segmentation basée sur un graphique avec Python + OpenCV
J'ai essayé la reconnaissance faciale avec OpenCV
Dessinez une flèche (vecteur) avec opencv / python
Etude de base d'OpenCV avec Python
Dessinez une illusion d'aquarelle avec détection des contours en Python3 et openCV3
Hello World et détection de visage avec opencv-python 4.2
Enregistrer la vidéo image par image avec Python OpenCV
Détection de visage Dlib et compteur de clignotements par Python
Capturer des images avec Pupil, python et OpenCV
J'ai essayé le rendu non réaliste avec Python + opencv
Traitement d'image avec Python et OpenCV [Tone Curve]
Acquisition d'images depuis une caméra avec Python + OpenCV
Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop
[Python] Lire des images avec OpenCV (pour les débutants)