static Appraisal CreateAppraisal(Bitmap sourceImage, ComputerVisionService.AnalysisBlob analysisResult) { Caption caption = GetCaption(analysisResult.generalAnalysisResult); Console.WriteLine("Caption: " + caption.Text + " " + caption.Confidence); string foregroundColor = GetForegroundColor(analysisResult.generalAnalysisResult); float confidence = (float)caption.Confidence; bool isOld = IsOld(analysisResult.generalAnalysisResult); float expensiveMultiplier = GetPriceExpensiveMultiplier(analysisResult.generalAnalysisResult); Console.WriteLine("Is Old: " + isOld); bool isBlackAndWhite = IsBlackAndWhite(analysisResult.generalAnalysisResult); Console.WriteLine("Is Black and White: " + isBlackAndWhite); bool isPainting = PaintingDetection.IsPainting(analysisResult); Console.WriteLine("Is Painting: " + isPainting); bool isPhoto = !isPainting && IsPhoto(analysisResult.generalAnalysisResult); Console.WriteLine("Is Photo: " + isPhoto); bool isSign = SignDetection.IsSign(analysisResult); Console.WriteLine("Is Sign: " + isSign); int?extractedYear = YearExtractor.ExtractYear(analysisResult.ocrAnalysisResult); Description.Arguments descriptionArguments = new Description.Arguments { foregroundColor = foregroundColor, isOld = isOld, isBlackAndWhite = isBlackAndWhite, isPainting = isPainting, isPhoto = isPhoto, isSign = isSign, }; string descriptionText = Description.Get(caption, descriptionArguments); Console.WriteLine("Final Description Text: " + descriptionText); Console.WriteLine("Extracted Year: " + extractedYear); string extractedLocale = LanguageCodeToLocation.LookUp(analysisResult.ocrAnalysisResult); Console.WriteLine("Extracted Locale: " + extractedLocale); Random random = GetDeterministicRandom(sourceImage); Bitmap composedImage = ComposeImage(sourceImage, descriptionText, confidence, isOld, isBlackAndWhite && isPhoto, expensiveMultiplier, isPainting, isSign, extractedYear, extractedLocale, random); return(new Appraisal { image = composedImage, comment = descriptionText }); }
public static float GetSignConfidence(ComputerVisionService.AnalysisBlob analysisResult) { float cumulativeConfidence = 0.0f; // if an image has any of these tags it's more likely to be a sign string[] signTags = { "text", "sign", "book", }; foreach (string tag in signTags) { if (analysisResult.generalAnalysisResult.Description.Tags.Contains(tag)) { cumulativeConfidence += 0.5f; } } string[] signDescriptions = { "text", "sign", "book", "piece of paper", }; if (analysisResult.generalAnalysisResult.Description.Captions.Count() != 0) { foreach (string description in signDescriptions) { if (analysisResult.generalAnalysisResult.Description.Captions[0].Text.Contains(description)) { cumulativeConfidence += 0.5f; } } } Console.WriteLine("Sign confidence: " + cumulativeConfidence); return(cumulativeConfidence); }
public static bool IsPainting(ComputerVisionService.AnalysisBlob analysisResult) { return(GetPaintingConfidence(analysisResult) >= 0.5f); }
public static float GetPaintingConfidence(ComputerVisionService.AnalysisBlob analysisResult) { if (analysisResult.generalAnalysisResult.IsClipArt() || analysisResult.generalAnalysisResult.IsLineDrawing()) { return(0.0f); } if (analysisResult.generalAnalysisResult.IsBlackAndWhite()) { return(0.0f); } float cumulativeConfidence = 0.0f; // if an image has any of these tags it's more likely to be a painting string[] paintingTags = { "view", "outdoor", "indoor", "mountain", "hill", "grass", "posing", "photo", "painting", "person", "man", "woman", "girl", "boy", "mirror", "people", "group", "clouds", "sitting", "river", "tree", "lake", }; foreach (string tag in paintingTags) { if (analysisResult.generalAnalysisResult.Description.Tags.Contains(tag)) { cumulativeConfidence += 0.1f; } } // if an image has any of these tags it's less likely to be a painting string[] notPaintingTags = { "stone", "wooden", "sign", "window", }; foreach (string tag in notPaintingTags) { if (analysisResult.generalAnalysisResult.Description.Tags.Contains(tag)) { cumulativeConfidence -= 0.1f; } } string[] paintingDescriptions = { "standing in a room", "posing for the camera", "looking at the camera", "a view of", "a close up of a person", "painting", "in front of a mirror", "a group of people", }; if (analysisResult.generalAnalysisResult.Description.Captions.Count() != 0) { foreach (string description in paintingDescriptions) { if (analysisResult.generalAnalysisResult.Description.Captions[0].Text.Contains(description)) { cumulativeConfidence += 0.4f; } } } Console.WriteLine("Painting confidence: " + cumulativeConfidence); return(cumulativeConfidence); }
static void CreateAppraisals(PostToTwitterMode postToTwitterMode, int numberOfAppraisals) { Console.WriteLine("Getting collection listing"); Art art = new Art(new IArtSource[] { new HarvardArtMuseum(), new MetropolitanMuseumOfArt() }); IEnumerable <Art.Object> responseObjects = art.GetRandomObjects(numberOfAppraisals); Console.WriteLine("Found " + responseObjects.Count() + " results"); int objectCounter = 0; foreach (Art.Object responseObject in responseObjects) { Console.WriteLine("-----------------------------------------------------------------------"); string imageUrl = responseObject.imageURL; Console.WriteLine("image url: " + imageUrl); string fullListingURL = responseObject.listingURL; Console.WriteLine("Listing page: " + fullListingURL); Bitmap originalImage = Web.DownloadImage(imageUrl); if (originalImage != null) { Bitmap resizedImage = ImageTransforms.ResizeToWithinAnalysisLimits(originalImage); if (Directory.Exists("images")) { string originalDestinationFilePath = @"images/sourceImage" + objectCounter + ".jpg"; originalImage.Save(originalDestinationFilePath); string resizedDestinationFilePath = @"images/resizedImage" + objectCounter + ".jpg"; resizedImage.Save(resizedDestinationFilePath); } ComputerVisionService.AnalysisBlob analysisBlob = ComputerVisionService.GetAnalysisBlob(resizedImage); string tagString = ""; foreach (string tag in analysisBlob.generalAnalysisResult.Description.Tags) { tagString += tag + ", "; } Console.WriteLine("Tags: " + tagString); string accentColor = ColorTable.GetClosestColorName(analysisBlob.generalAnalysisResult.Color.AccentColor); Console.WriteLine("Foreground: " + analysisBlob.generalAnalysisResult.Color.DominantColorForeground + " Background: " + analysisBlob.generalAnalysisResult.Color.DominantColorBackground + " Accent: " + accentColor); if (analysisBlob.generalAnalysisResult.Categories != null) { string categoryString = ""; foreach (Category category in analysisBlob.generalAnalysisResult.Categories) { categoryString += category.Name + ", "; } Console.WriteLine("Categories: " + categoryString); } Appraisal appraisal = CreateAppraisal(originalImage, analysisBlob); string tweetableText = GetTweetableText(appraisal.comment, responseObject.listingURL, responseObject.artSourceHashTag); if (Directory.Exists("images")) { string destinationFilePath = @"images/finalImage" + objectCounter + ".jpg"; appraisal.image.Save(destinationFilePath); using (StreamWriter file = File.CreateText(@"images/comment" + objectCounter + ".txt")) { file.WriteLine(tweetableText); } } if (postToTwitterMode == PostToTwitterMode.Yes) { TweetAppraisal(appraisal.image, tweetableText); } } objectCounter++; } }
public static bool IsSign(ComputerVisionService.AnalysisBlob analysisResult) { return(GetSignConfidence(analysisResult) >= 0.5f); }