Exemplo n.º 1
0
        private void DifferentFragmentationsRecognitionButton_Click(object sender, EventArgs e)
        {
            OpenFileDialog FiguresToRecognizeFileDialog = new OpenFileDialog();

            MessageBox.Show("Все данные по будут помещены в лог " + DefaultDifferentFragmentationsRecognitionLog, "Форма", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

            try
            {
                //Сброс матрицы весов
                WeightsMatrixCheckBox.Checked = false;

                FiguresToRecognizeFileDialog.Filter      = "Изображения " + DefaultImageExtension + "|*" + DefaultImageExtension; //"Файлы|*.bmp";
                FiguresToRecognizeFileDialog.Multiselect = true;

                if (FiguresToRecognizeFileDialog.ShowDialog() == DialogResult.OK)
                {
                    //Создание и предварительная запись образов для каждого изображения
                    {
                        foreach (String CurrentFigureFile in FiguresToRecognizeFileDialog.FileNames)
                        {
                            //Работа с образом
                            Obraz CurrentFigureObraz = new Obraz(CurrentFigureFile);

                            String FigureFileName = Path.GetFileNameWithoutExtension(CurrentFigureFile);

                            CurrentFigureObraz.WriteObrazLog(FigureFileName);
                        }
                    }

                    //Инициализация лога
                    String RecognitionLogFilePath = Directory.GetCurrentDirectory() + "\\" + DefaultDifferentFragmentationsRecognitionLog;

                    File.Delete(RecognitionLogFilePath);


                    foreach (String FilePath in FiguresToRecognizeFileDialog.FileNames)
                    {
                        String FileName = Path.GetFileName(FilePath);

                        File.AppendAllText(RecognitionLogFilePath, FileName + ";");
                    }

                    File.AppendAllText(RecognitionLogFilePath, Environment.NewLine + Environment.NewLine);

                    //Распознавание для различных разбиений
                    foreach (uint Y_fragment in Y_fragmentationsArray)
                    {
                        foreach (uint X_fragment in X_fragmentationsArray)
                        {
                            SetMainPerceptronVectorLength(Y_fragment, X_fragment);

                            //Обучение при текущих разбиениях
                            TeachOnAllTeachingSets(Y_fragment, X_fragment);

                            File.AppendAllText(RecognitionLogFilePath, Y_fragment.ToString() + " " + X_fragment.ToString() + ";");

                            foreach (String CurrentFigureFile in FiguresToRecognizeFileDialog.FileNames)
                            {
                                String ImageName = Path.GetFileNameWithoutExtension(CurrentFigureFile);

                                //Загрузка образов
                                Obraz CurrentFigureObraz = new Obraz();

                                String CurrentFigureObrazFilePath = Directory.GetCurrentDirectory()
                                                                    + DefaultRecognitionInformationCatalog
                                                                    + Obraz.GetDefaultObrazName(ImageName);

                                CurrentFigureObraz.LoadObrazFromFile(CurrentFigureObrazFilePath);

                                //Работа с вектором

                                Vector CurrentFigureVector = new Vector(CurrentFigureObraz, Y_fragment, X_fragment);

                                CurrentFigureVector.WriteVectorLog(ImageName);

                                //Получение ответа
                                String NeuralNetworkAnswer = MainPerceptron.GetAnswerFromVector(CurrentFigureVector.complete_vector);

                                //Запись в лог распознавания

                                File.AppendAllText(RecognitionLogFilePath, NeuralNetworkAnswer + ";");
                            }

                            File.AppendAllText(RecognitionLogFilePath, Environment.NewLine);   //Закрытие строки лога распознавания
                        }
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Ошибка при попытке распознавания вне функции распознавания", "Форма", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            finally
            {
                if (FiguresToRecognizeFileDialog != null)
                {
                    FiguresToRecognizeFileDialog.Dispose();
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Обучение на всех обучающих наборах
        /// </summary>
        /// <param name="Y_frag">Разбиения вертикальной составляющей</param>
        /// <param name="X_frag">Разбиения горизонтальной составляющей</param>
        /// <returns>Количество итераций, за которое произошло полное обучение</returns>
        private uint TeachOnAllTeachingSets(uint Y_frag, uint X_frag)
        {
            try
            {
                SetMainPerceptronVectorLength(Y_frag, X_frag);

                //Если не создан каталог для хранения информации об обучающих наборах
                String TeachingSetsInformationCatalogPath = Directory.GetCurrentDirectory() + DefaultTeachingSetsInformationCatalog;

                if (!Directory.Exists(TeachingSetsInformationCatalogPath))
                {
                    Directory.CreateDirectory(TeachingSetsInformationCatalogPath);
                }


                uint TeachingSetsCount = Convert.ToUInt32(TeachingSetsCountTextBox.Text); //Количество заданных обучающих наборов

                bool EveryTeachingSuccessful = false;                                     //Прошло ли каждое обучение успешно

                uint IterationsAmount = 0;                                                //Количество итераций


                //Цикл обучения
                while (!EveryTeachingSuccessful)
                {
                    EveryTeachingSuccessful = true;

                    for (uint CurrentTeachingSet = 0; CurrentTeachingSet < TeachingSetsCount; ++CurrentTeachingSet)                 //Проход по всем обучающим наборам
                    {
                        for (uint CurrentFigureIndex = 0; CurrentFigureIndex < MainPerceptron.Figures_Amount; ++CurrentFigureIndex) //Проход по каждой фигуре в наборе
                        {
                            //Работа с образом

                            Obraz CurrentObraz = new Obraz(); //Образ текущего изображения

                            //Создание образов необходимо только на первом этапе для создания векторов
                            if (IterationsAmount == 0)
                            {
                                String ObrazName =
                                    Obraz.GetDefaultObrazName
                                    (
                                        Path.GetFileNameWithoutExtension
                                        (
                                            GetDefaultTeachingSetFileName(MainPerceptron.figures_array[CurrentFigureIndex], CurrentTeachingSet)
                                        )
                                    );                                                                              //Имя образа изображения

                                String CurrentFigureObrazFilePath = TeachingSetsInformationCatalogPath + ObrazName; //Путь к файлу текущего образа

                                if (File.Exists(CurrentFigureObrazFilePath))                                        //Попытка получения уже существующего образа
                                {
                                    CurrentObraz.LoadObrazFromFile(CurrentFigureObrazFilePath);
                                }
                                else  //Создание нового образа
                                {
                                    String CurrentFigureFilePath = TeachingSetsFilePaths.ElementAt(( int )(CurrentTeachingSet * MainPerceptron.Figures_Amount + CurrentFigureIndex));      //Путь к текущему файлу изображения

                                    CurrentObraz = new Obraz(CurrentFigureFilePath);

                                    CurrentObraz.WriteObrazLog(Path.GetFileNameWithoutExtension(CurrentFigureFilePath), DefaultTeachingSetsInformationCatalog);
                                }
                            }

                            //Работа с вектором

                            Vector CurrentVector = new Vector();

                            //Попытка получения уже существующего вектора
                            if (IterationsAmount != 0)
                            {
                                String VectorName =
                                    Vector.GetDefaultVectorName
                                    (
                                        Path.GetFileNameWithoutExtension
                                        (
                                            GetDefaultTeachingSetFileName(MainPerceptron.figures_array[CurrentFigureIndex], CurrentTeachingSet)
                                        )
                                    ); //Имя вектора изображения

                                String CurrentFigureVectorPath = TeachingSetsInformationCatalogPath + VectorName;

                                if (File.Exists(CurrentFigureVectorPath))
                                {
                                    CurrentVector.LoadVectorFromFile(CurrentFigureVectorPath, Y_frag, X_frag);
                                }
                            }
                            else //Создание нового вектора
                            {
                                String CurrentFigureFilePath = TeachingSetsFilePaths.ElementAt(( int )(CurrentTeachingSet * MainPerceptron.Figures_Amount + CurrentFigureIndex));      //Путь к текущему файлу изображения

                                CurrentVector = new Vector(CurrentObraz, Y_frag, X_frag);

                                CurrentVector.WriteVectorLog(Path.GetFileNameWithoutExtension(CurrentFigureFilePath), DefaultTeachingSetsInformationCatalog);
                            }

                            //Обучение

                            bool CurrentTeachingResult = MainPerceptron.TeachPerceptronOnFigure(CurrentVector.complete_vector, MainPerceptron.figures_array[CurrentFigureIndex]);     //Попытка обучения

                            if (CurrentTeachingResult == false)
                            {
                                EveryTeachingSuccessful = false;
                            }
                        }
                    }

                    ++IterationsAmount;
                }

                return(IterationsAmount);
            }
            catch (Exception)
            {
                MessageBox.Show("Ошибка при обучении на всех обучающих наборах во внутренней функции", "Форма", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return(0);
            }
        }