private static BirdAnalysisResult GetBirdAnalysisResult(ImageAnalysis analyzedImage) { var birds = GetBirds(analyzedImage).ToList(); var imageDescription = MakeSentence(analyzedImage.Description?.Captions?.FirstOrDefault()?.Text); var birdAnalysisMetadata = new BirdAnalysisMetadata { ImageDescription = imageDescription, ImageTags = analyzedImage.Description?.Tags.ToList(), ImageWidth = analyzedImage.Metadata.Width, ImageHeight = analyzedImage.Metadata.Height, ImageFormat = analyzedImage.Metadata.Format }; UpdateRectangles(birds, birdAnalysisMetadata); return(new BirdAnalysisResult { IsBird = birds.Any(x => x.IsBird), IsBirdConfidence = birds.Where(x => x.IsBird).Max(x => x.IsBirdConfidence), Animals = birds, Metadata = birdAnalysisMetadata }); }
private static void UpdateRectangles(List <BirdAnalysisAnimal> birds, BirdAnalysisMetadata birdAnalysisMetadata) { foreach (var bird in birds) { var rectangle = bird.Rectangle; rectangle.xPercentage = (double)rectangle.x / birdAnalysisMetadata.ImageWidth * 100; rectangle.yPercentage = (double)rectangle.y / birdAnalysisMetadata.ImageHeight * 100; rectangle.wPercentage = (double)rectangle.w / birdAnalysisMetadata.ImageWidth * 100; rectangle.hPercentage = (double)rectangle.h / birdAnalysisMetadata.ImageHeight * 100; } }
private static void UpdateRectangles(List <BirdAnalysisAnimal> birds, BirdAnalysisMetadata birdAnalysisMetadata) { foreach (var bird in birds) { var rectangle = bird.Rectangle; rectangle.xPercentage = GetPercentage(rectangle.x, birdAnalysisMetadata.ImageWidth); rectangle.yPercentage = GetPercentage(rectangle.y, birdAnalysisMetadata.ImageHeight); rectangle.widthPercentage = GetPercentage(rectangle.width, birdAnalysisMetadata.ImageWidth); rectangle.heightPercentage = GetPercentage(rectangle.height, birdAnalysisMetadata.ImageHeight); } }
private static BirdAnalysisResult GetBirdAnalysisResult(ImageAnalysis analyzedImage) { var animals = GetAnimals(analyzedImage).ToList(); var imageDescription = MakeSentence(analyzedImage.Description?.Captions?.FirstOrDefault()?.Text); var tags = new List <string>(); tags.AddRange(analyzedImage.Tags?.OrderByDescending(x => x.Confidence).Select(x => x.Name + (string.IsNullOrWhiteSpace(x.Hint) ? "" : $" ({x.Hint})")).ToList() ?? new List <string>()); tags.AddRange(analyzedImage.Description?.Tags ?? new List <string>()); var birdAnalysisMetadata = new BirdAnalysisMetadata { ImageDescription = imageDescription, ImageTags = tags.Distinct().ToList(), ImageWidth = analyzedImage.Metadata.Width, ImageHeight = analyzedImage.Metadata.Height, ImageFormat = analyzedImage.Metadata.Format }; UpdateRectangles(animals, birdAnalysisMetadata); var isBird = GetIsBird(analyzedImage, animals); var animalGroups = GetAnimalGroups(analyzedImage, animals); if (animals.Count == 1 && string.IsNullOrWhiteSpace(animals.First().AnimalGroup)) { if (animalGroups.Any()) { animals.First().AnimalGroup = animalGroups.First().Key; animals.First().AnimalGroupConfidence = animalGroups.First().Value; } } var result = new BirdAnalysisResult { IsBird = isBird.Key, IsBirdConfidence = isBird.Value, Animals = animals, AnimalGroups = animalGroups.Keys.ToList(), Metadata = birdAnalysisMetadata }; result.IsBirdText = GetIsBirdText(result); return(result); }