[PYTHON] Reconnaissons les émotions avec Azure Face

Je l'ai utilisé récemment, donc j'écrirai un peu. Puisqu'il s'agit de mon premier article, il peut y avoir de nombreuses erreurs et pièces manquantes. Je vous serais reconnaissant si vous pouviez bien m'apprendre: girl_tone1:

Azure Face avait une forte impression de reconnaissance faciale Je pensais que c'était intéressant de pouvoir reconnaître les émotions, alors je l'ai utilisé pour la reconnaissance des émotions.

Azure Face

Ce que vous pouvez faire: vérification du visage, détection du visage, reconnaissance des émotions Il semble qu'il existe d'autres moyens de rechercher des visages similaires et de regrouper par le même visage. Dans cet article, nous utiliserons la détection des visages et la reconnaissance des émotions.

1. Créez des variables pour les points de terminaison et les clés Azure

Vous pouvez l'utiliser en écrivant ceci: ok_woman_tone1:

KEY = 'your_key'
ENDPOINT = 'your_endpoint'
face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))

2. Appelez la méthode de détection de visage

params = ['age','emotion']
result = face_client.face.detect_with_stream(  
             image
             , return_face_id=True
             , return_face_landmarks=False
             , return_face_attributes=params 
         )

Fondamentalement, j'ai changé uniquement return_face_attributes de False avec la valeur par défaut. image: Cette fois passe un flot d'images return_face_id: Si défini sur True, faceID sera retourné. return_face_landmarks: s'il est défini sur True, il sera renvoyé. Point de repère du visage return_face_attributes Renvoie les informations d'attribut passées dans le paramètre.

Cette fois, j'ai passé l'âge et l'émotion pour return_face_attributes Il renvoie l'âge et les sentiments de la cible.

Similaire à l'interface utilisateur

Je veux pouvoir prendre une photo en appuyant sur un bouton de la caméra → reconnaissance des émotions → afficher le résultat…: upside_down: Je vais le faire en utilisant kivy.

Créer un fichier kivy simple

[Emotion.py]

# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

Builder.load_string("""
<MainWidget>:

""")

class MainWidget(BoxLayout):
    pass
class EmotionApp(App):
    title = "E.A."
    def build(self):
        return MainWidget()

if __name__ == "__main__":
    EmotionApp().run()

Écran ↓ E.A1.png

Noir

2. Fixez la caméra et les boutons.

[Emotion.py]

(Abréviation)

Builder.load_string("""
<MainWidget>:
    orientation: 'vertical'
    Camera:
        id: camera
        resolution: (640, 480)
        play: True
    Button:
        text: 'Capture'
        size_hint_y: None
        height: '48dp'
        on_press: root.capture()
""")

class MainWidget(BoxLayout):
    def capture(self):
        print('captured!')
(Abréviation)

↓ Écran (Puisqu'il a été traité très grossièrement pour que le visage et l'arrière-plan ne soient pas reflétés, c'est pour référence seulement ...) 無題.png

Entrez la méthode de détection de visage

[Emotion.py]

KEY = 'your_key'
ENDPOINT = 'your_endpoint'
face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))   

   (Abréviation)
    def capture(self):
        texture = self.ids['camera'].texture
        nparr = np.fromstring(texture.pixels, dtype=np.uint8)
        reshaped = np.reshape(nparr, (480,640,4))
        ret,buf = cv2.imencode('.jpg', reshaped)
        stream = io.BytesIO(buf)

        params = ['age','emotion','hair']
        result = face_client.face.detect_with_stream(  
                     stream
                     , return_face_id=True
                     , return_face_landmarks=False
                     , return_face_attributes=params 
                 )
   (Abréviation)

Pop-up pour afficher les résultats

[Emotion.py]

   (Abréviation)
    Layout = BoxLayout(orientation='vertical')
       faceatts = result[0].face_attributes
       Layout.add_widget(Label(text=("age: "+ str(int(faceatts.age)))))
       Layout.add_widget(Label(text="emotion: "))      
       Layout.add_widget(Label(text="anger: " + str(faceatts.emotion.anger)))
       Layout.add_widget(Label(text="contempt: " + str(faceatts.emotion.contempt)))
       Layout.add_widget(Label(text="disgust: " + str(faceatts.emotion.disgust)))
       Layout.add_widget(Label(text="fear: " + str(faceatts.emotion.fear)))
       Layout.add_widget(Label(text="happiness: " + str(faceatts.emotion.happiness)))
       Layout.add_widget(Label(text="neutral: " + str(faceatts.emotion.neutral)))
       Layout.add_widget( Label(text="sadness: " + str(faceatts.emotion.sadness)))
       Layout.add_widget(Label(text="surprise: " + str(faceatts.emotion.surprise)))

       popupWindow = Popup(title="Results", content=Layout, size_hint=(None,None),size=(400,400)) 
       popupWindow.open()
     (Abréviation)

