Emotionen freischalten: Erstellen eines Python-Gesichtsemotionsdetektors in nur 40 Zeilen! | von Swarit Choudhari | Juli 2023

0
26


Lass uns anfangen!

Sie da! Haben Sie sich jemals gefragt, wie Sie Ihre Reise zum maschinellen Lernen/KI mit Python ankurbeln können? Nun, keine Angst! Sie können beginnen, indem Sie mit Python einen sehr einfachen Gesichtsemotionsdetektor erstellen.

Umriss

Dies ist im Grunde eine Blaupause dessen, worauf wir hinarbeiten werden!

Eine Blaupause für das, was wir machen
Von mir in Apple Freeform erstellt

In unserem Programm werden wir versuchen, Folgendes umzusetzen:

  1. Eine Webcam (Hinweis: Ich habe ein Archivbild als Platzhalter in den Blueprint eingefügt)
  2. Die von der Maschine ermittelte Ausgabe und deren Anzeige als Textual content im Fenster
  3. Das Quadrat folgt dem Gesicht, das in der Webcam zu sehen ist

Nachdem wir nun einen ziemlich klaren Überblick darüber haben, was wir zu tun versuchen, können wir anfangen!

Codierung

Jetzt ist es Zeit für den lustigen Teil! CODIERUNG 🔥🔥🔥!!!

Erstellen Sie ein neues Verzeichnis, in dem sich unser Projekt befindet. Verwenden Sie jetzt Ihren bevorzugten Code-Editor (ich empfehle). Visual Studio-Code), erstellen Sie eine neue Datei mit dem Namen major.py. Hier geben Sie Ihren gesamten Code ein und es handelt sich dabei auch um dieselbe Datei, die Sie ausführen werden.

Wir beginnen zunächst mit dem Import wichtiger Python-Module und dem Herunterladen vorab trainierter Daten.

Module:

Daten:

Um die Module zu installieren, können Sie diesen Befehl einfach in dem Verzeichnis ausführen, in dem sich Ihr Projekt befindet.

pip set up opencv-python dlib deepface

Wenn das nicht funktioniert hat, stellen Sie sicher, dass Sie pip in der PATH-Umgebung installiert haben! Wenn Sie sowohl Python2 als auch Python3 installiert haben und dieser Befehl nicht funktioniert hat, verwenden Sie pip3 set up opencv-python dlib deepface .

Installieren Sie nun die Datendatei mit dem obigen Hyperlink und fügen Sie sie dem Verzeichnis hinzu, in dem Ihr Projekt gehostet wird.

Jetzt ist es an der Zeit, mit dem eigentlichen Programmieren zu beginnen! Öffne deine major.py Datei, die Sie zuvor erstellt haben, und fügen Sie diese Codezeilen hinzu.

import cv2
import dlib
from deepface import DeepFace

cap = cv2.VideoCapture(0)

hog_face_detector = dlib.get_frontal_face_detector()

dlib_facelandmark = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

In den ersten drei Zeilen werden im Wesentlichen nur die zuvor heruntergeladenen Module in die Datei importiert, damit Sie die Module verwenden können.

cap = cv2.VideoCapture(0)

⬆️ Grundsätzlich wird eine Webcam gestartet, wenn die Datei ausgeführt wird, und Sie müssen möglicherweise bestimmte Berechtigungen auf Ihrem Pc zulassen, bevor sie ausgeführt wird. Es sollte ein Fenster mit der Meldung „Erlauben Sie dieser Anwendung, Movies aufzunehmen?” und Sie würden auf „klicken“Ja“.

hog_face_detector = dlib.get_frontal_face_detector()

⬆️ Initialisiert einen Gesichtsdetektor in Ihrem Programm, damit Sie alle Eingaben analysieren können, die Sie erhalten.

dlib_facelandmark = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

⬆️ Lädt die vorab trainierten Daten, die wir zuvor installiert haben, und diese Daten helfen uns, Emotionen, bestimmte Orientierungspunkte/Punkte im Gesicht und vieles mehr zu erkennen.

Springer-Linkbild

Jetzt können Sie damit beginnen, Ihrer Datei diesen langen Code hinzuzufügen, der auf den ersten Blick vielleicht etwas verwirrend aussieht:

whereas True:
_, body = cap.learn()
grey = cv2.cvtColor(body, cv2.COLOR_BGR2GRAY)

faces = hog_face_detector(grey)
for face in faces:
x = face.left()
y = face.prime()
w = face.width()
h = face.top()

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

emotion = DeepFace.analyze(body, actions=['emotion'], enforce_detection=False)
dominant_emotion = emotion[0]['dominant_emotion']

emotion_text = cv2.putText(body, dominant_emotion, (100, 200), cv2.FONT_HERSHEY_COMPLEX, 3, (50, 205, 50), 2, cv2.LINE_AA)

cv2.imshow("Facial Emotion Detector", body)

