Gesichtserkennung mit OpenCV | Erstellen Sie ein Gesichtserkennungssystem

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

– Grundverständnis der Bildklassifizierung.

– Kenntnisse in Python und Deep Learning

– Konzeptionelles Verständnis der verschiedenen Module der tiefes Lernen.

Einführung

In diesem Artikel werden wir sehen, was Gesichtserkennung ist? Und wie unterscheidet es sich auch von der Gesichtserkennung? Wir werden kurz die Theorie der Gesichtserkennung verstehen und dann zum Kodierungsabschnitt springen!! Am Ende dieses Artikels, Sie können ein Gesichtserkennungsprogramm entwickeln, um Gesichter in Bildern zu erkennen !!!

Agenda dieses Artikels

1. Überblick über die Gesichtserkennung

2. Übersicht zur Gesichtserkennung

3. Verstehen Sie, was OpenCV ist

4. Python-Implementierung

Überblick über die Gesichtserkennung

Was ist, wenn die Maschine in der Lage ist, Objekte in einem Bild ohne menschliches Zutun automatisch zu erkennen?? Mal sehen: Gesichtserkennung kann ein Problem sein, wenn wir menschliche Gesichter in einem Bild erkennen. Es kann leichte Unterschiede in menschlichen Gesichtern geben, aber immerhin, Man kann mit Sicherheit sagen, dass es spezifische Eigenschaften gibt, die mit allen menschlichen Gesichtern verbunden sind.. Es gibt mehrere Gesichtserkennungsalgorithmen, aber Viola-Jones Der Algorithmus ist die älteste Methode, die auch heute noch verwendet wird.

Die Gesichtserkennung ist im Allgemeinen der erste Schritt zu vielen gesichtsbezogenen Anwendungen., wie Gesichtserkennung oder Gesichtsverifizierung. Aber die Gesichtserkennung hat sehr nützliche Anwendungen. Eine der erfolgreichsten Gesichtserkennungsanwendungen ist wahrscheinlich die „Fotoshooting“.

Beispiel: wenn du auf ein Foto deiner Freunde klickst, Die Kamera mit dem integrierten Gesichtserkennungsalgorithmus erkennt, wo sich die Gesichter befinden und passt den Fokus entsprechend an.

Übersicht zur Gesichtserkennung

Jetzt haben wir gesehen, dass unsere Algorithmen Gesichter erkennen können, aber können wir auch erkennen, wessen Gesichter sind? Was ist, wenn ein Algorithmus Gesichter erkennen kann??

Allgemein, Gesichtserkennung ist eine Methode zur Identifizierung oder Überprüfung der Identität einer Person, die sein Gesicht benutzt. Es gibt mehrere Algorithmen für die Gesichtserkennung, aber seine Genauigkeit kann variieren. Hier werde ich mit Ihnen besprechen, wie wir Gesichtserkennung mit Deep Learning durchführen können.

Jetzt, Lassen Sie uns verstehen, wie wir durch Deep Learning Gesichter erkennen können. Hier verwenden wir Gesichtsinlays, bei denen jedes Gesicht in einen Vektor umgewandelt wird. Die Technik, das Gesicht in einen Vektor umzuwandeln, heißt tiefes metrisches Lernen. Lassen Sie mich diesen Prozess zum besseren und einfacheren Verständnis in drei einfache Schritte aufteilen.:

1. Gesichtserkennung:

Die erste Aufgabe, die wir erledigen, besteht darin, Gesichter im Bild zu erkennen (Fotografie) oder Videosequenz. Wir wissen jetzt, dass die Koordinaten / genaue Lage des Gesichts, Also extrahieren wir dieses Gesicht zur weiteren Verarbeitung.

2. Merkmalsextraktion:

Sehen Sie nun, dass wir das Gesicht aus dem Bild beschnitten haben, also extrahieren wir spezifische eigenschaften daraus. Hier werden wir sehen, wie man Gesichtseinlagen verwendet, um diese Merkmale aus dem Gesicht zu extrahieren. Wie wir wissen, ein rotes neuronales Es nimmt ein Bild des Gesichts der Person als Eingabe und generiert einen Vektor, der die wichtigsten Merkmale eines Gesichts darstellt. Beim maschinellen Lernen, dieser Vektor ist nichts anderes als genannt Verkrustung und deshalb nennen wir diesen Vektor Gesichtseinlage. jedoch, Wie wird Ihnen das helfen, die Gesichter verschiedener Menschen zu erkennen??

