/// <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); }
/// <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!"); }