示例#1
0
 /// <summary>
 /// Add face to both Cloud Face API and local whitelist
 /// </summary>
 /// <param name="personId"></param>
 /// <param name="faceId"></param>
 /// <param name="imagePath"></param>
 /// <returns></returns>
 private async Task AddFace(Guid personId, Guid faceId, string imagePath)
 {
     // prevent running synchronous call on UI thread
     await Task.Run(async() =>
     {
         using (Stream imageStream = File.OpenRead(imagePath))
         {
             AddPersistedFaceResult result = await _faceApiClient.AddPersonFaceAsync(WhitelistId, personId, imageStream);
         }
         _whitelist.AddFace(personId, faceId, imagePath);
     });
 }
        /// <summary>
        /// Add face to both Cloud Face API and local whitelist
        /// </summary>
        /// <param name="personId"></param>
        /// <param name="faceId"></param>
        /// <param name="imagePath"></param>
        /// <returns></returns>
        private async Task AddFace(Guid personId, Guid faceId, string imagePath)
        {
            await Task.Run(async() =>
            {
                using (Stream imageStream = File.OpenRead(imagePath))
                {
                    await _faceApiClient.AddPersonFaceAsync(WhitelistId, personId, imageStream);
                }
            });

            _whitelist.AddFace(personId, faceId, imagePath);
        }
示例#3
0
        /// <summary>
        /// Add face to both Cloud Face API and local whitelist
        /// </summary>
        /// <param name="personId"></param>
        /// <param name="faceId"></param>
        /// <param name="imagePath"></param>
        /// <returns></returns>
        private async Task AddFace(Guid personId, Guid faceId, string imagePath)
        {
            await _faceApiClient.AddPersonFaceAsync(WhitelistId, personId, faceId, imagePath);

            _whitelist.AddFace(personId, faceId, imagePath);
        }
        /// <summary>
        /// Use whitelist folder to build whitelist Database
        /// </summary>
        /// <returns></returns>
        private async Task BuildWhiteListAsync(IProgress <int> progress, double progressCnt)
        {
            Debug.WriteLine("Start building whitelist from " + _whitelistFolder.Path);

            // calc progress step
            var fileCnt = await FaceApiUtils.GetFileCountInWhitelist(_whitelistFolder);

            var progressStep = (100.0 - progressCnt) / fileCnt;

            var subFolders = await _whitelistFolder.GetFoldersAsync();

            // Iterate all subfolders in whitelist
            List <Task> tasks = new List <Task>();

            foreach (var folder in subFolders)
            {
                var personName = folder.Name;

                // create new person
                var personId = await CreatePerson(personName, folder);

                // get all images in the folder
                var files = await folder.GetFilesAsync();

                // iterate all images and add to whitelist
                foreach (var img in await folder.GetFilesAsync())
                {
                    tasks.Add(StartAddFaceImageTask(img, personId).Unwrap().ContinueWith((taskDone) =>
                    {
                        var detectTask = taskDone as Task <Tuple <string, ClientContract.AddPersistedFaceResult> >;

                        if (detectTask == null)
                        {
                            return;
                        }

                        // Update something on UI
                        var faceDetectionResult = detectTask.Result;
                        if (faceDetectionResult != null && faceDetectionResult.Item2 != null && faceDetectionResult.Item1 != null)
                        {
                            _whitelist.AddFace(personId, faceDetectionResult.Item2.PersistedFaceId, faceDetectionResult.Item1);
                        }

                        else
                        {
                            return;
                        }


                        // update progress
                        progressCnt += progressStep;
                        UpdateProgress(progress, progressCnt);
                    }
                                                                                         ));
                }
                await Task.WhenAll(tasks);
            }

            await Task.WhenAll(tasks);

            await TrainingWhitelistAsync();

            Debug.WriteLine("Whitelist created successfully!");
        }