Erstellen eines Gesichtserkennungsmodells mithilfe von Deep Learning in Python

Die Übersetzerin Elena Bornovolokova hat speziell für Netology einen Artikel von Fayzan Shaykh angepasst, in dem erläutert wird, wie ein Modell der Gesichtserkennung erstellt wird und in welchen Bereichen es angewendet werden kann.

Einführung


In den letzten Jahren hat Computer Vision an Popularität gewonnen und sich in einer anderen Richtung hervorgetan. Entwickler erstellen neue Anwendungen, die weltweit eingesetzt werden.
In dieser Richtung zieht mich das Konzept von Open Source an. Selbst Technologieriesen sind bereit, neue Entdeckungen und Innovationen mit allen zu teilen, damit Technologie nicht das Privileg der Reichen bleibt.

Eine dieser Technologien ist die Gesichtserkennung. Bei korrekter 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 effektiven Gesichtserkennungsalgorithmus erstellen. Bevor Sie mit diesen Informationen fortfahren, möchten wir, dass Sie sich vorbereiten und sich von diesem Video inspirieren lassen:


Gesichtserkennung: Mögliche Anwendungen


Hier sind einige mögliche Anwendungsbereiche der Gesichtserkennungstechnologie.

Gesichtserkennung in sozialen Netzwerken . Facebook hat das manuelle Markieren von Bildern durch automatisch generierte Tag-Vorschläge für jedes auf die Plattform hochgeladene Bild ersetzt. Facebook verwendet einen einfachen Gesichtserkennungsalgorithmus, um die Pixel im Bild zu analysieren und mit den jeweiligen Benutzern zu vergleichen.

Gesichtserkennung in Sicherheit . Ein einfaches Beispiel für die Verwendung der Gesichtserkennungstechnologie zum Schutz persönlicher Daten ist das Entsperren Ihres Smartphones „im Gesicht“. Diese Technologie kann auch im Zugangssystem implementiert werden: Eine Person schaut in die Kamera und bestimmt, ob sie sie betreten soll oder nicht.


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



System-Setup: Hardware- und Softwareanforderungen


Überlegen Sie, wie wir die Gesichtserkennungstechnologie nutzen können, indem Sie sich an die uns zur Verfügung stehenden Open Source-Tools wenden.

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 7. Generation). Sie können auch die integrierte Kamera oder den Camcorder Ihres Laptops mit einem beliebigen geeigneten System für die Echtzeit-Videoanalyse anstelle der von mir verwendeten verwenden.
  • Es ist vorzuziehen, einen Grafikprozessor für eine schnellere Videoverarbeitung zu verwenden.
  • Wir haben das Betriebssystem Ubuntu 18.04 mit der gesamten erforderlichen Software verwendet.

Bevor wir mit der Erstellung unseres Gesichtserkennungsmodells fortfahren, werden wir diese Punkte genauer analysieren.

Schritt 1: Hardware-Setup


Überprüfen Sie, ob die Kamera richtig konfiguriert ist. Mit Ubuntu ist dies einfach: Überprüfen Sie, ob das Gerät vom Betriebssystem erkannt wird. Gehen Sie dazu folgendermaßen vor:

  1. Überprüfen Sie vor dem Anschließen der Webcam an den Laptop alle angeschlossenen Videogeräte, indem Sie an der Eingabeaufforderung ls /dev/video* eingeben. Als Ergebnis wird eine Liste aller an das System angeschlossenen Videogeräte angezeigt.
  2. Schließen Sie die Webcam an und geben Sie den Befehl erneut aus. Wenn die Webcam richtig angeschlossen ist, wird das neue Gerät als Ergebnis des Befehls angezeigt.
  3. Sie können auch die Webcam-Software verwenden, um den korrekten Betrieb zu überprüfen. Ubuntu kann hierfür das Cheese-Programm verwenden.

Schritt 2: Software-Setup


Schritt 2.1: Installieren Sie Python

Der Code in diesem Artikel wurde mit Python (Version 3.5) geschrieben. Für die Installation von Python empfehle ich die Verwendung von Anaconda , einer beliebten Python-Distribution zum Verarbeiten und Analysieren von Daten.

Schritt 2.2: Installieren Sie OpenCV

OpenCV ist eine Open Source-Bibliothek, mit der Computer Vision-Anwendungen erstellt werden können. Die Installation von OpenCV erfolgt mit pip :

 pip3 install opencv-python 

Schritt 2.3: Legen Sie die face_recognition-API fest

Wir werden die face_recognition API , die als die einfachste Python-Gesichtserkennungs-API der Welt gilt. Verwenden Sie zum Installieren:

 pip install dlib pip install face_recognition 

Implementierung


Nach dem Einrichten des Systems fahren wir mit der Implementierung fort. Zunächst erstellen wir ein Programm und erklären dann, was wir getan haben.

Exemplarische Vorgehensweise


Erstellen Sie eine Datei face_detector.py und kopieren Sie den folgenden Code:

 # import libraries import cv2 import face_recognition # Get a reference to webcam video_capture = cv2.VideoCapture("/dev/video1") # Initialize variables face_locations = [] while True: # 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 results for 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, wird ein neues Fenster geöffnet, in dem der Gesichtserkennungsmodus in Echtzeit gestartet wird.


Um zusammenzufassen und zu erklären, was unser Code getan hat:

  1. Zuerst haben wir die Hardware angegeben, auf der das Video analysiert werden soll.
  2. Dann haben wir Bild für Bild eine Echtzeit- Videoaufnahme gemacht .
  3. Dann wurde jedes Bild verarbeitet und die Position aller Gesichter im Bild extrahiert .
  4. Infolgedessen wurden diese Bilder in Form eines Videos zusammen mit einer Angabe, wo sich die Gesichter befinden, reproduziert .

Anwendungsbeispiel für die Gesichtserkennung


Dies ist nicht alles, was Spaß macht. Wir werden noch eine coole Sache machen: Wir werden ein vollwertiges Anwendungsbeispiel erstellen, das auf dem obigen Code basiert. Wir werden kleine Änderungen am Code vornehmen und alles wird fertig sein.

Angenommen, Sie möchten mit einem Camcorder ein automatisiertes System erstellen, um zu verfolgen, wo sich der Lautsprecher gerade befindet. Abhängig von seiner Position dreht das System die Kamera so, dass der Lautsprecher immer in der Mitte des Rahmens bleibt.
Der erste Schritt besteht darin, ein System zu erstellen, das die Person oder Personen im Video identifiziert und sich auf den Standort des Sprechers konzentriert.



Lassen Sie uns herausfinden, wie es geht. Als Beispiel habe ich ein Video auf YouTube mit einer Rede der Sprecher der DataHack Summit 2017-Konferenz ausgewählt.

Importieren Sie zunächst die erforderlichen Bibliotheken:

 import cv2 import face_recognition 

Dann lesen wir das Video und stellen die Länge ein:

 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 ähnlich der in der Eingabedatei.

Wir laden das Lautsprecherbild als Beispiel, 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, ] 

Nachdem wir fertig sind, starten wir den Zyklus, der sein wird:

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

Schauen wir uns den Code an, der dies ausführt:

 # Initialize variables face_locations = [] face_encodings = [] face_names = [] frame_number = 0 while True: # Grab a single frame of video ret, frame = input_movie.read() frame_number += 1 # Quit when the input video file ends if not 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 results for (top, right, bottom, left), name in zip(face_locations, face_names):  if not 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 gibt Ihnen dieses Ergebnis:


Von den Redakteuren


Netologiekurse zum Thema:

Source: https://habr.com/ru/post/de434354/


All Articles