Gesichtserkennungsprojekt in Python [in 5 einfachen Schritten]

Veröffentlicht: 2020-09-01

Objektidentifikation und Gesichtserkennung sind wahrscheinlich die beliebtesten Anwendungen von Computer Vision. Diese Technologie findet Anwendung in verschiedenen Branchen wie Sicherheit und Social Media. Also bauen wir ein Gesichtserkennungsprojekt über Python auf.

Beachten Sie, dass Sie mit der Programmierung in Python, OpenCV und NumPy vertraut sein sollten. Es stellt sicher, dass Sie bei der Arbeit an diesem Projekt nicht verwirrt werden. Lass uns anfangen.

Wir haben zwei Methoden zur Durchführung der Gesichtserkennung geteilt. Die erste verwendet die Gesichtserkennungsbibliothek von Python, während die andere OpenCV und NumPy verwendet. Sehen Sie sich unsere Data-Science-Programme an, um mehr zu erfahren.

Inhaltsverzeichnis

Gesichtserkennung mit „Face Recognition“ von Python

Die wahrscheinlich einfachste Methode, Gesichter zu erkennen, ist die Verwendung der Gesichtserkennungsbibliothek in Python . Es hatte eine Genauigkeit von 99,38 % in der LFW-Datenbank. Die Verwendung ist ganz einfach und erfordert nicht viel Aufwand. Darüber hinaus verfügt die Bibliothek über einen speziellen „face_recognition“-Befehl zum Identifizieren von Gesichtern in Bildern.

So verwenden Sie die Gesichtserkennung

Sie können Gesichter in Bildern unterscheiden, indem Sie den Befehl „face_locations“ verwenden:

Gesichtserkennung importieren

image = face_recognition.load_image_file(“ihre_datei.jpg”)

face_locations = face_recognition.face_locations(Bild)

Es kann auch Gesichter erkennen und sie mit ihren Namen verknüpfen:

Gesichtserkennung importieren

Bekanntes_Bild = Gesichtserkennung.load_image_file(“modi.jpg”)

unknown_image = face_recognition.load_image_file(“unbekannt.jpg”)

modi_encoding = face_recognition.face_encodings(bekanntes_Bild)[0]

unknown_encoding = face_recognition.face_encodings(unbekanntes_Bild)[0]

Ergebnisse = face_recognition.compare_faces([modi_encoding], unknown_encoding)

Bild enthält „Narendra Modi“

Es gibt viele andere Dinge, die Sie mit dieser Bibliothek ausführen können, indem Sie sie mit anderen kombinieren. Wir werden nun die Durchführung der Gesichtserkennung mit anderen bekannten Bibliotheken in Python besprechen, insbesondere mit OpenCV und NumPy.

Weiterlesen : Python NumPy Tutorial: Lernen Sie Python Numpy mit Beispielen

Gesichtserkennungsprojekt in Python

In diesem Projekt haben wir die Gesichtserkennung und -erkennung mit OpenCV und NumPy durchgeführt. Wir haben Raspberry Pi verwendet, aber Sie können es auch mit anderen Systemen verwenden. Sie müssen den Code nur geringfügig ändern, um ihn auf einem anderen Gerät (z. B. einem Mac oder einem Windows-PC) zu verwenden.

Ein Teil des Verdienstes für dieses Projekt geht an Marcelo Rovai .

Schritt #1: Bibliotheken installieren

Zuerst sollten Sie die erforderlichen Bibliotheken, OpenCV und NumPy installieren. Sie können es einfach installieren über:

pip installiere opencv-python

pip installiere opencv-contrib-python

Verwenden Sie zum Installieren von NumPy in Ihrem System denselben Befehl wie oben und ersetzen Sie „opencv-python“ durch „numpy“:

pip installiere numpy

Schritt #2: Gesichter erkennen

Jetzt müssen Sie Ihre Kamera konfigurieren und mit Ihrem System verbinden. Die Kamera sollte ordnungsgemäß funktionieren, um Probleme bei der Gesichtserkennung zu vermeiden.