key = cv2.waitKey(1)
if key == 27:
break

Die ersten drei Zeilen initiieren eine endlose Schleife und initiieren auch einen Body. Das bedeutet, dass Bilder von der Webcam generiert werden, bei denen es sich im Grunde um ein Video handelt. Außerdem werden die Bilder in Graustufen umgewandelt, da es für den Pc viel einfacher ist, die Eingabe zu verarbeiten und eine bessere Ausgabe zu liefern.

faces = hog_face_detector(grey)

⬆️ Dieser Codeabschnitt verarbeitet und analysiert im Grunde den gegebenen Body.

for face in faces:
x = face.left()
y = face.prime()
w = face.width()
h = face.top()
        cv2.rectangle(body, (x, y), (x + w, y + h), (0, 255, 0), 2)

⬆️ Diese for-Schleife erstellt im Grunde ein Rechteck um ein Gesicht, das sie erkennt. x, y, w, and h sind die Seiten des Rechtecks ​​und cv2.rectangle(body, (x, y), (x + w, y + h), (0, 255, 0), 2) zeichnet es.

emotion = DeepFace.analyze(body, actions=['emotion'], enforce_detection=False)
dominant_emotion = emotion[0]['dominant_emotion']

⬆️ In diesem Snippet liegt unser Output! Da DeepFace seine Ausgabe normalerweise so ausgibt:

[{'emotion': {'angry': 0.0003611648480728036, 'disgust': 9.961692759477125e-13, 'fear': 0.04854781145695597, 'happy': 6.235278515731579e-07, 'sad': 85.9003484249115, 'surprise': 4.40607162455838e-17, 'neutral': 14.050744473934174}, 'dominant_emotion': 'sad', 'region': {'x': 0, 'y': 0, 'w': 1280, 'h': 720}}]

Was extrem hässlich ist! 🤮 Wir versuchen normalerweise, es so zu formatieren, dass nur das angezeigt wird dominant_emotion Das ist die Hauptemotion, die es berechnet! Das ist, was dominant_emotion = emotion[0]['dominant_emotion'] tut.

emotion_text = cv2.putText(body, dominant_emotion, (100, 200), cv2.FONT_HERSHEY_COMPLEX, 3, (50, 205, 50), 2, cv2.LINE_AA)

⬆️ Der obige Code zeigt es nur im Fenster an!

cv2.imshow("Facial Emotion Detector", body)

⬆️ Dadurch wird ein neues Fenster erstellt und dem Benutzer angezeigt, sobald das Programm ausgeführt wird!

key = cv2.waitKey(1)
if key == 27:
break

⬆️ Und schließlich stellt dieses Bit nur sicher, ob das Esc. Style gedrückt wird, beenden Sie das Programm. Wenn es jedoch nicht beendet wird, gehen Sie einfach zum Terminal und erledigen Sie es Ctrl+C . (auch für Mac-Benutzer 😉) Jetzt fügen wir außerhalb dieser Endlosschleife dieses Bit hinzu:

cap.launch()
cv2.destroyAllWindows()

Dieses Bit beendet auch nur die Anwendung!

Foto von Patti Black An Unsplash

YAY! Sie haben den Kurs abgeschlossen! Juhu! Klopfen Sie sich selbst auf die Schulter! 🙌. Vergessen Sie jetzt nicht, Ihr Programm auszuführen und zu sehen, wie es in Aktion tritt!

Wenn Sie noch Fragen haben, können Sie mich gerne im Kommentarbereich kontaktieren!

Endgültiger Code:

import cv2
import dlib
from deepface import DeepFace

cap = cv2.VideoCapture(0)

hog_face_detector = dlib.get_frontal_face_detector()

dlib_facelandmark = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

whereas True:
_, body = cap.learn()
grey = cv2.cvtColor(body, cv2.COLOR_BGR2GRAY)

faces = hog_face_detector(grey)
for face in faces:
x = face.left()
y = face.prime()
w = face.width()
h = face.top()

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

emotion = DeepFace.analyze(body, actions=['emotion'], enforce_detection=False)
dominant_emotion = emotion[0]['dominant_emotion']

emotion_text = cv2.putText(body, dominant_emotion, (100, 200), cv2.FONT_HERSHEY_COMPLEX, 3, (50, 205, 50), 2, cv2.LINE_AA)

cv2.imshow("Facial Emotion Detector", body)

key = cv2.waitKey(1)
if key == 27:
break

cap.launch()
cv2.destroyAllWindows()

Hinweis: Wenn Sie möchten, können Sie es auch ändern, um die Rasse oder das Geschlecht vorherzusagen! Vielleicht sogar alle drei! Ich hoffe, Sie probieren es aus und ich hoffe, Ihnen hat dieser Beitrag gefallen! Vielen Dank, dass Sie bis hierher gelesen haben!

Bis zum nächsten Mal!



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here