It’s time for a little fun – inspired by Martin Kearn‘s talk at DDDNorth I fired up the Microsoft Cognitive Services Website, signed up and got myself a key for the emotion API. It didn’t take me long to get up and running!
I tried briefly using the SDK library but found some trouble with strongly typed names, deciding the abandon that approach I used the method Martin recommends on his blog and simply downloaded the json myself and parsed it.
Here’s my code:
var _apiUrl = @"https://api.projectoxford.ai/emotion/v1.0/recognize";
using (var httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _apiKey);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/octet-stream"));
//setup data object
HttpContent content = new StreamContent(new MemoryStream(File.ReadAllBytes(filename)));
content.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/octet-stream");
//make request
var response = await httpClient.PostAsync(_apiUrl, content);
//read response and write to view
var responseContent = response.Content.ReadAsStringAsync().Result;
var objResponse = JsonConvert.DeserializeObject<RootObject[]>(responseContent);
var image = Image.FromFile(filename);
using (var gfx = Graphics.FromImage(image))
{
foreach (var face in objResponse)
{
gfx.DrawRectangle(new Pen(Color.Red, 5),
new Rectangle(new Point(face.faceRectangle.left, face.faceRectangle.top),
new Size(face.faceRectangle.width, face.faceRectangle.height)));
var text = this.GetText(face.scores);
gfx.DrawString(text, new Font(FontFamily.GenericSerif, 64), new SolidBrush(Color.Red),
face.faceRectangle.left + 24,
face.faceRectangle.height + face.faceRectangle.top);
}
}
this.pictureBox1.Image = image;
}
I’m very impressed with how easy it is (in fact most of it’s being used to update the picture box in my little Winforms app!).
What do you think? Do I look about 65% surprised?

