public async Task <ActionResult> Emotions() { var personGroupId = Request["PersonGroupId"]; var model = new IdentifyFacesModel(); var groups = await FaceClient.ListPersonGroupsAsync(); model.PersonGroups = groups.Select(g => new SelectListItem { Value = g.PersonGroupId, Text = g.Name }).ToList(); if (Request.HttpMethod == "GET") { return(View(model)); } Face[] faces = new Face[] { }; Guid[] faceIds = new Guid[] { }; IdentifyResult[] results = new IdentifyResult[] { }; await RunOperationOnImage(async stream => { var emotionsType = new[] { FaceAttributeType.Emotion }; faces = await FaceClient.DetectAsync(stream, returnFaceAttributes: emotionsType); faceIds = faces.Select(f => f.FaceId).ToArray(); if (faceIds.Length > 0) { results = await FaceClient.IdentifyAsync(personGroupId, faceIds); } }); if (faceIds.Length == 0) { model.Error = "No faces detected"; return(View(model)); } foreach (var result in results) { var identifiedFace = new IdentifiedFace(); identifiedFace.Face = faces.FirstOrDefault(f => f.FaceId == result.FaceId); foreach (var candidate in result.Candidates) { var person = await FaceClient.GetPersonAsync(personGroupId, candidate.PersonId); identifiedFace.PersonCandidates.Add(person.PersonId, person.Name); } model.IdentifiedFaces.Add(identifiedFace); identifiedFace.Color = Settings.ImageSquareColors[model.IdentifiedFaces.Count]; } model.ImageDump = GetInlineImageWithIdentifiedFaces(model.IdentifiedFaces); return(View(model)); }
public async Task <ActionResult> Identify() { var personGroupId = Request["PersonGroupId"]; var model = new IdentifyFacesModel(); var groups = await FaceClient.ListPersonGroupsAsync(); model.PersonGroups = groups.Select(g => new SelectListItem { Value = g.PersonGroupId, Text = g.Name }).ToList(); if (Request.HttpMethod == "GET") { return(View(model)); } try { Face[] faces = new Face[] { }; Guid[] faceIds = new Guid[] { }; IdentifyResult[] results = new IdentifyResult[] { }; await RunOperationOnImage(async stream => { faces = await FaceClient.DetectAsync(stream); faceIds = faces.Select(f => f.FaceId).ToArray(); if (faceIds.Count() > 0) { results = await FaceClient.IdentifyAsync(personGroupId, faceIds); } }); if (faceIds.Length == 0) { model.Error = "No faces detected"; //return View("ConfirmationPage", model); } foreach (var result in results) { var identifiedFace = new IdentifiedFace(); identifiedFace.Face = faces.FirstOrDefault(f => f.FaceId == result.FaceId); foreach (var candidate in result.Candidates) { await RunOperationOnImage(async stream => { var person = await FaceClient.GetPersonAsync(personGroupId, candidate.PersonId); identifiedFace.PersonCandidates.Add(person.PersonId, person.Name); }); // var person = await FaceClient.GetPersonAsync(personGroupId, candidate.PersonId); // identifiedFace.PersonCandidates.Add(person.PersonId, person.Name); } identifiedFace.Color = Settings.ImageSquareColors[model.IdentifiedFaces.Count]; model.IdentifiedFaces.Add(identifiedFace); } } catch { model.Error = "No faces detected, Please try again"; } model.ImageDump = GetInlineImageWithFaces(model.IdentifiedFaces.Select(x => x.Face)); TempData.Add("MyTempData", model); return(RedirectToAction("ConfirmationPage")); }
public async Task <ActionResult> Attributes() { var personGroupId = Request["PersonGroupId"]; var model = new IdentifyFacesModel(); var groups = await FaceClient.ListPersonGroupsAsync(); model.PersonGroups = groups.Select(g => new SelectListItem { Value = g.PersonGroupId, Text = g.Name }).ToList(); model.PersonGroups.Insert(0, new SelectListItem { Text = "", Value = "" }); if (Request.HttpMethod == "GET") { return(View(model)); } Face[] faces = new Face[] { }; Guid[] faceIds = new Guid[] { }; IdentifyResult[] results = new IdentifyResult[] { }; var faceAttributeTypes = new[] { FaceAttributeType.Accessories, FaceAttributeType.Age, FaceAttributeType.Blur, FaceAttributeType.Exposure, FaceAttributeType.FacialHair, FaceAttributeType.Gender, FaceAttributeType.Glasses, FaceAttributeType.Hair, FaceAttributeType.HeadPose, FaceAttributeType.Makeup, FaceAttributeType.Noise, FaceAttributeType.Occlusion, FaceAttributeType.Smile }; await RunOperationOnImage(async stream => { faces = await FaceClient.DetectAsync(stream, returnFaceAttributes: faceAttributeTypes); faceIds = faces.Select(f => f.FaceId).ToArray(); if (faceIds.Length > 0 && !string.IsNullOrEmpty(personGroupId)) { results = await FaceClient.IdentifyAsync(personGroupId, faceIds); } }); if (faceIds.Length == 0) { model.Error = "No faces detected"; return(View(model)); } if (!string.IsNullOrEmpty(personGroupId)) { foreach (var result in results) { var identifiedFace = new IdentifiedFace(); identifiedFace.Face = faces.FirstOrDefault(f => f.FaceId == result.FaceId); foreach (var candidate in result.Candidates) { var person = await FaceClient.GetPersonAsync(personGroupId, candidate.PersonId); identifiedFace.PersonCandidates.Add(person.PersonId, person.Name); } identifiedFace.Color = Settings.ImageSquareColors[model.IdentifiedFaces.Count]; model.IdentifiedFaces.Add(identifiedFace); } } else { foreach (var face in faces) { var identifiedFace = new IdentifiedFace { Face = face }; model.IdentifiedFaces.Add(identifiedFace); identifiedFace.Color = Settings.ImageSquareColors[model.IdentifiedFaces.Count]; } } model.ImageDump = GetInlineImageWithIdentifiedFaces(model.IdentifiedFaces); return(View(model)); }