Bevor unsere Kamera uns erkennt, muss sie zunächst Gesichter erkennen. Wir verwenden den Haar Cascade-Klassifikator für die Gesichtserkennung. Es ist in erster Linie eine Objekterkennungsmethode, bei der Sie eine Kaskadenfunktion durch negative und positive Bilder trainieren, wonach sie in der Lage ist, Objekte auf anderen Fotos zu erkennen.

In unserem Fall möchten wir, dass unser Modell Gesichter erkennt. OpenCV wird mit einem Trainer und einem Detektor geliefert, sodass die Verwendung des Haar Cascade-Klassifikators mit dieser Bibliothek relativ bequemer ist. Sie können Ihren Klassifikator erstellen, um auch andere Bilder zu erkennen.

Hier ist der Code:

importiere numpy als np

cv2 importieren

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')

cap = cv2.VideoCapture(0)

cap.set(3.640) # setze Breite

cap.set(4.480) # setze Höhe

während wahr:

ret, img = cap.read()

img = cv2.flip (img, -1)

grau = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Gesichter = faceCascade.detectMultiScale(

grau,

scaleFactor=1.2,

minNachbarn=5,

minSize=(20, 20)

)

für (x,y,w,h) in Flächen:

cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

roi_gray = grau[y:y+h, x:x+w]

roi_color = img[y:y+h, x:x+w]

cv2.imshow('video',img)

k = cv2.waitKey(30) & 0xff

if k == 27: # drücken Sie 'ESC' zum Beenden

brechen

cap.release()

cv2.destroyAllWindows()

Schritt Nr. 3: Sammeln Sie Daten

Jetzt, da Ihr Modell Gesichter erkennen kann, können Sie es so trainieren, dass es erkennt, wessen Gesicht auf dem Bild zu sehen ist. Dazu müssen Sie ihm mehrere Fotos der Gesichter zur Verfügung stellen, an die er sich erinnern soll.

Deshalb beginnen wir mit der Erstellung unseres Datensatzes, indem wir Fotos sammeln. Nachdem Sie die erforderlichen Bilder gesammelt haben, fügen Sie IDs für jede Person hinzu, damit das Modell weiß, welches Gesicht mit welcher ID verknüpft werden soll. Beginnen Sie mit den Bildern einer Person und fügen Sie mindestens 10-20 hinzu. Verwenden Sie verschiedene Ausdrücke, um die effektivsten Ergebnisse zu erzielen.

Erstellen Sie ein Skript zum Hinzufügen von Benutzer-IDs zu Bildern, damit Sie dies nicht jedes Mal manuell tun müssen. Das Skript ist wichtig, wenn Sie Ihr Modell für mehrere Gesichter verwenden möchten.

Lernen Sie Machine Learning-Kurse von den besten Universitäten der Welt. Erwerben Sie Master-, Executive PGP- oder Advanced Certificate-Programme, um Ihre Karriere zu beschleunigen.

Schritt #4: Trainiere

Nachdem Sie den Datensatz mit den Bildern der Person erstellt haben, müssen Sie das Modell trainieren. Sie würden die Bilder in Ihren OpenCV-Erkenner einspeisen, der am Ende eine Datei mit dem Namen „trainer.yml“ erstellt.

In dieser Phase müssen Sie dem Modell nur Bilder und ihre IDs zur Verfügung stellen, damit sich das Modell mit der ID jedes Bildes vertraut machen kann. Nachdem wir das Modell trainiert haben, können wir es testen.

Hier ist der Code:

cv2 importieren

importiere numpy als np

aus dem PIL-Importbild

Betriebssystem importieren

# Pfad für die Gesichtsbilddatenbank

Pfad = 'Datensatz'

Erkenner = cv2.face.LBPHFaceRecognizer_create()

Detektor = cv2.CascadeClassifier("haarcascade_frontalface_default.xml");

#-Funktion zum Abrufen der Bilder und Etikettendaten

def getImagesAndLabels(Pfad):

imagePaths = [os.path.join(path,f) für f in os.listdir(path)]

faceSamples=[]

ids = []

für imagePath in imagePaths:

PIL_img = Image.open(imagePath).convert('L') # Graustufen