Wenn wir das neuronale Netz trainieren, das Netzwerk lernt zu generieren ähnliche Vektoren für gleich aussehende Gesichter. Betrachten wir ein Beispiel, wenn ich mehrere Gesichtsbilder in einem anderen Zeitrahmen habe, Es ist offensichtlich, dass sich einige Eigenschaften ändern können, aber nicht zu viel. Dann, bei diesem Problem, die mit den Gesichtern verbundenen Vektoren sind ähnlich oder wir können sagen, dass sie im Vektorraum sehr nahe beieinander liegen.

Bisher, Wir haben erfahren, wie dieses Netzwerk funktioniert, Mal sehen, wie wir dieses Netzwerk für unsere eigenen Daten verwenden können. Hier übergeben wir alle Bilder aus unseren Daten an dieses zuvor trainierte Netzwerk, um die jeweiligen Einbettungen zu erhalten und diese Einbettungen für den nächsten Schritt in einer Datei zu speichern.

3. Gesichtsvergleich:

Wir haben Gesichtseinlagen für jedes Gesicht in unseren Daten, die in einer Datei gespeichert sind, der nächste schritt ist erkenne ein neues Bild, das ist nicht in unseren Daten. Deswegen, Der erste Schritt besteht darin, das Face-Keying für das Bild mit dem gleichen Raster zu berechnen, das wir zuvor verwendet haben, und dann dieses Keying mit dem Rest des Keyings zu vergleichen, das wir haben. Wir erkennen das Gesicht, wenn das generierte Inlay näher oder ähnlich zu einem anderen Inlay ist.

909161_fpdngo6lm5pdeipooezk1g-7988524

Bildquelle: https://cdn-media-1.freecodecamp.org/images/1*fpDngO6lM5pDeIPOOezK1g.jpeg

Verstehen Sie, was OpenCV ist

Im Bereich Künstliche Intelligenz, Computer Vision ist eine der interessantesten und herausforderndsten Aufgaben. Computer Vision fungiert als Brücke zwischen Computersoftware und Visualisierungen. Computer Vision ermöglicht es Computersoftware, die Anzeigen auf dem Bildschirm zu verstehen und zu lernen Umfeld.

Lass uns ein Beispiel verstehen: Basierend auf der Form, Farbe und Größe, die die Frucht bestimmt. Diese Aufgabe ist für das menschliche Gehirn sehr einfach, aber im Prozess der Computer Vision, erste, wir müssen die daten sammeln, dann führen wir die Datenverarbeitungsvorgänge durch, und dann trainieren und unterrichten wir das Modell, um zu verstehen, wie man Früchte anhand ihrer Größe unterscheidet, Fruchtform und Farbe.

77786yolo-vorhersagen-2660281

Bildquelle: https://martinapugliese.github.io/assets/posts_images/yolo-predictions.png

Heute, Es stehen mehrere Pakete zur Verfügung, um Probleme mit maschinellem Lernen zu lösen, Deep Learning und Computer Vision. Bis jetzt, Computer Vision ist das beste Modul für solch komplexe Probleme. OpenCV ist eine Open-Source-Bibliothek. Es unterstützt verschiedene Programmiersprachen wie R, Python, etc. Läuft wahrscheinlich auf den meisten Plattformen wie Windows, Linux und macOS.

Vorteile von OpenCV:

1. Open CV ist kostenlos und eine Open-Source-Bibliothek.

2. Offener Lebenslauf ist schnell, da es in C geschrieben ist / C ++ im Vergleich zu anderen.

3. Mit weniger System-RAM, OpenCV funktioniert besser.

4. Es ist kompatibel mit den meisten Betriebssystemen wie Windows, Linux und macOS.

Implementierung

In diesem Abschnitt, wir implementieren Gesichtserkennung mit OpenCV und Python.

Zuerst, mal sehen, welche Bibliotheken wir brauchen und wie man sie installiert:

1. OpenCV

2. dlib

3. Gesichtserkennung

OpenCV ist eine Bild- und Videobearbeitungsbibliothek und dient der Bild- und Videoanalyse, als Gesichtserkennung, Nummernschild lesen, Fotobearbeitung, fortschrittliche Robotic Vision und vieles mehr.

das dlib Die Bibliothek enthält unsere Implementierung von ‚tiefes metrisches Lernen‘ aus dem unsere Gesichtseinlagen gebaut werden, die für den eigentlichen Erkennungsprozess verwendet werden.

das Gesichtserkennung Die Bibliothek ist sehr einfach zu handhaben und wir werden sie in unserem Code verwenden. Zuerst, Denken Sie daran, die dlib-Bibliothek zu installieren, bevor Sie face_recognition installieren.

Das Ergebnis jeder Gesichtserkennungsanwendung, die OpenCV verwendet, wird wie folgt aussehen:

84749mzu1mta4mw-4842466

Bildquelle: https://Spektrum.ieee.org/image/MzU1MTA4Mw.jpeg

