Erstellen eines Gesichtserkennungsmodells durch tiefes Lernen in Python

Ursprünglicher Autor: Faizan Shaykh
  • Übersetzung
Die Übersetzerin Elena Bornovolokova hat speziell für Netology den Artikel von Fayzan Shaykh über die Erstellung eines Gesichtserkennungsmodells angepasst und erläutert, in welchen Bereichen dies möglich ist.

Einleitung


In den letzten Jahren hat das Computersehen an Popularität gewonnen und zeichnet sich in eine andere Richtung ab. Entwickler erstellen neue Anwendungen, die auf der ganzen Welt verwendet werden.
In dieser Richtung zieht mich das Konzept von Open Source an. Selbst Technologiegiganten sind bereit, neue Entdeckungen und Innovationen mit allen zu teilen, so dass Technologie nicht das Privileg der Reichen bleibt.

Eine dieser Technologien ist die Gesichtserkennung. Bei richtiger und ethischer Anwendung kann diese Technologie in vielen Lebensbereichen eingesetzt werden.

In diesem Artikel werde ich Ihnen zeigen, wie Sie mit Open-Source-Tools einen effizienten Gesichtserkennungsalgorithmus erstellen. Bevor Sie sich diesen Informationen zuwenden, möchte ich, dass Sie sich vorbereiten und von diesem Video inspiriert werden:


Gesichtserkennung: mögliche Anwendungen


Ich werde einige mögliche Anwendungen der Gesichtserkennungstechnologie anführen.

Gesichtserkennung in sozialen Netzwerken . Facebook hat das manuelle Kennzeichnen von Bildern durch automatisch generierte Kennzeichnungsangebote für jedes auf der Plattform hochgeladene Bild ersetzt. Facebook verwendet einen einfachen Gesichtserkennungsalgorithmus, um Pixel in einem Bild zu analysieren und mit relevanten Benutzern zu vergleichen.

Gesichtserkennung in Sicherheit . Ein einfaches Beispiel für die Verwendung der Gesichtserkennungstechnologie zum Schutz persönlicher Daten ist das Entsperren eines Smartphones. Eine solche Technologie kann im Zugangssystem implementiert werden: Eine Person schaut in die Kamera und sie bestimmt, ob sie eintreten darf oder nicht.


Gesichtserkennung, um die Anzahl der Personen zu zählen . Die Gesichtserkennungstechnologie kann verwendet werden, um die Anzahl der Personen zu berechnen, die an einer Veranstaltung (z. B. einer Konferenz oder einem Konzert) teilnehmen. Anstatt die Teilnehmer manuell zu zählen, installieren wir eine Kamera, die die Gesichter der Teilnehmer aufnehmen und die Gesamtzahl der Besucher angeben kann. Dies hilft, den Prozess zu automatisieren und Zeit zu sparen.



System Setup: Hardware- und Softwareanforderungen


Überlegen Sie, wie wir Gesichtserkennungstechnologie einsetzen können, und beziehen Sie sich auf die verfügbaren Open-Source-Tools.

Ich habe die folgenden Tools verwendet, die ich Ihnen empfehle:

  • Webcam (Logitech C920) zum Erstellen eines Gesichtserkennungsmodells in Echtzeit auf einem Lenovo E470 ThinkPad-Laptop (Core i5 7th Gen). Sie können die eingebaute Kamera oder den Camcorder Ihres Laptops auch mit jedem geeigneten System für die Echtzeit-Videoanalyse verwenden, anstatt mit dem verwendeten.
  • Für eine schnellere Videoverarbeitung wird vorzugsweise ein Grafikprozessor verwendet.
  • Wir haben das Betriebssystem Ubuntu 18.04 mit der erforderlichen Software verwendet.

Bevor wir mit der Entwicklung unseres Gesichtserkennungsmodells beginnen, sollten wir uns diese Punkte genauer ansehen.

Schritt 1: Hardware-Setup


Prüfen Sie, ob die Kamera richtig konfiguriert ist. Mit Ubuntu ist das einfach: Prüfen Sie, ob das Gerät vom Betriebssystem erkannt wird. Führen Sie dazu die folgenden Schritte aus:

  1. Überprüfen Sie vor dem Anschließen einer Webcam an einen Laptop alle angeschlossenen Videogeräte, indem Sie die Befehlszeile eingeben ls /dev/video*. Als Ergebnis wird eine Liste aller an das System angeschlossenen Videogeräte angezeigt.
  2. Schließen Sie die Webcam an und setzen Sie den Befehl erneut. Wenn die Webcam korrekt angeschlossen ist, wird das neue Gerät im Ergebnis des Befehls angezeigt.
  3. Sie können die Webcam-Software auch verwenden, um die korrekte Funktion zu überprüfen. In Ubuntu können Sie das Programm "Cheese" verwenden.

Schritt 2: Software-Setup


Schritt 2.1: Installieren von Python

Der Code in diesem Artikel wurde mit Python (Version 3.5) geschrieben. Um Python zu installieren, empfehle ich die Verwendung von Anaconda , einer beliebten Python-Distribution für die Datenverarbeitung und -analyse.

Schritt 2.2: Installieren von OpenCV

OpenCV  ist eine Open Source-Bibliothek, die zum Erstellen von Computer Vision-Anwendungen entwickelt wurde. Die Installation von OpenCV erfolgt mit pip:

pip3 install opencv-python

Schritt 2.3: Legen Sie die face_recognition-API fest, die

