private static async Task <bool> MainAsync(string[] args) { try { trainingApi.ApiKey = CustomVisionTrainingApiKey; // Create project var projects = await trainingApi.GetProjectsAsync(); var project = projects.Where(x => x.Name == projectName).FirstOrDefault(); if (project == null) { Console.WriteLine($"\nCreating project '{projectName}'"); project = await trainingApi.CreateProjectAsync(projectName); } // Retrieve all tags var tagsList = await trainingApi.GetTagsAsync(project.Id); #region Create Object tag var objectTag = tagsList.Tags.Where(x => x.Name == objectTagName).FirstOrDefault(); if (objectTag == null) { Console.WriteLine($"\nCreating tag '{objectTagName}'"); objectTag = await trainingApi.CreateTagAsync(project.Id, objectTagName); } // add images to tag Console.WriteLine($"\nAdding images to tag '{objectTagName}'"); List <ImageFileCreateEntry> imageFiles = (Directory.GetFiles(objectTrainImagesPath)).Select(img => new ImageFileCreateEntry(Path.GetFileName(img), File.ReadAllBytes(img))).ToList(); await trainingApi.CreateImagesFromFilesAsync(project.Id, new ImageFileCreateBatch(imageFiles, new List <Guid>() { objectTag.Id })); #endregion #region Create Ocean tag var oceanTag = tagsList.Tags.Where(x => x.Name == oceanTagName).FirstOrDefault(); if (oceanTag == null) { Console.WriteLine($"\nCreating tag '{oceanTagName}'"); oceanTag = await trainingApi.CreateTagAsync(project.Id, oceanTagName); } // add images Console.WriteLine($"\nAdding images to tag '{oceanTagName}'"); imageFiles = (Directory.GetFiles(noObjectTrainImagesPath)).Select(img => new ImageFileCreateEntry(Path.GetFileName(img), File.ReadAllBytes(img))).ToList(); await trainingApi.CreateImagesFromFilesAsync(project.Id, new ImageFileCreateBatch(imageFiles, new List <Guid>() { oceanTag.Id })); #endregion #region Train the classifier Console.WriteLine("\nTraining"); var iteration = await trainingApi.TrainProjectAsync(project.Id); do { Thread.Sleep(1000); iteration = await trainingApi.GetIterationAsync(project.Id, iteration.Id); }while (string.Equals("training", iteration.Status, StringComparison.OrdinalIgnoreCase)); if (!string.Equals(iteration.Status, "completed", StringComparison.OrdinalIgnoreCase)) { throw new Exception($"An error occurred training the classifier. Iteration status is {iteration.Status}"); } iteration.IsDefault = true; await trainingApi.UpdateIterationAsync(project.Id, iteration.Id, iteration); #endregion Console.WriteLine( $@"\n Your custom vision project ID is {project.Id.ToString()}. Copy this Guid and add it to your application settings under the name 'CustomVisionProjectId' " ); Console.WriteLine("\nFinished. Press Enter to exit"); Console.Read(); return(true); } catch (Exception e) { Console.Write(e); Console.WriteLine("\nPress Enter to exit"); Console.Read(); return(false); } }