So installieren Sie OpenCV, dlib und Gesichtserkennung, Geben Sie die folgenden Snippets an der Eingabeaufforderung ein.

pip install opencv-python
conda install -c conda-forge dlib
pip install face_recognition

Jetzt machen wir den Code!

Gesichtsfunktionen extrahieren

Zuerst, einen Datensatz benötigen oder sogar einen eigenen erstellen. Stellen Sie einfach sicher, dass Sie alle Bilder in Ordnern organisieren, wobei jeder Ordner Bilder von nur einer Person enthält.

Oder Sie können den Datensatz von diesem herunterladen Verknüpfung.

Jetzt, Speichern Sie den Datensatz auf die gleiche Weise in einem Ordner, wie Sie die Datei erstellen. Hier ist der Code und ich habe bei Bedarf Kommentare hinzugefügt:

from imutils import paths #imutils includes opencv functions
import face_recognition
import pickle
import cv2
import os
#get paths of each file in folder named Images
#Images here that contains data(folders of various people)
imagePath = list(paths.list_images('Images'))
kEncodings = []
kNames = []
# loop over the image paths
for (i, ip) in enumerate(imagePath):
# extract the person name from the image path
name = ip.split(os.path.sep)[-2]
# load the input image and convert it from BGR
image = cv2.imread(ip)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
boxes = face_recognition.face_locations(rgb,model='hog')
# compute the facial embedding for the any face
encodings = face_recognition.face_encodings(rgb, boxes)
# loop over the encodings
for encoding in encodings:
kEncodings.append(encoding)
kNames.append(name)
#save emcodings along with their names in dictionary data
data = {"encodings": kEncodings, "names": kNames}
#use pickle to save data into a file for later use
f = open("face_enc", "wb")
f.write(pickle.dumps(data))#to open file in write mode
f.close()#to close file

Sehen Sie nun, dass wir die Einbettung in einer Datei namens . gespeichert haben „face_enc“, Damit wir sie verwenden können, um Gesichter in Bildern zu erkennen (Fotos) oder Live-Videostreaming.

Der nächste Teil ist, dass wir sehen, wie man Gesichter aus Bildern erkennt.

Gesichter auf Bildern erkennen

Das folgende Skript zum Erkennen und Erkennen von Gesichtern in Bildern. Ich habe Kommentare neben dem Code gegeben, wo es nötig war. Dann werden Sie in der Lage sein, den Code effizient zu verstehen.


import face_recognition
import imutils #imutils includes opencv functions
import pickle
import time
import cv2
import os
#to find path of xml file containing haarCascade file
cfp = os.path.dirname(cv2.__file__) + "/data/haarcascade_frontalface_alt2.xml"
# load the harcaascade in the cascade classifier
fc = cv2.CascadeClassifier(cfp)
# load the known faces and embeddings saved in last file
data = pickle.loads(open('face_enc', "rb").read())
#Find path to the image you want to detect face and pass it here
image = cv2.imread(Path-to-img)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
#convert image to Greyscale for HaarCascade
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = fc.detectMultiScale(gray,
scaleFactor=1.1,
minNeighbors=6,
minSize=(60, 60),
flags=cv2.CASCADE_SCALE_IMAGE)
# the facial embeddings for face in input
encodings = face_recognition.face_encodings(rgb)
names = []
# loop over the facial embeddings incase
# we have multiple embeddings for multiple fcaes
for encoding in encodings:
#Compare encodings with encodings in data["encodings"]
#Matches contain array with boolean values True and False
matches = face_recognition.compare_faces(data["encodings"],
encoding)
#set name =unknown if no encoding matches
name = "Unknown"
# check to see if we have found a match
if True in matches:
#Find positions at which we get True and store them
matchedIdxs = [i for (i, b) in enumerate(matches) if b]
count = {}
# loop over the matched indexes and maintain a count for
# each recognized face face
for i in matchedIdxs:
#Check the names at respective indexes we stored in matchedIdxs
name = data["names"][i]
#increase count for the name we got
count[name] = count.get(name, 0) + 1
#set name which has highest count
name = max(count, key=count.get)
# will update the list of names
names.append(name)
# do loop over the recognized faces
for ((x, y, w, h), name) in zip(faces, names):
# rescale the face coordinates
# draw the predicted face name on the image
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.putText(image, name, (x, y), cv2.FONT_HERSHEY_SIMPLEX,
0.75, (0, 255, 0), 2)
cv2.imshow("Frame", image)
cv2.waitKey(0)

Produktion

85438unbenannt-3260817

Fazit

Jetzt sehen Sie, dass wir damit am Ende dieses Artikels angelangt sind, in dem wir alles über die Gesichtserkennung erfahren haben. Ich hoffe dieser Artikel hat dir gefallen. Vielen Dank!

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher