Beispiel #1
0
        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, "Неможливо відкрити файл!");
                }
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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 = "Готово";
            }));
        }
Beispiel #5
0
        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;
            });
        }
Beispiel #6
0
        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";
            }));
        }
Beispiel #7
0
        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;
            });
        }
Beispiel #8
0
        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;
                    }
                });
            });
        }
Beispiel #9
0
        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;
                    }
                });
            });
        }