img_numpy = np.array(PIL_img,'uint8′)

id = int(os.path.split(imagePath)[-1].split(“.”)[1])

Gesichter = Detector.detectMultiScale(img_numpy)

für (x,y,w,h) in Flächen:

faceSamples.append(img_numpy[y:y+h,x:x+w])

ids.append(id)

Gesicht zurückgebenSamples,ids

print („\n [INFO] Gesichter trainieren. Es dauert ein paar Sekunden. Warte …“)

Gesichter, IDs = getImagesAndLabels (Pfad)

Recognizer.train (Gesichter, np.array (ids))

# Speichern Sie das Modell in trainer/trainer.yml

detecter.write('trainer/trainer.yml')

# Drucken Sie die Anzahl der trainierten Gesichter und beenden Sie das Programm

print(“\n [INFO] {0} Gesichter trainiert. Beenden des Programms”.format(len(np.unique(ids))))

Lernen: MATLAB-Anwendung in der Gesichtserkennung: Code, Beschreibung und Syntax

Schritt #5: Starten Sie die Erkennung

Nachdem Sie das Modell trainiert haben, können wir mit dem Testen des Modells beginnen. In diesem Abschnitt haben wir den IDs Namen hinzugefügt, damit das Modell die Namen der jeweiligen Benutzer anzeigen kann, die es erkennt.

Das Modell erkennt keine Person. Es sagt voraus, ob das erkannte Gesicht mit dem Gesicht in seiner Datenbank übereinstimmt. Unser Modell zeigt einen Prozentsatz an, wie sehr das Gesicht mit dem in seiner Datenbank vorhandenen Gesicht übereinstimmt. Seine Genauigkeit hängt stark von dem Bild ab, das Sie testen, und den Bildern, die Sie Ihrer Datenbank hinzugefügt haben (die Bilder, mit denen Sie das Modell trainiert haben).

Hier ist der Code:

cv2 importieren

importiere numpy als np

Betriebssystem importieren

Erkenner = cv2.face.LBPHFaceRecognizer_create()

detecter.read('trainer/trainer.yml')

cascadePath = „haarcascade_frontalface_default.xml“

faceCascade = cv2.CascadeClassifier(cascadePath);

Schriftart = cv2.FONT_HERSHEY_SIMPLEX

# ID-Zähler einleiten

ID = 0

# Namen im Zusammenhang mit IDs: Beispiel ==> upGrad: ID=1 usw

names = ['None', upGrad', Me', 'Friend', 'Y', 'X']

# Echtzeit-Videoaufnahme initialisieren und starten

cam = cv2.VideoCapture(0)

cam.set(3, 640) # Videobreite einstellen

cam.set(4, 480) # Videohöhe einstellen

# Definieren Sie die minimale Fenstergröße, um als Gesicht erkannt zu werden

minW = 0,1*cam.get(3)

minH = 0,1*cam.get(4)

während wahr:

ret, img =cam.read()

img = cv2.flip(img, -1) # Vertikal spiegeln

grau = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

Gesichter = faceCascade.detectMultiScale(

grau,

scaleFactor = 1,2,

minNachbarn = 5,

minSize = (int(minW), int(minH)),

)

for(x,y,w,h) in Flächen:

cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)

id, Vertrauen = Recognizer.predict(gray[y:y+h,x:x+w])

# Wenn das Vertrauen kleiner als 100 ist ==> „0“ : perfekte Übereinstimmung

wenn (Vertrauen < 100):

id = namen[id]

Vertrauen = ” {0}%”.format(round(100 – Vertrauen))

anders:

id = „unbekannt“

Vertrauen = ” {0}%”.format(round(100 – Vertrauen))

cv2.putText(

Bild,

str(id),

(x+5,y-5),

Schriftart,

1,

(255.255.255),

2

)

cv2.putText(

Bild,

str(Vertrauen),

(x+5,y+h-5),

Schriftart,

1,

(255,255,0),

1

)

cv2.imshow('Kamera',img)

k = cv2.waitKey(10) & 0xff # Drücken Sie 'ESC' zum Beenden des Videos

wenn k == 27:

