/// <summary> /// Распознавание. /// </summary> /// <param name="pathToSettings">Путь к файлу настроек.</param> private static void DoRecognize(string pathToSettings) { Console.Clear(); var path = string.Empty; ConsoleExtensions.WriteWithColors(ConsoleColor.Black, ConsoleColor.Green, "Вас приветствует распознавание!"); if (pathToSettings.Equals(string.Empty)) { ConsoleExtensions.WriteWithColors(ConsoleColor.Black, ConsoleColor.Green, "\nВведите путь до файла настроек:"); path = Console.ReadLine(); } else { ConsoleExtensions.WriteWithColors(ConsoleColor.Black, ConsoleColor.Blue, $"\nНайден последний сохранённый файл настроек.\nДиректория: {pathToSettings}" + $"\nНажмите enter, чтобы использовать данный файл, либо введите путь до файла настроек:"); var input = Console.ReadLine(); if (input.Equals(string.Empty)) { path = pathToSettings; } else { path = input; } } var recognizeUtil = new RecognizeUtil(path); while (true) { ConsoleExtensions.WriteWithColors(ConsoleColor.Black, ConsoleColor.Green, "\nВведите путь до файла с изображением, чтобы распознать его:"); var pathToImage = Console.ReadLine(); // Для отладки. /**/ if (pathToImage.Equals("default")) { pathToImage = @"C:\Лабы\Учёба (3 семестр)\CNN2\CNN\BL\Resources\0\0(0).bmp"; } /**/ if (!File.Exists(pathToImage)) { throw new Exception($"Не удалось найти файл по указанному пути!\nДиректория: {pathToImage}"); } var image = PathToImageConverter.LoadImages(new List <string> { pathToImage }).First(); var resizedImage = NormilizeUtil.ResizeImage(image, 6, 6); var normilizedMatrix = NormilizeUtil.GetNormilizedMatrixFromImage(resizedImage); var answer = recognizeUtil.ToRecognizeData(normilizedMatrix); ConsoleExtensions.WriteWithColors(ConsoleColor.Black, ConsoleColor.Cyan, answer); Console.WriteLine("Введите 0, чтобы распознать другое изображение.\n" + "Введите 1, чтобы выйти в меню."); var input = Console.ReadLine(); if (input.Equals("1")) { break; } } }
/// <summary> /// Распознать изображение. /// </summary> /// <param name="data">Данные весов.</param> private static void RecognizeImage(Dictionary <BL.Enums.WeightsType, Dictionary <int, List <double> > > data) { Console.WriteLine(ConsoleMessageConstants.PATH_MESSAGE); var pathToImages = Console.ReadLine(); if (string.IsNullOrEmpty(pathToImages)) { pathToImages = PathHelper.GetResourcesPath(); } if (!Directory.Exists(pathToImages)) { ErrorHelper.DirectoryError(); } var filesInDirectory = Directory.GetFiles(pathToImages).ToList(); var imagesInDirectory = filesInDirectory.FindAll(file => file.Contains(FileConstants.IMAGE_EXTENSION)); ErrorHelper.CheckFiles(imagesInDirectory); var imageName = string.Empty; var breakFlag = false; do { Console.BackgroundColor = ConsoleColor.Blue; Console.ForegroundColor = ConsoleColor.Black; Console.WriteLine(ConsoleMessageConstants.IMAGES_IN_DIRECTORY_MESSAGE); imagesInDirectory.ForEach(imagePath => Console.WriteLine(Path.GetFileNameWithoutExtension(imagePath) + " ")); Console.Write(ConsoleMessageConstants.FILE_NAME_MESSAGE); imageName = Console.ReadLine(); if (imagesInDirectory.Contains(Path.Combine(pathToImages, imageName + FileConstants.IMAGE_EXTENSION))) { breakFlag = true; } Console.BackgroundColor = ConsoleColor.Black; Console.ForegroundColor = ConsoleColor.Green; } while (!breakFlag); var fullPath = Path.Combine(pathToImages, $"{imageName}{FileConstants.IMAGE_EXTENSION}"); if (!data.TryGetValue(BL.Enums.WeightsType.Hidden, out var hiddenLayerWeights)) { ErrorHelper.GetDataError(); } if (!data.TryGetValue(BL.Enums.WeightsType.Output, out var outputLayerWeights)) { ErrorHelper.GetDataError(); } var imageConverterUtil = new ImageConverterUtil(new List <string> { fullPath }); var imageMatrixList = imageConverterUtil.ConvertImagesToMatrix(); var imageData = imageMatrixList.FirstOrDefault(); if (imageData == null) { ErrorHelper.GetDataError(); } var recognizeUtil = new RecognizeUtil(outputLayerWeights, hiddenLayerWeights, imageData); recognizeUtil.InitializeNetwork(); }