Dans ce tutoriel, nous verrons comment nous pouvons créer un programme python qui détectera l’émotion sur un visage humain. Cela peut être intéressant si vous voulez faire des choses comme la détection d’émotions en utilisant python, ou si vous formez des systèmes d’apprentissage automatique pour lire les émotions humaines. Nous allons créer un programme qui prend une image comme entrée et produit une liste d’émotions humaines que l’image invoque. Pour ce faire, nous allons utiliser un package appelé Deepface.
Qu’est-ce que Deepface
Deepface est un framework d’analyse d’attributs de reconnaissance faciale open source qui a été créé pour python. Il s’agit d’une bibliothèque de vision par ordinateur très puissante qui est utile pour identifier les éléments dans les images, comme les formes et les visages dans l’image, il est donc facile de les détecter et de les analyser. Il s’agit d’un modèle d’emballage de cadre de reconnaissance faciale hybride tel que VGG-Face, Google FaceNet, OpenFace, Facebook DeepFace, DeepID, ArcFace et Dlib.
Le moyen le plus simple d’installer deepface est de le télécharger à partir de PyPI avec les commandes pip.
pip3 install deepface
Aux fins de cet article, nous n’utiliserons que l’un des nombreux modules fournis par deepface, à savoir le module d’analyse des attributs faciaux, il peut nous renseigner sur l’âge, le sexe, l’expression faciale et la race à partir de l’image fournie ou Les données.
Obtenez des émotions sur un visage à partir de photos
Pour commencer, nous allons créer une petite application qui ne montrera que les résultats et sous forme numérique.
#emotion_detection.py
import cv2
from deepface import DeepFace
import numpy as np #this will be used later in the process
imgpath = face_img.png' #put the image where this file is located and put its name here
image = cv2.imread(imgpath)
analyze = DeepFace.analyze(image,actions=['emotions']) #here the first parameter is the image we want to analyze #the second one there is the action
print(analyze)
La classe d’action DeepFace.analyze dans le code ci-dessus contient les actions de paramètre, elle spécifie l’analyse des attributs faciaux que nous voulons qu’elle effectue. DeepFace prend actuellement en charge 4 actions qui incluent l’âge, le sexe, l’émotion et la race. Mais pour notre projet, nous n’utiliserons que l’action émotionnelle.
Vous pouvez exécuter le code en exécutant simplement le nom du fichier à son emplacement dans le terminal. Après avoir exécuté le code ci-dessus, vous devriez obtenir des résultats qui ressembleraient à ceci : –
{'emotion': {'angry': 0.2837756188594808, 'disgust': 2.789757723035734e-07, 'fear': 0.456878175451973, "happy': 92.482545707485, 'sad': 0.152323190865646454,
surprise': 1.9998317176006223, 'neutral': 0.0084371718453264), 'dominant_emotion': 'happy', 'region': {'X': 1910, 'y': 878, 'w': 1820, 'h': 1820}}
[Finished in 13.48s]
Vous pouvez voir ici toutes les données faciales que deepface a pu collecter. Les valeurs d’émotion qu’il montre sont « en colère », « dégoût », « peur », « heureux », « triste », « surprise » et « neutre ». Avec cela, il montre également l’émotion dominante, qui est «heureuse» dans notre cas, et la région sur la photo où se trouve le visage, c’est pratique lorsque nous devons faire quelque chose comme une boîte autour du visage pour le mettre en valeur.
Nous ne pouvons également obtenir que l’émotion la plus exprimée très facilement en utilisant l’attribut dominant_emotion dans la fonction d’impression.
print(analyze['dominanmt_emotion']) #add this instead of the already written print function
Après avoir ajouté l’attribut donné, exécutez le code de la même manière que décrit ci-dessus. Vous devriez obtenir un résultat comme celui-ci :
happy
[Finished in 10.08s]
Et si vous vous demandez pourquoi nous sommes heureux du résultat. C’est parce que heureux a obtenu la valeur numérique la plus élevée. Vous pouvez le voir dans le résultat précédent.
Obtenez des émotions d’un visage à travers une webcam
Maintenant que nous savons comment cela fonctionne, nous pouvons maintenant le faire fonctionner avec une webcam ou des caméras pour détecter les visages et leurs émotions. Nous allons maintenant utiliser les packages supplémentaires que nous avons importés précédemment et faire en sorte que notre code précédent fonctionne plus efficacement.
import cv2
from deepface import DeepFace
import numpy as np
face_cascade_name = cv2.data.haarcascades + 'haarcascade_frontalface_alt.xml' #getting a haarcascade xml file
face_cascade = cv2.CascadeClassifier() #processing it for our project
if not face_cascade.load(cv2.samples.findFile(face_cascade_name)): #adding a fallback event
print("Error loading xml file")
video=cv2.VideoCapture(0) #requisting the input from the webcam or camera
while video.idOpened(): #checking if are getting video feed and using it
_,frame = video.read()
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #changing the video to grayscale to make the face analisis work properly
face=face_cascade.detectMultiScale(gray,scaleFactor=1.1,minNeighbors=5)
for x,y,w,h in face:
img=cv2.rectangle(frame,(x,y),(x+w,y+h),(0,0,255),1) #making a recentangle to show up and detect the face and setting it position and colour
#making a try and except condition in case of any errors
try:
analyze = DeepFace.analyze(frame,actions=['emotions']) #same thing is happing here as the previous example, we are using the analyze class from deepface and using ‘frame’ as input
print(analyze['dominant_emotion']) #here we will only go print out the dominant emotion also explained in the previous example
except:
print("no face")
#this is the part where we display the output to the user
cv2.imshow('video', frame)
key=cv2.waitKey(1)
if key==ord('q'): # here we are specifying the key which will stop the loop and stop all the processes going
break
video.release()
Sortir
Vous pouvez l’exécuter comme vous le faisiez auparavant, en exécutant le nom du fichier dans le terminal. Une fois que vous avez démarré, la fenêtre de votre webcam s’ouvrira et vous devriez pouvoir voir une boîte rouge sur votre visage, qui tente de détecter votre visage.
Vous le verrez également détecter et imprimer les émotions dominantes de votre visage sur le terminal, ce qui ressemblerait à ceci :
neutral
neutral
neutral
neutral
happy
happy
neutral
Il produira constamment les détections à moins que vous ne l’arrêtiez, nous avons également défini la touche d’arrêt des opérations qui était ‘q’, vous pouviez appuyer dessus pour arrêter instantanément tous les processus à la fois.
Et c’est tout! Nous avons créé une application très simple qui peut effectuer une détection d’émotion à l’aide de python. C’était un projet très basique, mais il peut vous aider à développer beaucoup vos compétences, il y a beaucoup de place pour l’amélioration et l’expérimentation.
Voici quelques tutoriels utiles que vous pouvez lire :
- How to receive Github webhooks in Python?
- Convert an image to 8-bit image
- How to run my Python script on Docker?
- Generating QR Codes and Barcodes in Python
- Create API in Django Rest Framework Viewset
- Create Sudoku game in Python using Pygame
- Get Weather Information using Python
- Detect the number of faces using Python and OpenCV