Gesichtserkennung mit Python + OpenCV (invariante Rotation)

Gesichtserkennung mit Python + OpenCV (invariante Rotation)

Gesichtserkennung beim Drehen des Bildes Ich habe den besten Winkel nicht eingestellt Falls erforderlich, beziehen Sie sich auf Folgendes

Einfache Gesichtserkennungs-API mit Heroku + OpenCV

Face Detection using Haar Cascades

Ich möchte, dass Sie den Filter anstelle des Eingabebildes drehen und automatisch erkennen ...

Anpassungspunkt

Es mag für Leute, die an Bildverarbeitung gewöhnt sind, natürlich sein, aber da ich es kaum getan habe, bin ich ziemlich süchtig danach.

Die Reihenfolge kann beim Erfassen / Festlegen der Höhe und Breite des Bildes unterschiedlich sein.

--shape… Höhe (Zeilen), Breite (Spalten) --Slice nach Index ... [Untere Höhe (y): Obere Höhengrenze (y + h), Untere Breitengrenze (x): Obere Breitengrenze (x + w)] --OpenCV-Koordinatenspezifikation (Mittelpunkt usw.) ... (horizontal (x), vertikal (y))

Im Koordinatensystem der Anzeige ist die y-Achse nach unten gerichtet, der Winkel jedoch gegen den Uhrzeigersinn. Wenn also die normale y-Achse in das Koordinatensystem nach oben konvertiert wird, dreht sie sich im Uhrzeigersinn.

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

Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Gesichtserkennung mit Python + OpenCV
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Gesichtserkennung mit Python + dlib
Anime-Gesichtserkennung mit OpenCV
Gesichtserkennung mit YOLO Face (Windows10, Python3.6)
Gesichtserkennung mit Lambda (Python) + Erkennung
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Machen Sie die Rotation der OpenCV-Objekterkennung unveränderlich
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
[Python] Gesichtserkennung durch OpenCV (Haar Cascade)
[python, openCV] base64 Gesichtserkennung in Bildern
Binarisierung mit OpenCV / Python
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel
Gesichtserkennung mit OpenCV von Python
"Apple-Verarbeitung" mit OpenCV3 + Python3
Versuchen Sie die Kantenerkennung mit OpenCV
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
[Python] Verwenden von OpenCV mit Python (Basic)
Echtzeit-Kantenerkennung mit OpenCV
[Ubuntu] [Python] Vergleich der Gesichtserkennung zwischen dlib und OpenCV
Zusammenfassung der Gesichtserkennung in Python
Gesichtserkennung / Schneiden mit OpenCV
Erkennung von Blockchain-Manipulationen mit Python
Versuchen Sie die Gesichtserkennung mit Python
Gesichtserkennung mit Haar Cascades
Verwenden von OpenCV mit Python @Mac
Verbessern Sie schnell die Erkennungsgenauigkeit, indem Sie Parameter mit openCV-Gesichtserkennung angeben
Ein Memo, wenn mit Python + OpenCV schnell ein Gesicht erkannt wird
Leuchtendes Leben mit Python und OpenCV
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
Einfache Python + OpenCV-Programmierung mit Canopy
[OpenCV] Persönliche Identifikation mit Gesichtsfoto
Ich habe versucht, das Gesicht mit MTCNN zu erkennen
OpenCV-Funktionserkennung mit Google Colaboratory
Laden Sie das GIF-Bild mit Python + OpenCV
Katzenerkennung mit OpenCV (Modellverteilung)
Finden Sie Bildähnlichkeit mit Python + OpenCV
Verwenden Sie OpenCV mit Python 3 in Window
Zeichnen Sie eine Illustration mit Python + OpenCV
Verfolgen Sie Baseballbälle mit Python + OpenCV
Graphbasierte Segmentierung mit Python + OpenCV
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Zeichnen Sie einen Pfeil (Vektor) mit opencv / python
Grundlegendes Studium von OpenCV mit Python
Zeichnen Sie eine Aquarellillusion mit Kantenerkennung in Python3 und openCV3
Hallo Welt- und Gesichtserkennung mit opencv-python 4.2
Speichern Sie Videos Frame für Frame mit Python OpenCV
Dlib-Gesichtserkennung und Blinkzähler von Python
Bilder mit Pupil, Python und OpenCV aufnehmen
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildaufnahme von der Kamera mit Python + OpenCV
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
[Python] Bilder mit OpenCV lesen (für Anfänger)