// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. // // Microsoft Cognitive Services: http://www.microsoft.com/cognitive // // Microsoft Cognitive Services Github: // https://github.com/Microsoft/Cognitive // // Copyright (c) Microsoft Corporation // All rights reserved. // // MIT License: // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the // "Software"), to deal in the Software without restriction, including // without limitation the rights to use, copy, modify, merge, publish, // distribute, sublicense, and/or sell copies of the Software, and to // permit persons to whom the Software is furnished to do so, subject to // the following conditions: // // The above copyright notice and this permission notice shall be // included in all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // using System; using VideoFrameAnalyzer; using Microsoft.ProjectOxford.Face; using Microsoft.ProjectOxford.Face.Contract; namespace BasicConsoleSample { internal class Program { private static void Main(string[] args) { // Create grabber. FrameGrabber grabber = new FrameGrabber(); // Create Face API Client. FaceServiceClient faceClient = new FaceServiceClient(""); // Set up a listener for when we acquire a new frame. grabber.NewFrameProvided += (s, e) => { Console.WriteLine("New frame acquired at {0}", e.Frame.Metadata.Timestamp); }; // Set up Face API call. grabber.AnalysisFunction = async frame => { Console.WriteLine("Submitting frame acquired at {0}", frame.Metadata.Timestamp); // Encode image and submit to Face API. return await faceClient.DetectAsync(frame.Image.ToMemoryStream(".jpg")); }; // Set up a listener for when we receive a new result from an API call. grabber.NewResultAvailable += (s, e) => { if (e.TimedOut) Console.WriteLine("API call timed out."); else if (e.Exception != null) Console.WriteLine("API call threw an exception."); else Console.WriteLine("New result received for frame acquired at {0}. {1} faces detected", e.Frame.Metadata.Timestamp, e.Analysis.Length); }; // Tell grabber when to call API. // See also TriggerAnalysisOnPredicate grabber.TriggerAnalysisOnInterval(TimeSpan.FromMilliseconds(3000)); // Start running in the background. grabber.StartProcessingCameraAsync().Wait(); // Wait for keypress to stop Console.WriteLine("Press any key to stop..."); Console.ReadKey(); // Stop, blocking until done. grabber.StopProcessingAsync().Wait(); } } }