l'a fait!

Je vais essayer de l'utiliser. 無題2.png Cliquez sur le bouton! 無題3.png Oh ~ Je pouvais dire que je riais correctement! Je rajeunis ... (rires): détendu: Finalement, j'ai voulu m'en tenir un peu plus au look et en savoir plus sur son fonctionnement: robot: Merci pour la lecture!

# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
import cv2
import numpy as np
import io
from azure.cognitiveservices.vision.face import FaceClient
from msrest.authentication import CognitiveServicesCredentials
from kivy.uix.label import Label
from kivy.uix.popup import Popup
KEY = 'your_key'
ENDPOINT =  'your_end_point'
face_client = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))
Builder.load_string("""
<MainWidget>:
    orientation: 'vertical'
    Camera:
        id: camera
        resolution: (640, 480)
        play: True
    Button:
        text: 'Capture'
        size_hint_y: None
        height: '48dp'
        on_press: root.capture()
""")

class MainWidget(BoxLayout):
    def capture(self):
        texture = self.ids['camera'].texture
        nparr = np.fromstring(texture.pixels, dtype=np.uint8)
        reshaped = np.reshape(nparr, (480,640,4))
        ret,buf = cv2.imencode('.jpg', reshaped)
        stream = io.BytesIO(buf)
        params = ['age','emotion']
        result = face_client.face.detect_with_stream(  
                    stream
                    , return_face_id=True
                    , return_face_landmarks=False
                    , return_face_attributes=params 
            )
        Layout = BoxLayout(orientation='vertical')
        faceatts = result[0].face_attributes
        Layout.add_widget(Label(text=("age: "+ str(int(faceatts.age)))))
        Layout.add_widget(Label(text="emotion: "))      
        Layout.add_widget(Label(text="anger: " + str(faceatts.emotion.anger)))
        Layout.add_widget(Label(text="contempt: " + str(faceatts.emotion.contempt)))
        Layout.add_widget(Label(text="disgust: " + str(faceatts.emotion.disgust)))
        Layout.add_widget(Label(text="fear: " + str(faceatts.emotion.fear)))
        Layout.add_widget(Label(text="happiness: " + str(faceatts.emotion.happiness)))
        Layout.add_widget(Label(text="neutral: " + str(faceatts.emotion.neutral)))
        Layout.add_widget( Label(text="sadness: " + str(faceatts.emotion.sadness)))
        Layout.add_widget(Label(text="surprise: " + str(faceatts.emotion.surprise)))

        popupWindow = Popup(title="Results", content=Layout, size_hint=(None,None),size=(400,400)) 
        popupWindow.open()
        
class EmotionApp(App):
    title = "E.A."
    def build(self):
        return MainWidget()

if __name__ == "__main__":
    EmotionApp().run()


Recommended Posts

Reconnaissons les émotions avec Azure Face
Reconnaissance faciale avec Edison
Maintenant, essayons la reconnaissance faciale avec Chainer (phase d'apprentissage)
Jouons avec la 4e dimension 4e
Jouons avec les données Amedas - Partie 1
Reconnaissance faciale avec OpenCV de Python
Reconnaissance faciale par Amazon Rekognition
Faisons Othello avec wxPython
Détection de visage avec Python + dlib
Jouons avec les données Amedas - Partie 4
Écrivons python avec cinema4d.
Détection de visage avec Python + OpenCV
Reconnaissons les objets rouges avec python
Faisons R-CNN avec Sklearn-theano
Reconnaissance faciale / coupe avec OpenCV
Jouons avec les données Amedas - Partie 3
Essayez la reconnaissance faciale avec Python
Détection de visage avec Haar Cascades
Jouons avec les données Amedas - Partie 2
Détection de visage d'anime avec OpenCV