Gesichtserkennung mit OpenCV von Python

Überblick

Dieser Artikel richtet sich an Personen, die Gesichter mit OpenCV of Python erkennen möchten. In diesem Artikel werde ich erklären, wie man ein Gesicht aus einem Bild, einem Kamerabild, einer MP4-Datei erkennt und wie man nur das Gesicht aus dem Bild schneidet und speichert.

Umgebung

macOS Catalina 10.15.4 Python 3.7.5 opencv-python 4.2.0.34 numpy 1.18.2

OpenCV-Installation

$ pip install opencv-python

Verzeichnisaufbau

.
├── cascades
│  └── haarcascade_frontalface_default.xml
├── image_detect.py
├── images
│  └── 001.jpg
├── trimmed
└── venv

Die Verzeichnisstruktur ist wie folgt. Der Detektor für die Gesichtserkennung im Ordner cascades befindet sich in lib / python3.7 / site-packages / cv2 / data in dem Verzeichnis, in dem Python installiert ist, oder im Verzeichnis der virtuellen Umgebung.

Erkennen Sie ein Gesicht und schließen Sie es in ein Rechteck ein

Vom Bild erkannt

`` image_detect.py`


import cv2

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/001.jpg "
color = (255, 255, 255) #Die Farbe des Quadrats, das das erkannte Gesicht umgibt

src = cv2.imread(img_path,0)
gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
rect = cascade.detectMultiScale(gray)
if len(rect) > 0:
    for x, y, w, h in rect:
        cv2.rectangle(src, (x, y), (x+w, y+h), color)

cv2.imshow('detected', src)
cv2.waitKey(0)
cv2.destroyAllWindows()


x, y, w, h entsprechen der x-Koordinate oben links im Gesicht, der y-Koordinate oben links im Gesicht, der Breite des Gesichts und der Höhe des Gesichts. Obwohl nicht auf OpenCV beschränkt, befindet sich der Ursprung der xy-Koordinaten oben links im Bild.

Vom Kamerabild erkannt

`` image_detect.py`


import cv2

cascade_path = "./cascades/haarcascade_frontalface_default.xml"
cascade = cv2.CascadeClassifier(cascade_path)
color = (255, 255, 255) #Die Farbe des Quadrats, das das erkannte Gesicht umgibt
cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    rect = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=2, minSize=(30, 30))
    if len(rect) > 0:
        for x, y, w, h in rect:
            cv2.rectangle(frame, (x, y), (x+w, y+h), color)
    cv2.imshow('detected', frame)
    key = cv2.waitKey(1)
    if key == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Sie können das Kamerabild abrufen, indem Sie das Argument von cv2.VideoCapture () auf die Gerätenummer der Kamera setzen. Sie können die Videodatei jedoch auch verarbeiten, indem Sie den Pfad zur mp4-Datei eingeben.

Gesichter erkennen, trimmen und speichern

Wenn es nur ein Bild gibt

`` image_detect.py`


import cv2

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/001.jpg "
out_path = "./trimmed/"


src = cv2.imread(img_path,0)
gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
cascade = cv2.CascadeClassifier(cascade_path)
rect = cascade.detectMultiScale(gray)
if len(rect) > 0:
    for i,[x, y, w, h] in enumerate(rect):
        img_trimmed = src[y:y + h, x:x + w]
        file_name = "{}.jpg ".format(i)
        file_path = out_path + file_name
        cv2.imwrite(file_path, img_trimmed)

Sie können die Anzahl der Schleifen und den Inhalt von rect gleichzeitig abrufen, indem Sie in der for-Anweisung enumerate verwenden. Beim Schneiden als Scheibe herausnehmen.

Wenn Sie mehrere Bilder gleichzeitig erkennen möchten

`` image_detect.py`


import cv2
import os

cascade_path =  "./cascades/haarcascade_frontalface_default.xml"
img_path = "./images/"
out_path = "./trimmed/"

files = os.listdir(img_path)
cascade = cv2.CascadeClassifier(cascade_path)

