It's difficult enough for humans to recognize emotions in the faces of other humans. Can a computer accomplish this task? It can if we train it to and if we give it enough examples of different faces with different emotions.
When we supply data to a computer with the objective of training that computer to recognize patterns and predict new data, we call that Machine Learning. And Microsoft has done a lot of Machine Learning with a lot of faces and a lot of data and they are exposing the results for you to use.
The Emotions API in Project Oxford looks at pictures of people and determines their emotions. Possible emotions returned are anger, contempt, disgust, fear, happiness, neutral, sadness, and surprise. Each emotion is assigned a confidence level between 0 and 1 - higher numbers indicate a higher confidence that this is the emotion expressed in the face. If a picture contains multiple faces, the emotion of each face is returned.
The API is a simple REST web service located at https://api.projectoxford.ai/emotion/v1.0/recognize. POST to this service with a header that includes:
Ocp-Apim-Subscription-Key:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
where xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx is your key. You can find your key at https://www.projectoxford.ai/Subscription?popup=True
and a body that includes the following data:
{ "url": "http://xxxx.com/xxxx.jpg" }
where http://xxxx.com/xxxx.jpg is the URL of an image.
The full request looks something like:
POST https://api.projectoxford.ai/emotion/v1.0/recognize HTTP/1.1
Content-Type: application/json
Host: api.projectoxford.ai
Content-Length: 62
Ocp-Apim-Subscription-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
{ "url": "http://xxxx.com/xxxx.jpg" }
This will return JSON data identifying each face in the image and a score indicating how confident this API is that the face is expressing each of 8 possible emotions. For example, passing a URL with a picture below of 3 attractive, smiling people
(found online at https://giard.smugmug.com/Tech-Community/SpartaHack-2016/i-4FPV9bf/0/X2/SpartaHack-068-X2.jpg)
returned the following data:
[
{
"faceRectangle": {
"height": 113,
"left": 285,
"top": 156,
"width": 113
},
"scores": {
"anger": 1.97831262E-09,
"contempt": 9.096525E-05,
"disgust": 3.86221245E-07,
"fear": 4.26409547E-10,
"happiness": 0.998336,
"neutral": 0.00156954059,
"sadness": 8.370223E-09,
"surprise": 3.06117772E-06
}
},
{
"faceRectangle": {
"height": 108,
"left": 831,
"top": 169,
"width": 108
},
"scores": {
"anger": 2.63808062E-07,
"contempt": 5.387114E-08,
"disgust": 1.3360991E-06,
"fear": 1.407629E-10,
"happiness": 0.9999967,
"neutral": 1.63170478E-06,
"sadness": 2.52861843E-09,
"surprise": 1.91028926E-09
}
},
{
"faceRectangle": {
"height": 100,
"left": 591,
"top": 168,
"width": 100
},
"scores": {
"anger": 3.24157673E-10,
"contempt": 4.90155344E-06,
"disgust": 6.54665473E-06,
"fear": 1.73284559E-06,
"happiness": 0.9999156,
"neutral": 6.42121E-05,
"sadness": 7.02297257E-06,
"surprise": 5.53670576E-09
}
}
]
A high value for the 3 happiness scores and the very low values for all the other scores suggest a very high degree of confidence that the people in this photo is happy.
Here is the request in the popular HTTP analysis tool Fiddler [http://www.telerik.com/fiddler]:
Request
Response:
Sending requests to Project Oxford REST API makes it simple to analyze the emotions of people in a photograph.