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 :