for file in files:
    src = cv2.imread(img_path+file,0)
    gray = cv2.cvtColor(src,cv2.cv2.COLOR_BAYER_BG2GRAY)
    rect = cascade.detectMultiScale(gray)
    if len(rect) > 0:
        for i,[x, y, w, h] in enumerate(rect):
            img_trimmed = src[y:y + h, x:x + w]
            file_name = "{}_{}".format(i,file)
            file_path = out_path + file_name
            cv2.imwrite(file_path, img_trimmed)

Wenn Sie das Bild, das Sie zuschneiden möchten, in den Bilderordner legen und ausführen, wird es im zugeschnittenen Ordner im Format "{Gesichtsindexnummer} _ {ursprünglicher Dateiname}" gespeichert.

Zusammenfassung

OpenCV ist praktisch

Recommended Posts

Gesichtserkennung mit OpenCV von Python
Gesichtserkennung / Schneiden mit OpenCV
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Gesichtserkennung mit Edison
[python, openCV] base64 Gesichtserkennung in Bildern
Gesichtserkennung durch Amazon Rekognition
Gesichtserkennung mit Python + OpenCV
Versuchen Sie die Gesichtserkennung mit Python
Bilderkennung mit Keras + OpenCV
Anime-Gesichtserkennung mit OpenCV
[OpenCV] Persönliche Identifikation mit Gesichtsfoto
Erste Anime-Gesichtserkennung mit Chainer
Schneiden Sie das Gesicht mit Python + OpenCV aus
Objekterkennung mit openCV durch traincascade
Gesichtserkennung in Echtzeit mit von getUserMedia [HTML5, openCV] aufgenommenem Video
Gesichtserkennung mit OpenCV (Haar-like Feature Classifier)
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
Gesichtserkennung von Anime-Charakteren mit Keras
Serverlose Gesichtserkennungs-API mit Python
ZOOM, indem Sie Ihr Gesicht durch ein Twitter-Symbol mit openCV-Gesichtserkennung ersetzen
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Leistungsvergleich des Gesichtsdetektors mit Python + OpenCV
[Python3] [Ubuntu16] [Docker] Versuchen Sie die Gesichtserkennung mit OpenFace
Größenänderung, Mosaik, Gesichtserkennung mit OpenCV, manchmal Elefantenstempel
Katze zurück mit OpenCV erkennen
Binarisierung mit OpenCV / Python
Bilderkennung mit Keras
Sprites mit OpenCV drehen
Datenerweiterung mit openCV
Einfache TopView mit OpenCV
Stolpern Sie mit opencv3 von Homebrew
Versuchen wir nun die Gesichtserkennung mit Chainer (Vorhersagephase).
Einfacher Gesichtserkennungsversuch mit Jetson Nano und Webkamera
Versuchen wir nun die Gesichtserkennung mit Chainer (Lernphase)
Verbessern Sie schnell die Erkennungsgenauigkeit, indem Sie Parameter mit openCV-Gesichtserkennung angeben
"Apple-Verarbeitung" mit OpenCV3 + Python3
Versuchen Sie die Kantenerkennung mit OpenCV
Implementieren Sie Unterbefehle mit Pythons Argparse
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
[Python] Verwenden von OpenCV mit Python (Basic)
Ein Memo, wenn mit Python + OpenCV schnell ein Gesicht erkannt wird
Gesichtserkennung mit Python + dlib
Binarisieren Sie Fotodaten mit OpenCV
Loop-Video-Laden mit opencv
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Echtzeit-Kantenerkennung mit OpenCV
Objekt-Co-Lokalisierung zur Gesichtserkennung
Holen Sie sich Bildfunktionen mit OpenCV
Gesichtserkennung mit Haar Cascades
Probieren Sie OpenCV mit Google Colaboratory aus
Erstellung eines Kaskadenklassifikators mit opencv
Verwenden von OpenCV mit Python @Mac
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Zahlenerkennung in Bildern mit Python