public void OnAddLocalImage() { OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Filter = "Image Files|*.BMP;*.JPG;*.JPEG,*.PNG"; fileDialog.ShowDialog(); if (fileDialog.CheckFileExists && fileDialog.FileName != "") { var result = MessageBox.Show("Чи це кіт?", "Це кіт?", MessageBoxButton.YesNo, MessageBoxImage.Question); try { byte[] selectImageBytes; using (var selectFileStream = new FileStream(fileDialog.FileName, FileMode.OpenOrCreate)) { selectImageBytes = new byte[selectFileStream.Length]; selectFileStream.Read(selectImageBytes, 0, (int)selectFileStream.Length); } var localImage = LocalImage.GenerateNewLocalFileFromImageTypeAndData(result == MessageBoxResult.Yes ? ImageType.CAT : ImageType.NOT_CAT, selectImageBytes).Result; LocalImageCollection.Insert(0, localImage); } catch { MessageBox.Show("Неможливо відкрити файл - " + fileDialog.FileName, "Неможливо відкрити файл!"); } } }
public void OnDeleteLocalImage(string filePath) { var result = MessageBox.Show("Впевнені, що хочете видалити це зображення?", "Справді?", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { var toDeleteLocalImage = LocalImageCollection.FirstOrDefault(r => r.LocalPath == filePath); File.Delete(filePath); LocalImageCollection.Remove(toDeleteLocalImage); } }
public void OnDeleteLocalImage(string filePath) { var result = MessageBox.Show("Sure you want to delete this image?", "Really?", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { var toDeleteLocalImage = LocalImageCollection.FirstOrDefault(r => r.LocalPath == filePath); File.Delete(filePath); LocalImageCollection.Remove(toDeleteLocalImage); } }
public void OnConvertRemoteImagesToLocal() { if (RemoteImageCollection.Count == 0) { MessageBox.Show("Немає зображень у віддаленому списку!", "Додайте зображення з CSV файлу"); return; } foreach (var remoteImage in RemoteImageCollection) { remoteImage.Uploaded = false; } this.GeneratingLocalImagesFromRemote = true; var standardStatusMessage = "Перетворення Urls в локальні зображення. Будь ласка, зачекайте... "; this.StatusMessage = standardStatusMessage; var counter = 0; Task task = new Task(() => { Parallel.ForEach(RemoteImageCollection, new ParallelOptions() { MaxDegreeOfParallelism = 5 }, (remoteImage) => { remoteImage.UploadInProgress = true; LocalImage localImage; try { localImage = LocalImage.GenerateLocalImageFromRemote(remoteImage).Result; } catch { remoteImage.Failed = true; return; } App.Current.Dispatcher.Invoke(() => { LocalImageCollection.Insert(0, localImage); remoteImage.Uploaded = true; }); remoteImage.UploadInProgress = false; counter++; this.StatusMessage = (standardStatusMessage + (((double)counter / (double)RemoteImageCollection.Count) * 100).ToString("F2") + "%"); }); }); task.Start(); task.ContinueWith(new Action <Task>((task1) => { this.GeneratingLocalImagesFromRemote = false; this.StatusMessage = "Готово"; })); }
public void OnRefreshLocalImagesFromDirectory() { loadingLocalFilesTaskCancellationToken = new CancellationTokenSource(); loadingLocalFilesTaskCancellationToken.Token.Register(() => { }); this.LoadingFilesFromDirectory = false; Task task = new Task(() => { try { var standardMessage = "Зчитування з папки. Будь ласка, зачекайте..."; this.LoadingFilesFromDirectory = true; this.StatusMessage = standardMessage; App.Current.Dispatcher.Invoke(() => { LocalImageCollection.Clear(); }); var localImages = LocalImage.ReadAllLocalImagesFromDirectory((progress) => { this.StatusMessage = standardMessage + " Прогрес - " + progress.ToString("0") + "%"; }).OrderBy(r => Path.GetFileName(r.LocalPath)); if (localImages.Count() == 0) { MessageBox.Show("Немає зображень у папках", "Немає зображень", MessageBoxButton.OK, MessageBoxImage.Exclamation); } App.Current.Dispatcher.Invoke(() => { foreach (var localImage in localImages) { LocalImageCollection.Add(localImage); } }); this.LoadingFilesFromDirectory = false; this.StatusMessage = "Готово"; } catch (LocalImageFileReadException exception) { MessageBox.Show("Пошкоджене ім'я файлу - " + exception.FilePath, "Файл пошкоджено, видаліть його!"); this.StatusMessage = "Delete: " + exception.FilePath; this.LoadingFilesFromDirectory = false; } }, loadingLocalFilesTaskCancellationToken.Token); task.Start(); task.ContinueWith((t) => { this.StatusMessage = "Готово"; this.LoadingFilesFromDirectory = false; }); }
public void OnConvertRemoteImagesToLocal() { if (RemoteImageCollection.Count == 0) { MessageBox.Show("No Images in Remote Image List to Download!", "Add Remote Images by CSV File"); return; } foreach (var remoteImage in RemoteImageCollection) { remoteImage.Uploaded = false; } this.GeneratingLocalImagesFromRemote = true; var standardStatusMessage = "Converting Remote Urls into LocalImages. Please Wait... "; this.StatusMessage = standardStatusMessage; var counter = 0; Task task = new Task(() => { Parallel.ForEach(RemoteImageCollection, new ParallelOptions() { MaxDegreeOfParallelism = 5 }, (remoteImage) => { remoteImage.UploadInProgress = true; LocalImage localImage; try { localImage = LocalImage.GenerateLocalImageFromRemote(remoteImage).Result; } catch { remoteImage.Failed = true; return; } App.Current.Dispatcher.Invoke(() => { LocalImageCollection.Insert(0, localImage); remoteImage.Uploaded = true; }); remoteImage.UploadInProgress = false; counter++; this.StatusMessage = (standardStatusMessage + (((double)counter / (double)RemoteImageCollection.Count) * 100).ToString("F2") + "%"); }); }); task.Start(); task.ContinueWith(new Action <Task>((task1) => { this.GeneratingLocalImagesFromRemote = false; this.StatusMessage = "Ready"; })); }
public void OnRefreshLocalImagesFromDirectory() { loadingLocalFilesTaskCancellationToken = new CancellationTokenSource(); loadingLocalFilesTaskCancellationToken.Token.Register(() => { }); this.LoadingFilesFromDirectory = false; Task task = new Task(() => { try { var standardMessage = "Reading from directory. Please Wait..."; this.LoadingFilesFromDirectory = true; this.StatusMessage = standardMessage; App.Current.Dispatcher.Invoke(() => { LocalImageCollection.Clear(); }); var localImages = LocalImage.ReadAllLocalImagesFromDirectory((progress) => { this.StatusMessage = standardMessage + " Progress: " + progress + "%"; }).OrderBy(r => Path.GetFileName(r.LocalPath)); if (localImages.Count() == 0) { MessageBox.Show("No Images in the directories", "No Images", MessageBoxButton.OK, MessageBoxImage.Exclamation); } App.Current.Dispatcher.Invoke(() => { foreach (var localImage in localImages) { LocalImageCollection.Add(localImage); } }); this.LoadingFilesFromDirectory = false; this.StatusMessage = "Ready"; } catch (LocalImageFileReadException exception) { MessageBox.Show("Curropt File Name: " + exception.FilePath, "File Curropt, Delete It"); this.StatusMessage = "Delete: " + exception.FilePath; this.LoadingFilesFromDirectory = false; } }, loadingLocalFilesTaskCancellationToken.Token); task.Start(); task.ContinueWith((t) => { this.StatusMessage = "Ready"; this.LoadingFilesFromDirectory = false; }); }
public void OnTrainNeuralNetwork() { if (LocalImageCollection.Count == 0) { MessageBox.Show("Немає зображень в локальному списку для тестування!", "Додайте зображення"); return; } this.GraphData.ClearDataCollection(); trainingTaskCancellationToken = new CancellationTokenSource(); trainingTaskCancellationToken.Token.Register(() => { }); if (NeuralNetwork == null) { MessageBox.Show("Нейронна мережа несумісна", "Помилка нейронної мережі"); return; } UpdateParametersFromNeuralNetwork(); this.TrainingNeuralNetwork = true; var trainingProgressMessage = "Тренування в прогресі. Будь ласка, зачекайте... "; Task task = new Task(() => { App.Current.Dispatcher.Invoke(() => { this.StatusMessage = trainingProgressMessage; this.TrainingNeuralNetwork = true; foreach (var localImage in LocalImageCollection) { localImage.TrainingInProgress = true; localImage.TestFailed = false; localImage.TestPassed = false; } }); var imagesOnEachPage = NeuralNetwork.GetBatchSubSize(); var totalPages = (int)Math.Ceiling((double)LocalImageCollection.Count / (double)imagesOnEachPage); foreach (var mainIteration in Enumerable.Range(1, MaxIterations)) { double avrageIterationError = 0; App.Current.Dispatcher.Invoke(() => { Randomizer.Shuffle(LocalImageCollection); }); foreach (var currentPage in Enumerable.Range(1, totalPages)) { double averagePageError = 0; var currentPageImages = LocalImageCollection.ToPagedList(currentPage, imagesOnEachPage); (var batchInputs, var batchOutputs) = GetBatchDataFromImages(currentPageImages); int batchTrainCounter = 0; NeuralNetwork.BatchTrain(batchInputs, batchOutputs, MaxIterationsOnEachPage, (currentError, pageIteration, message) => { this.StatusMessage = $"{trainingProgressMessage} Повідомлення: {message}; Ітерація: {mainIteration}; Сторінка: {currentPage}/{totalPages}; Ітерація сторінки: {pageIteration}; Помилка: {currentError}"; foreach (var localImage in currentPageImages) { localImage.TrainedIterations = (pageIteration) * (mainIteration); localImage.TrainingInProgress = true; } if (currentError <= StopPageTrainingErrorRate || pageIteration > MaxIterationsOnEachPage) { NeuralNetwork.StopBatchTraining(); } GraphData.AddDataPoint(currentError); averagePageError += currentError; batchTrainCounter++; }); averagePageError /= (double)batchTrainCounter; GraphData.AddPageChanged(); avrageIterationError += averagePageError; GC.Collect(); } GraphData.AddIterationChanged(); avrageIterationError /= totalPages; if (avrageIterationError < StopIterationTrainingErrorRate) { break; } } App.Current.Dispatcher.Invoke(() => { this.StatusMessage = trainingProgressMessage; }); }, trainingTaskCancellationToken.Token); task.Start(); task.ContinueWith((t) => { App.Current.Dispatcher.Invoke(() => { this.StatusMessage = "Готово"; this.TrainingNeuralNetwork = false; foreach (var localImage in LocalImageCollection) { localImage.TrainingInProgress = false; } }); }); }
public void OnTrainNeuralNetwork() { if (LocalImageCollection.Count == 0) { MessageBox.Show("No Images in Local Image List to Train With!", "Add Local Images"); return; } this.GraphData.ClearDataCollection(); trainingTaskCancellationToken = new CancellationTokenSource(); trainingTaskCancellationToken.Token.Register(() => { }); if (NeuralNetwork == null) { MessageBox.Show("Neural Network Incompatible", "Error in Neural Network"); return; } UpdateParametersFromNeuralNetwork(); this.TrainingNeuralNetwork = true; var trainingProgressMessage = "Training in Progress. Please Wait... "; Task task = new Task(() => { App.Current.Dispatcher.Invoke(() => { this.StatusMessage = trainingProgressMessage; this.TrainingNeuralNetwork = true; foreach (var localImage in LocalImageCollection) { localImage.TrainingInProgress = true; localImage.TestFailed = false; localImage.TestPassed = false; } }); var imagesOnEachPage = NeuralNetwork.GetBatchSubSize(); var totalPages = (int)Math.Ceiling((double)LocalImageCollection.Count / (double)imagesOnEachPage); foreach (var mainIteration in Enumerable.Range(1, MaxIterations)) { double avrageIterationError = 0; App.Current.Dispatcher.Invoke(() => { Randomizer.Shuffle(LocalImageCollection); }); foreach (var currentPage in Enumerable.Range(1, totalPages)) { double averagePageError = 0; var currentPageImages = LocalImageCollection.ToPagedList(currentPage, imagesOnEachPage); (var batchInputs, var batchOutputs) = GetBatchDataFromImages(currentPageImages); int batchTrainCounter = 0; NeuralNetwork.BatchTrain(batchInputs, batchOutputs, MaxIterationsOnEachPage, (currentError, pageIteration, message) => { this.StatusMessage = $"{trainingProgressMessage} Message: {message}; Iteration: {mainIteration}; Page: {currentPage}/{totalPages}; Page Iteration: {pageIteration}; Error: {currentError}"; foreach (var localImage in currentPageImages) { localImage.TrainedIterations = (pageIteration) * (mainIteration); localImage.TrainingInProgress = true; } if (currentError <= StopPageTrainingErrorRate || pageIteration > MaxIterationsOnEachPage) { NeuralNetwork.StopBatchTraining(); } GraphData.AddDataPoint(currentError); averagePageError += currentError; batchTrainCounter++; }); averagePageError /= (double)batchTrainCounter; GraphData.AddPageChanged(); avrageIterationError += averagePageError; GC.Collect(); } GraphData.AddIterationChanged(); avrageIterationError /= totalPages; if (avrageIterationError < StopIterationTrainingErrorRate) { break; } } App.Current.Dispatcher.Invoke(() => { this.StatusMessage = trainingProgressMessage; }); }, trainingTaskCancellationToken.Token); task.Start(); task.ContinueWith((t) => { App.Current.Dispatcher.Invoke(() => { this.StatusMessage = "Ready"; this.TrainingNeuralNetwork = false; foreach (var localImage in LocalImageCollection) { localImage.TrainingInProgress = false; } }); }); }