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?