コード例 #1
0
        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
            });
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public static bool IsPainting(ComputerVisionService.AnalysisBlob analysisResult)
 {
     return(GetPaintingConfidence(analysisResult) >= 0.5f);
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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++;
            }
        }
コード例 #6
0
 public static bool IsSign(ComputerVisionService.AnalysisBlob analysisResult)
 {
     return(GetSignConfidence(analysisResult) >= 0.5f);
 }