public Task <List <DetectionResult> > VerifyFacesAsync(string facesDir) { return(Task.Run(() => { var client = new FaceServiceClient(FaceApiSubscriptionKey); var originFace = GetOriginFaceId(client); var faceFiles = Directory.GetFiles(facesDir); List <DetectionResult> detectionResults = new List <DetectionResult>(); foreach (var faceFile in faceFiles) { Logable.WriteLog("Verifying " + faceFile); try { var result = VerifyFace(client, originFace, faceFile); if (result != null) { detectionResults.Add(result); Logable.WriteLog("OK! " + result.Confidence); } else { Logable.WriteLog("NOT!"); } } catch (Exception ex) { Logable.WriteLog(ex.Message); } } return detectionResults; })); }
private IEnumerable <FrameHighlight> DetectFaces(string subscriptionKey, string filePath) { Logable.WriteLog("Start face tracking"); VideoServiceClient client = new VideoServiceClient(subscriptionKey); client.Timeout = TimeSpan.FromMinutes(10); using (FileStream originalStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { // Creates a video operation of face tracking Logable.WriteLog("Start uploading video"); Operation operation = client.CreateOperationAsync(originalStream, new FaceDetectionOperationSettings()).Result; Logable.WriteLog("Uploading video done"); // Starts querying service status OperationResult result = client.GetOperationResultAsync(operation).Result; while (result.Status != OperationStatus.Succeeded && result.Status != OperationStatus.Failed) { Logable.WriteLog(string.Format("Server status: {0}, wait {1} seconds...", result.Status, QueryWaitTime.TotalSeconds)); Task.Delay(QueryWaitTime).Wait(); result = client.GetOperationResultAsync(operation).Result; } Logable.WriteLog("Finish processing with server status: " + result.Status); // Processing finished, checks result if (result.Status == OperationStatus.Succeeded) { // Gets output JSON Logable.WriteLog("Downloading result done"); Debug.WriteLine(JsonHelper.FormatJson <FaceTracking>(result.ProcessingResult)); var frameHighlights = GetHighlights(result.ProcessingResult).ToList(); return(frameHighlights); } else { // Failed Logable.WriteLog("Fail reason: " + result.Message); } } return(null); }