wir verwenden werden. Dieseface_recognition API wird als die einfachste API zum Erkennen von Gesichtern in Python weltweit angesehen. Zur Installation verwenden Sie:

pip install dlib
pip install face_recognition

Umsetzung


Fahren Sie nach der Einrichtung des Systems mit der Implementierung fort. Zunächst erstellen wir ein Programm und erklären dann, was wir getan haben.

Komplettlösung


Erstellen Sie eine Datei face_detector.pyund kopieren Sie den folgenden Code:

# import librariesimport cv2
import face_recognition
# Get a reference to webcam
video_capture = cv2.VideoCapture("/dev/video1")
# Initialize variables
face_locations = []
whileTrue:
# Grab a single frame of video
ret, frame = video_capture.read()
# Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
rgb_frame = frame[:, :, ::-1]
# Find all the faces in the current frame of video
face_locations = face_recognition.face_locations(rgb_frame)
# Display the resultsfor top, right, bottom, left in face_locations:
    	
# Draw a box around the face
    	
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# Display the resulting image
cv2.imshow('Video', frame)
# Hit 'q' on the keyboard to quit!if cv2.waitKey(1) & 0xFF == ord('q'):
    	
break# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()

Führen Sie dann diese Python-Datei aus, indem Sie Folgendes eingeben:

python face_detector.py

Wenn alles richtig funktioniert, öffnet sich ein neues Fenster mit laufendem Gesichtserkennungsmodus in Echtzeit.


Lassen Sie uns zusammenfassen und erklären, was unser Code getan hat:

  1. Zuerst haben wir die Hardware angegeben, auf der die Videoanalyse durchgeführt wird.
  2. Als Nächstes erstellten wir eine Echtzeit- Videoaufnahme von Bild zu Bild.
  3. Dann bearbeiteten sie jedes Bild und extrahierten die Position aller Gesichter im Bild.
  4. Als Ergebnis wurden diese Frames in Form eines Videos wiedergegeben, zusammen mit einer Angabe, wo sich die Gesichter befinden.

Ein Beispiel für die Anwendung der Gesichtserkennungstechnologie


Damit endet der Spaß nicht dort. Wir werden noch eine weitere coole Sache machen: Erstellen Sie ein volles Anwendungsbeispiel basierend auf dem obigen Code. Nehmen wir einige kleine Änderungen am Code vor, und alles ist fertig.

Angenommen, Sie möchten ein automatisiertes System mit einer Videokamera erstellen, um zu verfolgen, wo sich der Sprecher gerade befindet. Je nach Position dreht das System die Kamera so, dass der Lautsprecher immer in der Bildmitte bleibt.
Der erste Schritt ist das Erstellen eines Systems, das die Person oder Personen im Video identifiziert und sich auf den Standort des Sprechers konzentriert.



Wir werden analysieren, wie das geht. Als Beispiel wählte ich auf YouTube ein Video mit den Referenten der DataHack Summit 2017-Konferenz.

Zuerst importieren wir die notwendigen Bibliotheken:

import cv2
import face_recognition

Dann lesen wir das Video und legen die Länge fest:

input_movie = cv2.VideoCapture("sample_video.mp4")
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))

Danach erstellen wir eine Ausgabedatei mit der erforderlichen Auflösung und Bildrate, die der in der Eingabedatei ähnelt.

Laden Sie das Bild des Sprechers als Beispiel herunter, um es im Video zu erkennen:

image = face_recognition.load_image_file("sample_image.jpeg")
face_encoding = face_recognition.face_encodings(image)[0]
known_faces = [
face_encoding,
]

Wenn Sie fertig sind, starten Sie den Zyklus. Dies wird sein:

  • Bild aus Video extrahieren.
  • Finde alle Gesichter und identifiziere sie.
  • Erstellen Sie ein neues Video, das den Originalrahmen mit der Position des Gesichts des Sprechers und der Signatur kombiniert.

Schauen wir uns den Code an, der dies tut:

# Initialize variables
face_locations = []
face_encodings = []
face_names = []
frame_number = 0whileTrue:
# Grab a single frame of video
ret, frame = input_movie.read()
frame_number += 1# Quit when the input video file endsifnot ret:
    	
break# Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
rgb_frame = frame[:, :, ::-1]
# Find all the faces and face encodings in the current frame of video
face_locations = face_recognition.face_locations(rgb_frame, model="cnn")
face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)
face_names = []
for face_encoding in face_encodings:
    	
# See if the face is a match for the known face(s)
    	
match = face_recognition.compare_faces(known_faces, face_encoding, tolerance=0.50)
    	
name = None
    	
if match[0]:
        	
name = "Phani Srikant"
    	
face_names.append(name)
# Label the resultsfor (top, right, bottom, left), name in zip(face_locations, face_names):
    	
ifnot name:
        	
continue
       # Draw a box around the face
    	
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
    	
# Draw a label with a name below the face
    	
cv2.rectangle(frame, (left, bottom - 25), (right, bottom), (0, 0, 255), cv2.FILLED)
        font = cv2.FONT_HERSHEY_DUPLEX
    	
cv2.putText(frame, name, (left + 6, bottom - 6), font, 0.5, (255, 255, 255), 1)
# Write the resulting image to the output video file
print("Writing frame {} / {}".format(frame_number, length))
output_movie.write(frame)
# All done!
input_movie.release()
cv2.destroyAllWindows()

Der Code liefert Ihnen dieses Ergebnis:


Aus dem Editor


Kurse "Netologie" zum Thema:


Jetzt auch beliebt: