Versuchen Sie die Gesichtserkennung mit Python

Als ich das Dokument diagonal las, während ich die Bildverarbeitung mit Python + OpenCV untersuchte, gab es Tutorial zur Gesichtserkennung. Es ist eine Technologie, die mir zu helfen scheint, die sich heutzutage nicht mehr an die Gesichter der Menschen erinnern kann.

Gesichtserkennung mit Haar Cascades

Ich weiß nicht viel über maschinelles Lernen hier, aber um es einfach auszudrücken, ich trainiere, um Gesichter von Haar-Merkmalen anhand von Nicht-Gesichtsbildern und Gesichtsbildern unterscheiden zu können. Infolgedessen werden Identifikationsdaten erzeugt, aber als Methode zur effizienten Verwendung der Identifikationsdaten zur Identifikation wurde ein Cascade-Klassifikator entwickelt, der in der OpenCV-Distribution enthalten zu sein scheint.

Im Fall von Mac Anaconda befindet es sich in "anaconda3 / share / OpenCV / haarcascades" und im Fall der Windows-Version Anaconda in "Anaconda3 \ Library \ etc \ haarcascades".

--haarcascade_eye.xml ... Augenerkennung --haarcascade_frontalface_default.xml ... Gesichtserkennung --haarcascade_smile.xml ... Lächelnerkennung

Vorerst habe ich eine Kopie davon gemacht. Machen Sie es also als Klassifikator verwendbar.

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

Lesen Sie als nächstes die Bilddatei. cv2.imread () liest im Graustufenmodus, wenn im zweiten Argument 0 angegeben ist, aber ohne diese Funktion zu verwenden, verwenden Sie nach dem Einlesen der Farbe als img cv2.cvtColor () Lassen Sie eine Kopie in Graustufen konvertieren. Dies liegt daran, dass die Gesichtserkennung unter Verwendung eines Graustufenbilds durchgeführt wird und ein Farbbild angezeigt wird.

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

Suchen Sie das Gesicht im Bild und geben Sie die Koordinaten der Position des Gesichts zurück. Nur eine Zeile, da Sie nur den Klassifikator verwenden, der auf den bereits trainierten Identifikationsdaten basiert.

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

Das Gesicht wird im konvertierten Graustufenbild (grau) gesucht, aber ein das Gesicht umgebendes Rechteck wird im ursprünglichen Farbbild (img) basierend auf der Position der Gesichtskoordinaten gezeichnet.

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

x und y geben die x- und y-Koordinaten oben links im Rechteck an, und w und h geben die Breite bzw. Höhe an. Wenn Sie jedoch mit OpenCV ein Rechteck im Bild (img) zeichnen, oben links Da die x-, y-Koordinaten und die x-, y-Koordinaten unten rechts erforderlich sind, werden sie als (x, y), (x + w, y + h) angegeben.

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

Das Bild mit dem am Ende geschriebenen Rechteck wird angezeigt, aber aus irgendeinem Grund enthält das von imread () von OpenCV gelesene Farbbild die Daten in der Reihenfolge BGR, diesmal jedoch im Pyplot von matplotlib, das für die Bildanzeige verwendet wird Da angenommen wird, dass die Daten in der Reihenfolge RGB gespeichert sind, werden sie beim Übergeben der Daten an plt.imshow () von cv2.cvtColor (img, cv2.COLOR_BGR2RGB) konvertiert.

Übrigens ist es in Ordnung, auch wenn es mehrere Gesichter gibt, also erhalte ich es wie für (x, y, w, h) in Gesichtern: aber ein Gruppenfoto mit genau den richtigen Urheber- und Porträtrechten Ich habe so etwas nicht, also kann ich es nicht versuchen.

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

Kann auch Augen erkennen

Tutorial enthält auch ein Beispiel für die Augenerkennung nach der Gesichtserkennung. Wenn es ein Gesicht gibt, gibt es ein Auge, und es gibt kein Auge an einem anderen Ort als dem Gesicht. Daher wurde die Augenerkennung in dem Rechteck ausgeführt, das das Gesicht erkannt hat.

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)

Das Problem ist, dass ich nichts über "Cascade-Klassifizierer basierend auf Haar-Funktionen" weiß und die Erklärung der Argumente der Methode "detectMultiScale ()" überhaupt nicht verstehen kann. Das heißt, es ist einfach und großartig.

Wenn Sie nun auch etwas aus dem Bild identifizieren möchten, müssen Sie diesen Cascade-Klassifikator richtig erstellen, aber das ist eine andere Geschichte.

Dieser Code

Recommended Posts

Versuchen Sie die Gesichtserkennung mit Python
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
[Python3] [Ubuntu16] [Docker] Versuchen Sie die Gesichtserkennung mit OpenFace
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Versuchen Sie es mit Python.
[python, openCV] base64 Gesichtserkennung in Bildern
Serverlose Gesichtserkennungs-API mit Python
Gesichtserkennung mit OpenCV von Python
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Gesichtserkennung durch Amazon Rekognition
Gesichtserkennung mit Python + dlib
Gesichtserkennung mit Python + OpenCV
Versuchen Sie, Python mit Try Jupyter auszuführen
Gesichtserkennung / Schneiden mit OpenCV
Versuchen Sie Python
Versuchen wir nun die Gesichtserkennung mit Chainer (Vorhersagephase).
Einfacher Gesichtserkennungsversuch mit Jetson Nano und Webkamera
Versuchen wir nun die Gesichtserkennung mit Chainer (Lernphase)
Zahlenerkennung in Bildern mit Python
Versuchen Sie es mit Python + Beautiful Soup
Gesichtserkennung mit YOLO Face (Windows10, Python3.6)
Versuchen Sie, Facebook mit Python zu betreiben
Gesichtserkennung mit Lambda (Python) + Erkennung
Versuchen Sie die Singularwertzerlegung mit Python
Erste Anime-Gesichtserkennung mit Chainer
Schneiden Sie das Gesicht mit Python + OpenCV aus
Versuchen Sie die Frequenzsteuerungssimulation mit Python
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
FizzBuzz in Python3
Versuchen Sie, Farbfilme mit Python zu reproduzieren
Scraping mit Python
Versuchen Sie, sich mit Python bei qiita anzumelden
Englische Spracherkennung mit Python [Rede zu Text]
Versuchen Sie eine Formel mit Σ mit Python
Scraping mit Python
Python mit Go
Twilio mit Python
In Python integrieren
Einfache Einführung der Spracherkennung mit Python
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Spielen Sie mit 2016-Python
Gesichtserkennung von Anime-Charakteren mit Keras
Python> try: / außer:
AES256 mit Python
Getestet mit Python
Python beginnt mit ()
mit Syntax (Python)
Probieren Sie schnell die Microsoft Face API in Python aus
Versuchen Sie HTML-Scraping mit der Python-Bibliothek
Bingo mit Python
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Zundokokiyoshi mit Python
Versuchen Sie, eine Karte mit Python + Cartopy 0.18.0 zu zeichnen
[Fortsetzung] Versuchen Sie den Zugriff auf das SPS-Register mit Python
Versuchen Sie, Python: Lambda zuzuweisen oder zu wechseln
Excel mit Python
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Mikrocomputer mit Python
Mit Python besetzen