public async Task AnalyzeImageAsync(bool detectCelebrities = false, IEnumerable <VisualFeature> visualFeatures = null) { try { if (visualFeatures == null) { visualFeatures = DefaultVisualFeatures; } if (this.ImageUrl != null) { this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync( this.ImageUrl, visualFeatures, detectCelebrities?new string[] { "Celebrities" } : null); } else if (this.GetImageStreamCallback != null) { this.AnalysisResult = await VisionServiceHelper.AnalyzeImageAsync( this.GetImageStreamCallback, visualFeatures, detectCelebrities?new string[] { "Celebrities" } : null); } } catch (Exception e) { this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); if (this.ShowDialogOnFaceApiErrors) { await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Lỗi phân tích."); } } finally { this.ComputerVisionAnalysisCompleted?.Invoke(this, EventArgs.Empty); } }
public async Task DescribeAsync() { try { if (this.ImageUrl != null) { this.AnalysisResult = await VisionServiceHelper.DescribeAsync(this.ImageUrl); } else if (this.GetImageStreamCallback != null) { this.AnalysisResult = await VisionServiceHelper.DescribeAsync(this.GetImageStreamCallback); } } catch (Exception e) { this.AnalysisResult = new Microsoft.ProjectOxford.Vision.Contract.AnalysisResult(); if (this.ShowDialogOnFaceApiErrors) { await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Lỗi phân tích."); } } }
public async Task FindSimilarPersistedFacesAsync() { this.SimilarFaceMatches = Enumerable.Empty <SimilarFaceMatch>(); if (this.DetectedFaces == null || !this.DetectedFaces.Any()) { return; } List <SimilarFaceMatch> result = new List <SimilarFaceMatch>(); foreach (Face detectedFace in this.DetectedFaces) { try { SimilarPersistedFace similarPersistedFace = await FaceListManager.FindSimilarPersistedFaceAsync(this.GetImageStreamCallback, detectedFace.FaceId, detectedFace); if (similarPersistedFace != null) { result.Add(new SimilarFaceMatch { Face = detectedFace, SimilarPersistedFace = similarPersistedFace }); } } catch (Exception e) { ErrorTrackingHelper.TrackException(e, "FaceListManager.FindSimilarPersistedFaceAsync error"); if (this.ShowDialogOnFaceApiErrors) { await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Không tìm thấy khuôn mặt tương tự"); } } } this.SimilarFaceMatches = result; }
public async Task IdentifyFacesAsync() { this.IdentifiedPersons = Enumerable.Empty <IdentifiedPerson>(); Guid[] detectedFaceIds = this.DetectedFaces?.Select(f => f.FaceId).ToArray(); if (detectedFaceIds != null && detectedFaceIds.Any()) { List <IdentifiedPerson> result = new List <IdentifiedPerson>(); IEnumerable <PersonGroup> personGroups = Enumerable.Empty <PersonGroup>(); try { personGroups = await FaceServiceHelper.GetPersonGroupsAsync(PeopleGroupsUserDataFilter); } catch (Exception e) { ErrorTrackingHelper.TrackException(e, "Nhận diện khuôn mặt trong nhóm lỗi"); if (this.ShowDialogOnFaceApiErrors) { await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Lỗi lấy nhóm nhận diện"); } } foreach (var group in personGroups) { try { IdentifyResult[] groupResults = await FaceServiceHelper.IdentifyAsync(group.PersonGroupId, detectedFaceIds); foreach (var match in groupResults) { if (!match.Candidates.Any()) { continue; } Person person = await FaceServiceHelper.GetPersonAsync(group.PersonGroupId, match.Candidates[0].PersonId); IdentifiedPerson alreadyIdentifiedPerson = result.FirstOrDefault(p => p.Person.PersonId == match.Candidates[0].PersonId); if (alreadyIdentifiedPerson != null) { // We already tagged this person in another group. Replace the existing one if this new one if the confidence is higher. if (alreadyIdentifiedPerson.Confidence < match.Candidates[0].Confidence) { alreadyIdentifiedPerson.Person = person; alreadyIdentifiedPerson.Confidence = match.Candidates[0].Confidence; alreadyIdentifiedPerson.FaceId = match.FaceId; } } else { result.Add(new IdentifiedPerson { Person = person, Confidence = match.Candidates[0].Confidence, FaceId = match.FaceId }); } } } catch (Exception e) { // Catch errors with individual groups so we can continue looping through all groups. Maybe an answer will come from // another one. // ErrorTrackingHelper.TrackException(e, "Lỗi nhận diện khuôn mặt"); if (this.ShowDialogOnFaceApiErrors) { // await ErrorTrackingHelper.GenericApiCallExceptionHandler(e, "Lỗi nhận diện khuôn mặt"); } } } this.IdentifiedPersons = result; } this.OnFaceRecognitionCompleted(); }