Пример #1
0
        static async Task MainAsync(string[] args)
        {
            /* you need at least 2 tags and 5 images for each tag to start*/

            //generate random name for the project
            var projectName = Guid.NewGuid().ToString();

            Console.WriteLine($"\tCreating a project in customvision.ai - project name: {projectName}");
            var project = CreateProject(projectName);


            var basepath = Directory.GetCurrentDirectory();

            //read tags
            var tsgfilepath = $"{basepath}\\tags.csv";

            Console.WriteLine($"\tReading Tags from {tsgfilepath}");
            var tags = ReadTags(tsgfilepath);


            //download images -
            var trainingSetPath = $"{basepath}\\{projectName}\\data\\TrainingSet";
            var testSetPath     = $"{basepath}\\{projectName}\\data\\TestSet";

            Console.WriteLine($"\tBing search & downloading images - split them in TrainingSet & TestSet for each tag");
            Console.WriteLine($"\tTrainingSetPath: {trainingSetPath}");
            Console.WriteLine($"\tTestSetPath: {testSetPath}");
            System.IO.Directory.CreateDirectory(trainingSetPath);
            System.IO.Directory.CreateDirectory(testSetPath);


            int minTrainingPhotosCount = 5;
            int minTestPhotosCount     = 3;

            foreach (var tag in tags)
            {
                {
                    using (var bingImageSearchService = new BingImageSearchService())
                    {
                        Console.WriteLine($"\tStarting the Process for : {tag}");

                        var bingresult = await bingImageSearchService.ImageSearch(tag, 20);

                        if (bingresult.value == null)
                        {
                            return;
                        }
                        //training
                        Console.WriteLine($"\tDownloading the training set");
                        var trainingphotos = DownloadImages($"{trainingSetPath}\\{tag}", bingresult.value.ToList(), minTrainingPhotosCount);
                        //test
                        Console.WriteLine($"\tDownloading the test set");
                        var testphotos = DownloadImages($"{testSetPath}\\{tag}", bingresult.value.Skip(trainingphotos).ToList(), minTestPhotosCount);

                        if (trainingphotos < minTrainingPhotosCount || testphotos < minTestPhotosCount)
                        {
                            throw new Exception($"Bing couldn't find required images.you need at least 2 tags and 5 images for each tag to start");
                        }
                    }
                }
            }

            CreateTheModel(trainingSetPath, project);

            // Now there are images with tags start training the project
            TrainTheModel(project);

            Console.WriteLine($"\tTesting the Model");

            TestingTheModel(testSetPath, project);
        }
Пример #2
0
        static async Task MainAsync(string[] args)
        {
            /* you need at least 2 tags and 5 images for each tag to start*/


            var basepath = Directory.GetCurrentDirectory();

            //read tags
            var tsgfilepath = $"{basepath}\\tags.csv";

            Console.WriteLine($"\tReading Tags from {tsgfilepath}");
            var tags = ReadTags(tsgfilepath);

            //generate random name for the project
            var projectName = tags.Count == 2 ? $"{tags[0]} {tags[1]} classifier {DateTime.Now:yyyyMMddHHmm}" : DateTime.Now.ToString("yyyyMMddHHmm");

            Console.WriteLine($"\tCreating a project in customvision.ai - project name: {projectName}");

            var project = CreateProject(projectName);

            //download images -
            var imagesresouce   = $"{basepath}\\{projectName}\\data\\";
            var trainingSetPath = $"{imagesresouce}TrainingSet";
            var testSetPath     = $"{imagesresouce}TestSet";

            Console.WriteLine($"\tBing search & downloading images - split them in TrainingSet & TestSet for each tag");
            Console.WriteLine($"\tTrainingSetPath: {trainingSetPath}");
            Console.WriteLine($"\tTestSetPath: {testSetPath}");
            System.IO.Directory.CreateDirectory(trainingSetPath);
            System.IO.Directory.CreateDirectory(testSetPath);



            var minTrainingPhotosCount = int.Parse(ConfigurationManager.AppSettings["TrainingImagesCount"]);
            var minTestPhotosCount     = int.Parse(ConfigurationManager.AppSettings["TestImagesCount"]);

            var sizeOfImageSet = (minTrainingPhotosCount + minTestPhotosCount) * 3;

            var augmentTrainingImages = bool.Parse(ConfigurationManager.AppSettings["AugmentTrainingImages"]);

            foreach (var tag in tags)
            {
                {
                    using (var bingImageSearchService = new BingImageSearchService())
                    {
                        Console.WriteLine($"\tStarting the Process for : {tag}");

                        var bingresult = await bingImageSearchService.ImageSearch(tag, sizeOfImageSet);

                        if (bingresult.value == null)
                        {
                            return;
                        }
                        //
                        using (var writer = new StreamWriter($"{imagesresouce}\\{tag}_resource.csv"))
                        {
                            using (var csvWriter = new CsvWriter(writer))
                            {
                                csvWriter.WriteRecords(bingresult.value);
                            }
                        }

                        var randomize = bool.Parse(ConfigurationManager.AppSettings["Randomize"]);
                        var imageList = bingresult.value.ToList();
                        if (randomize)
                        {
                            imageList.Shuffle();
                        }
                        //training
                        Console.WriteLine($"\tDownloading the training set");
                        var trainingphotos = await DownloadImagesAsync($"{trainingSetPath}\\{tag}", imageList, minTrainingPhotosCount, augmentTrainingImages);

                        //test
                        Console.WriteLine($"\tDownloading the test set");
                        var testphotos = await DownloadImagesAsync($"{testSetPath}\\{tag}", imageList.Skip(trainingphotos).ToList(), minTestPhotosCount);

                        if (trainingphotos < minTrainingPhotosCount || testphotos < minTestPhotosCount)
                        {
                            throw new Exception($"Bing couldn't find required images.you need at least 2 tags and 5 images for each tag to start");
                        }
                    }
                }
            }



            CreateTheModel(trainingSetPath, project);

            // Now there are images with tags start training the project
            TrainTheModel(project);

            Console.WriteLine($"\tTesting the Model");

            TestingTheModel(testSetPath, project);
        }
