Exemple #1
0
        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;
            }));
        }
Exemple #2
0
        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);
        }