Diagnostik von Emotionen mit Microsofts „Cognitive Services“
Heute habe ich mal wieder etwas experimentiert und dabei viel Spaß gehabt. Ich habe Microsofts Cognitive Services ausprobiert. Was Microsoft da (kostenlos) anbietet ist schon relativ beeindruckend. So soll es zum Beispiel möglich sein, in Texten die Stimmungslage zu erkennen. Oder in Bildern/Videos von Menschen die ausgedrückten Emotionen.
Wer braucht da noch Mitarbeiterbefragungen? Warum nicht kontinuierlich die Gesichter aller Mitarbeiter beim Ankommen und Verlassen der Firma filmen und deren Stimmungslage auswerten. Beim reinkommen waren noch alle fröhlich, beim rausgehen… Ich mache nur Spaß.
Also ran an die R-Konsole und selber ausprobieren… (Achtung, ab hier wird es (auch)etwas technisch.)
Merkmale von Gesichtern erkennen: Die Face API
Die sogenannte “Face API” erfüllt im Wesentlichen zwei Aufgaben. Zum einen können Personen wiedererkannt werden. Im Ergebnis erhält man eine Wahrschinlichkeit der Übereinstimmung in Prozent. Zum anderen können Merkmale von Gesichtern ausgewertet werden. Die Software schätzt zum Beispiel das Geschlecht oder auch das Alter der Person. Sie kann auch feststellen, ob der Mensch lacht.
Mich interessiert, ob ich selber vom Computer jünger oder älter geschätzt werde. Ich verwende zu Testzwecken das hier auf holtmeier.de in der Sektion Team eingestellte Profilfoto von mir. Zum Zeitpunkt der Aufnahme war ich übrigens 41 Jahre alt.
Der folgende Code kann per Copy und Paste in der statistischen Programmiersprache „R“ ausgeführt werden. Wer also selber experimentieren möchte, kann mein Experiment einfach nachvollziehen. Allerdings muss zunächst ein eigener API-Code bei Microsoft beantrag werden.
# Paket laden, um API-Aufrufe in R ausführen zu können
library(httr)
# Das Bild von mir laden
img.url = 'https://holtmeier.de/wordpress/wp-content/uploads/2015/02/holtmeier-640x426.jpg'
# URL für die Abfrage der API und den persönlichen Key festlegen
faceURL = "https://api.projectoxford.ai/face/v1.0/detect?returnFaceId=true&returnFaceLandmarks=true&returnFaceAttributes=age,gender,smile,facialHair"
faceKEY = '123456' # HIER muss der eigene API-Code eingetragen werden"
mybody = list(url = img.url)
# Gesichtsmerkmale analysieren
faceResponse = POST(
url = faceURL,
content_type('application/json'), add_headers(.headers = c('Ocp-Apim-Subscription-Key' = faceKEY)),
body = mybody,
encode = 'json'
)
myFace = content(faceResponse)[[1]]
myFace$faceAttributes
## $smile ## [1] 0.001 ## ## $gender ## [1] "male" ## ## $age ## [1] 39.3 ## ## $facialHair ## $facialHair$moustache ## [1] 0.2 ## ## $facialHair$beard ## [1] 0.3 ## ## $facialHair$sideburns ## [1] 0
Ok, das ist also das Ergebnis. Ich bin männlich mit etwas Gesichtsbeharung. Das ist korrekt. Ich lache nicht. Richtig, niemals (1=“lacht” | 0= “lacht nicht”). Ich bin laut Microsofts künstlicher Intelligenz 39,3 Jahre alt. Das trifft mein subjektives Empfinden recht gut, liegt aber ca. zwei Jahre neben meinem tatsächlichen Alter (41 Jahre, siehe oben). Aber, ich bin durchaus beeindruckt.
Emotionen in Gesichtern erkennen: Die Emotion API
Jetzt möchte ich wissen, ob meine ausgedrückte Emotion korrekt erkannt wird. Die künstliche Intelligenz unterscheidet 7 Emotionen, was aus psychologisch-wissenschaftlicher Sicht nicht ganz verkehrt ist. Außerdem kann ein Gesichtsausdruck auch neutral sein.
- surprise – Überraschung
- sadness – Traurigkeit
- happiness – Freude
- fear – Angst
- disgust – Ekel
- contempt – Verachtung
- anger – Ärger
Ich erwarte eigentlich, dass die Software bei mir einen neutralen Gesichtsausduck erkennt. Hier nun wieder der notwendige Code und im Anschluss dann das Ergebnis.
URL.emoface = 'https://api.projectoxford.ai/emotion/v1.0/recognize'
emotionKEY = '123456' # HIER muss der eigene API-Code eingetragen werden"
# Emotionen analysieren
faceEMO = POST(
url = URL.emoface,
content_type('application/json'), add_headers(.headers = c('Ocp-Apim-Subscription-Key' = emotionKEY)),
body = mybody,
encode = 'json'
)
myEmotions = content(faceEMO)[[1]]
# Ergebnis plotten
par(mar = c(5, 6, 4, 2))
barplot(t(as.matrix(myEmotions$scores)), horiz = TRUE, las = 1)
Erwartungskonform mache ich wohl tatsächlich ein neutrales Gesicht mit einem Hauch Verachtung und einer Prise Ärger. Wenn Microsoft das sagt, wir es wohl stimmen.
Der Beitrag ist auch Teil der Blogparade zur Zukunft Personal: #DigiEmX Digitalisierung ohne Ende – aber wo bleiben die Mitarbeiter?
Interessante Links zum Thema:
1. Longhow Lam’s Blog
2. Cognitive Services APIs
3. An R package for Microsoft Cognitive Services language APIs
Titelbild
Emiliano Ricci, CC BY 2.0