Пример #3
0
        static async Task MainAsync(string[] args)
        {
            /* you need at least 2 tags and 5 images for each tag to start*/

            var basepath = Directory.GetCurrentDirectory();

            //read tags
            var tsgfilepath = $"{basepath}\\tags.csv";

            Console.WriteLine($"\tReading Tags from {tsgfilepath}");
            var tags = ReadTags(tsgfilepath);

            //generate random name for the project if projectname isn't passed in
            string projectName = string.Empty;

            try
            {
                projectName = ConfigurationManager.AppSettings["ProjectName"];
            }
            catch { }

            if (projectName == string.Empty)
            {
                projectName = tags.Count == 2 ? $"{tags[0]} {tags[1]} classifier {DateTime.Now:yyyyMMddHHmm}" : DateTime.Now.ToString("yyyyMMddHHmm");
            }

            Console.WriteLine($"\tCreating or returning project in customvision.ai - project name: {projectName}");
            var project = CreateProject(projectName);

            //download images -
            var imagesresouce   = $"{basepath}\\{projectName}\\data\\";
            var trainingSetPath = $"{imagesresouce}TrainingSet";
            var testSetPath     = $"{imagesresouce}TestSet";

            Console.WriteLine($"\tBing search & downloading images - split them in TrainingSet & TestSet for each tag");
            Console.WriteLine($"\tTrainingSetPath: {trainingSetPath}");
            Console.WriteLine($"\tTestSetPath: {testSetPath}");
            try {
                // create the directory if it doesn't already exist
                System.IO.Directory.CreateDirectory(trainingSetPath);
            }
            catch { }
            try
            {
                // create the directory if it doesn't already exist
                System.IO.Directory.CreateDirectory(testSetPath);
            }
            catch { }

            int sizeOfImageSet = 10;

            try
            {
                sizeOfImageSet = Convert.ToInt16(ConfigurationManager.AppSettings["SizeOfImageSet"]); //recommend 100
            }
            catch { }

            bool PerformImageDownload = true;

            try
            {
                PerformImageDownload = Convert.ToBoolean(ConfigurationManager.AppSettings["PerformImageDownload"]);
            }
            catch { }

            if (PerformImageDownload)
            {
                foreach (var tag in tags)
                {
                    {
                        using (var bingImageSearchService = new BingImageSearchService())
                        {
                            Console.WriteLine($"\tStarting the Process for : {tag}");
                            string tagResource = $"{imagesresouce}\\{tag}_resource.csv";
                            try
                            {
                                // if it exists from a previous run delete it
                                System.IO.File.Delete(tagResource);
                            }
                            catch { }

                            var bingresult = await bingImageSearchService.ImageSearch(tag, sizeOfImageSet);

                            if (bingresult.value == null)
                            {
                                return;
                            }
                            //
                            using (var writer = new StreamWriter(tagResource))
                            {
                                using (var csvWriter = new CsvWriter(writer))
                                {
                                    csvWriter.WriteRecords(bingresult.value);
                                }
                            }

                            Console.WriteLine($"\tDownloading the training and test set");
                            var trainingphotos = DownloadImages(projectName, tag, bingresult.value.ToList(), sizeOfImageSet);
                        }
                    }
                }
            }

            bool TrainModel = true;

            try
            {
                TrainModel = Convert.ToBoolean(ConfigurationManager.AppSettings["TrainModel"]);
            }
            catch { }

            if (TrainModel)
            {
                Console.WriteLine($"\tCreating the Model");
                CreateTheModel(trainingSetPath, project);

                // Now there are images with tags start training the project
                TrainTheModel(project);
            }

            bool TestModel = true;

            try
            {
                TestModel = Convert.ToBoolean(ConfigurationManager.AppSettings["TestModel"]);
            }
            catch { }

            if (TestModel)
            {
                Console.WriteLine($"\tTesting the Model");
                TestingTheModel(testSetPath, project);
            }
        }