brechen

# Führen Sie eine Bereinigung durch

print(“\n [INFO] Beenden des Programms und Aufräumen“)

cam.release()

cv2.destroyAllWindows()

Wir haben das Ende unseres Gesichtserkennungsprojekts in Python erreicht. Sie wissen jetzt, wie Sie ein maschinelles Lernmodell erstellen, das Gesichter erkennt und erkennt. Stellen Sie sicher, dass Sie Ihre Ergebnisse mit uns teilen!

Lernen: TensorFlow-Tutorial zur Objekterkennung für Anfänger

Erfahren Sie mehr über maschinelles Lernen

Wir hoffen, dass Ihnen dieses Gesichtserkennungsprojekt gefallen hat. Wenn Sie es anspruchsvoller gestalten möchten, können Sie Ihrem Datensatz mehrere Flächen hinzufügen und Ihr Modell entsprechend trainieren. Sie können es auch mit anderen Bibliotheken kombinieren und das Projekt um etwas anderes erweitern, z. B. ein Gesichtserkennungs-Sicherheitssystem für ein Programm!

Wenn Sie mehr über maschinelles Lernen erfahren möchten, sehen Sie sich das Executive PG Program in Machine Learning & AI von IIIT-B & upGrad an, das für Berufstätige konzipiert ist und mehr als 450 Stunden strenge Schulungen, mehr als 30 Fallstudien und Aufgaben, IIIT, bietet -B Alumni-Status, mehr als 5 praktische Schlusssteinprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Welcher mathematische Ansatz wird zur Gesichtserkennung verwendet?

Die Gesichtserkennung ist rechenintensiv und wird häufig als Genauigkeitstest für maschinelle Lernalgorithmen und Objekterkennungsmethoden verwendet. Im Allgemeinen wird in den meisten Fällen der klassische mathematische Ansatz verfolgt – die euklidische Distanz. Eine geometrische Transformation wird angewendet, um den engsten euklidischen Abstand zwischen den zwei Sätzen zu finden. Der euklidische Abstand erfordert das Addieren eines Quadrats der Differenz zwischen den beiden Vektoren der Punkte, die die beiden Bilder darstellen. Weitere Details zum Euklidischen Distanzalgorithmus finden Sie in dieser Forschungsarbeit.

Wie funktioniert die Gesichtserkennung?

Gesichtserkennung ist der Prozess der Erkennung eines menschlichen Gesichts oder mehrerer menschlicher Gesichter in einem digitalen Bild oder Video. Die Gesichtserkennung ist ein Teilprozess der Gesichtserkennung, aber der Begriff bezieht sich typischerweise auf die bildbasierte Gesichtserkennung, bei der nur die Positionen von Gesichtern in einem Bild verwendet werden, um eine Person zu identifizieren oder zu verifizieren, während die Gesichtserkennung auch ein Modell ihrer Einzigartigkeit erstellt Gesicht, das dann mit einem Zielgesicht abgeglichen wird. Die Gesichtserkennung unterscheidet sich von der Gesichtserkennung darin, dass die Gesichtserkennung der automatisierte Prozess der Identifizierung oder Verifizierung einer Person anhand eines digitalen Bildes oder einer Videoquelle ist.

Was sind die Herausforderungen der Gesichtserkennung?

Einige Herausforderungen der Gesichtserkennung werden hier diskutiert. Die an Gesichtserkennungssystemen beteiligten Algorithmen sind ziemlich komplex, was sie sehr inkonsistent macht. Die Gesichtserkennungssysteme lassen sich leicht durch Umgebungs- und Beleuchtungsänderungen, unterschiedliche Posen und sogar ähnlich aussehende Personen täuschen. Gesichtserkennungssysteme erfordern eine sehr hohe Rechenleistung, weshalb Gesichtserkennungssysteme meist bei High-End-Smartphones und -Laptops eingesetzt werden. Ein Gesichtserkennungssystem kann mehrere falsche Übereinstimmungen in einem einzigen Frame erkennen. Die Software muss bestimmen, was der Benutzer tun wollte, was für die Software keine leichte Aufgabe ist.