private async Task <bool> CheckSuspectPicture(DetectiveBotContext context) { if (context.Request.Attachments?.Count > 0) { try { var match = 0; var face = await faceRecognitionService.GetFaceAttributes(context.Request.Attachments[0].ContentUrl); if (face != null) { //check sex if (face.FaceAttributes.Gender.ToLower() == Sex.ToLower()) { match += 25; } //check age switch ((int)Math.Round(face.FaceAttributes.Age)) { case int n when(n <= 20): if (Age == "<20") { match += 25; } break; case int n when(n > 20 && n <= 30): if (Age == "20-30") { match += 25; } break; case int n when(n > 30 && n <= 40): if (Age == "31-40") { match += 25; } break; case int n when(n > 40 && n <= 50): if (Age == "41-50") { match += 25; } break; case int n when(n > 50): if (Age == ">50") { match += 25; } break; } //check hair color if (HairColor.ToLower() == "bald" && (face.FaceAttributes.Hair.Bald > 0.7)) { match += 25; } else { if (face.FaceAttributes.Hair.HairColor != null && face.FaceAttributes.Hair.HairColor.Any(color => color.Color == (HairColorType)Enum.Parse(typeof(HairColorType), HairColor) && color.Confidence > 0.7)) { match += 25; } } //check facial hair if (FacialHair && (face.FaceAttributes.FacialHair.Beard > 0.7 || face.FaceAttributes.FacialHair.Moustache > 0.7 || face.FaceAttributes.FacialHair.Sideburns > 0.7)) { match += 25; } else { if (!FacialHair && (face.FaceAttributes.FacialHair.Beard < 0.5 && face.FaceAttributes.FacialHair.Moustache < 0.5 && face.FaceAttributes.FacialHair.Sideburns < 0.5)) { match += 25; } } } await context.SendActivity(context.Request.CreateReply($"This person matches the description for {match.ToString()}%")); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine($"Exception: {ex.Message}"); await context.SendActivity(context.Request.CreateReply($"Error processing this image. Are you sure it contained a face?")); } } await context.SendActivity(context.Request.CreateReply($"Take a picture of a suspect and i'll check how far it matches the description")); State = TopicState.checkSuspectPicture; return(true); }
public override string ToString() { StringBuilder sb = new StringBuilder(base.ToString()); sb.Append("USR"); if (IsOnline.HasValue) { sb.AppendFormat("-A{0}", IsOnline.Value ? "1" : "0"); } if (!string.IsNullOrEmpty(Vorname)) { sb.AppendFormat("-B{0}", Vorname.ToLower()); } if (!string.IsNullOrEmpty(Name)) { sb.AppendFormat("-C{0}", Name.ToLower()); } if (!string.IsNullOrEmpty(Sex)) { sb.AppendFormat("-D{0}", Sex.ToLower()); } if (!string.IsNullOrEmpty(RelationStatus)) { sb.AppendFormat("-E{0}", RelationStatus.ToLower()); } if (!string.IsNullOrEmpty(AttractedTo)) { sb.AppendFormat("-F{0}", AttractedTo.ToLower()); } if (!string.IsNullOrEmpty(EyeColor)) { sb.AppendFormat("-G{0}", EyeColor.ToLower()); } if (!string.IsNullOrEmpty(HairColor)) { sb.AppendFormat("-H{0}", HairColor.ToLower()); } if (BodyHeightFrom.HasValue) { sb.AppendFormat("-I{0}", BodyHeightFrom.Value); } if (BodyHeightTo.HasValue) { sb.AppendFormat("-J{0}", BodyHeightTo.Value); } if (BodyWeightFrom.HasValue) { sb.AppendFormat("-K{0}", BodyWeightFrom.Value); } if (BodyWeightTo.HasValue) { sb.AppendFormat("-L{0}", BodyWeightTo.Value); } if (AgeFrom.HasValue) { sb.AppendFormat("-M{0}", AgeFrom.Value); } if (AgeTo.HasValue) { sb.AppendFormat("-N{0}", AgeTo.Value); } if (CommunityIDMember.HasValue) { sb.AppendFormat("-O{0}", CommunityIDMember.Value); } if (!string.IsNullOrEmpty(AddressCity)) { sb.AppendFormat("-P{0}", AddressCity.ToLower()); } if (!string.IsNullOrEmpty(AddressZip)) { sb.AppendFormat("-Q{0}", AddressZip.ToLower()); } if (!string.IsNullOrEmpty(AddressLand)) { sb.AppendFormat("-R0}", AddressLand.ToLower()); } if (AddressRangeKM.HasValue) { sb.AppendFormat("-S{0}", AddressRangeKM.Value); } if (!string.IsNullOrEmpty(InterestTopic)) { sb.AppendFormat("-T0}", InterestTopic.ToLower()); } if (!string.IsNullOrEmpty(Interesst)) { sb.AppendFormat("-U0}", Interesst.ToLower()); } if (!string.IsNullOrEmpty(Talent)) { sb.AppendFormat("-V0}", Talent.ToLower()); } if (ForObjectType.HasValue) { sb.AppendFormat("-W{0}", ForObjectType.Value); } if (LoadVisits.HasValue) { sb.AppendFormat("-X{0}", LoadVisits.Value ? "1" : "0"); } return(sb.ToString()); }