![Разработка алгоритма на языке программирования Python «Обучение нейронной сети» Пуховская Анастасия, 9 класс, МБОУ «Брянская СОШ» Научный руководитель: Кречман Ольга Алексеевна](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img0.jpg)
Разработка алгоритма на языке программирования Python
«Обучение нейронной сети»
Пуховская Анастасия,
9 класс, МБОУ «Брянская СОШ»
Научный руководитель:
Кречман Ольга Алексеевна
![Код будущего](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img1.jpg)
Код будущего
![Нейронные сети Нейронные сети относятся к направлению ИИ и применяются для распознавания скрытых закономерностей в необработанных данных. Нейронные сети - это компьютерные системы, моделирующие работу человеческого мозга и могут обучаться на большом количестве информации](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img2.jpg)
Нейронные сети
Нейронные сети относятся к направлению ИИ и применяются для распознавания скрытых закономерностей в необработанных данных.
Нейронные сети - это компьютерные системы, моделирующие работу человеческого мозга и могут обучаться на большом количестве информации
![Цель, гипотеза и задачи исследования Задачи : Цель: Создание приложения на языке Python для обучения нейронной сети Гипотеза : Мы предполагаем, что в домашних условиях можно обучить нейронную сеть распознавать людей на фотографии Изучить научную и учебную литературу по проблеме обучения нейронной сети, историю ИИ Разработать алгоритм создания приложения для обучения нейронной сети Запустить приложение, произвести тестирование Провести эксперимент с разными фотографиями](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img3.jpg)
Цель, гипотеза и задачи исследования
Задачи :
Цель:
Создание приложения на языке Python для обучения нейронной сети
Гипотеза :
Мы предполагаем, что в домашних условиях можно обучить нейронную сеть распознавать людей на фотографии
- Изучить научную и учебную литературу по проблеме обучения нейронной сети, историю ИИ
- Разработать алгоритм создания приложения для обучения нейронной сети
- Запустить приложение, произвести тестирование
- Провести эксперимент с разными фотографиями
![Объект и предмет исследования Объектом исследования является обучение нейронной сети Предмет исследования – алгоритм для создания приложения по обучению нейронной сети на языке Python](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img4.jpg)
Объект и предмет исследования
Объектом исследования
является обучение нейронной сети
Предмет исследования
– алгоритм для создания приложения по обучению нейронной сети на языке Python
![Методы исследования метод машинного обучения изучение компьютерных технологий и математики метод искусственного интеллекта](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img5.jpg)
Методы исследования
- метод машинного обучения
- изучение компьютерных технологий и математики
- метод искусственного интеллекта
![Официальный сайт Python](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img6.jpg)
Официальный сайт Python
![Этап практический Устанавливаем нужные библиотеки import sys from PyQt6.QtWidgets import QApplication, QHBoxLayout, QMainWindow, QPushButton, QSpinBox, QVBoxLayout, QWidget, QFileDialog, QLabel, QErrorMessage from PyQt6.QtGui import QImage,QPixmap import cv2 import numpy as np # Импортируем из PyQt 6 нужные виджеты, кнопки, окна и т.д.](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img7.jpg)
Этап практический
Устанавливаем нужные библиотеки
import sys from PyQt6.QtWidgets import QApplication, QHBoxLayout, QMainWindow, QPushButton, QSpinBox, QVBoxLayout, QWidget, QFileDialog, QLabel, QErrorMessage from PyQt6.QtGui import QImage,QPixmap import cv2 import numpy as np
# Импортируем из PyQt 6 нужные виджеты, кнопки, окна и т.д.
![Создаем классы, функции](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img8.jpg)
Создаем классы, функции
Программный код Приложения готов
https:// disk.yandex.ru/d/W2aFlESNlIWnhg
Ссылка на папку Яндекс-диск:
- Файл Python
- Текст кода в Word
- Пример фотографии
- Результат работы приложения
import sys from PyQt6.QtWidgets import QApplication, QHBoxLayout, QMainWindow, QPushButton, QSpinBox, QVBoxLayout, QWidget, QFileDialog, QLabel, QErrorMessage from PyQt6.QtGui import QImage,QPixmap import cv2 import numpy as np
class MainWindow(QMainWindow): def __init__(self): super(MainWindow,self).__init__() self.setWindowTitle("ImageTracer") main_layout = QVBoxLayout() top_bar_layout = QHBoxLayout() image_bar_layout = QHBoxLayout() self.source_filename = None self.source_image_data = None self.result_image_data = None self.max_img_height = 400 self.max_img_width = 600 select_image_button = QPushButton('Select Image') process_image_button = QPushButton('Process!') select_image_button.clicked.connect(self.choose_source_image) process_image_button.clicked.connect(self.process_image) for btn in [select_image_button,process_image_button]: btn.setFixedHeight(30) btn.setFixedWidth(100) self.r_select = QSpinBox() self.g_select = QSpinBox() self.b_select = QSpinBox() self.threshold_select = QSpinBox() for start_val, prefix, spinbox in zip([30,1,72,152],['Threshold','R','G','B'], [self.threshold_select,self.r_select,self.g_select,self.b_select]): spinbox.setPrefix(f'{prefix}:') spinbox.setMinimum(0) spinbox.setMaximum(255) spinbox.setValue(start_val) spinbox.setFixedWidth(130) top_bar_layout.addWidget(select_image_button) top_bar_layout.addWidget(self.r_select) top_bar_layout.addWidget(self.g_select) top_bar_layout.addWidget(self.b_select) top_bar_layout.addWidget(self.threshold_select) top_bar_layout.addWidget(process_image_button) self.source_image = ImageWidget() self.result_image = ImageWidget() self.source_image.setMaximumSize(self.max_img_width, self.max_img_height) self.result_image.setMaximumSize(self.max_img_width, self.max_img_height) source_image_layout = QVBoxLayout() source_image_layout.addWidget(QLabel("Source image:")) source_image_layout.addWidget(self.source_image) result_image_layout = QVBoxLayout() result_image_layout.addWidget(QLabel("Result image:")) result_image_layout.addWidget(self.result_image) image_bar_layout.addLayout(source_image_layout) image_bar_layout.addLayout(result_image_layout) bottom_bar_layout = QHBoxLayout() self.save_button = QPushButton('Save as file') self.save_button.clicked.connect(self.save_as_file) self.save_button.setFixedWidth(300) bottom_bar_layout.addWidget(self.save_button) self.percent_traced_label = QLabel() bottom_bar_layout.addWidget(self.percent_traced_label) main_layout.addLayout(top_bar_layout) main_layout.addLayout(image_bar_layout) main_layout.addLayout(bottom_bar_layout) widget = QWidget() widget.setLayout(main_layout) self.setCentralWidget(widget) def choose_source_image(self): self.source_filename=QFileDialog.getOpenFileName()[0] self.source_image_data.cv2.imread(self.source_filename) source_image_resized=resize_image(self.source_image_data,self.max_img_width,self.max_img_height) self.source_image.setPixmap(pixmap_from_cv_image(source_image_resized)) def process_image(self): if self.source_image_data is None: error_dialog=QErrorMessage() error_dialog.showMessage('No image selected') error_dialog.exec() else: self.result_image_data,percent_traced=get_image_mask(self.source_image_data, [self.r_select.value(),self.g_select.value(), self.b_select.value()], self.threshold_select.value()) self.percent_traced_label.setText(f'Percent of image traced: {(percent_traced * 100):.3f}%') result_image_resized=resize_image(self.result_image_data,self.max_img_width,self.max_img_height) self.result_image.setPixmap(pixmap_from_cv_image(result_image_resized)) def save_as_file(self): if self.result_image_data is None: error_dialog=QErrorMessage() error_dialog.showMessage('No image process') error_dialog.exec() else: filename = QFileDialog.getSaveFileName(self,'Save file')[0] if len(filename)0: cv2.imwrite(filename,self.result_image_data) class ImageWidget(QLabel): def __init__(self, parent=None): super().__init__(parent) self.setScaledContents(True) def hasHeightForWidth(self): return self.pixmap() is not None def heightForWidth(self,w): if self.pixmap(): try: return int(w*(self.pixmap().height() / self.pixmap().width())) except ZeroDivisionError: return 0 def resize_image(image_data,max_img_width,max_img_height): scale_percent = min(max_img_width/image_data.shape[1],max_img_height/image_data.shape[0]) width = int(image_data.shape[1]*scale_percent) height = int(image_data.shape[0]*scale_percent) newSize = (width,height) image_resized = cv2.resize(image_data,newSize,None,None,None,cv2.INTER_AREA) return image_resized def pixmap_from_cv_image(cv_image): height, width, _ =cv_image.shape bytesPerLine = 3*width qImg = QImage(cv_image.data,width,height,bytesPerLine,QImage.Format.Format_RGB888).rgbSwapped() return QPixmap(qImg) def get_image_mask(img,blue_shade,diff): lower = np.array([max(0,val)for val in [blue_shade[2]-diff,blue_shade[1]-diff,blue_shade[0]-diff]], dtype=np.uint8) upper=np.array([min(255,val)for val in [blue_shade[2]+diff,blue_shade[1]+diff,blue_shade[0]+diff]], dtype=np.uint8) mask = cv2.inRange(img,lower,upper) percent_traced = np.sum(mask0)/(mask.shape[0]*mask.shape[1]) return cv2.cvtColor(mask,cv2.COLOR_BGR2RGB),percent_traced app =QApplication(sys.argv) window = MainWindow() window.show() app.exec()
![Отладка кода и компиляция](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img10.jpg)
Отладка кода и компиляция
![Результат выполнения кода Приложение готово 12 12](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img11.jpg)
Результат выполнения кода
Приложение готово
12
12
![Нажимаем «Выбрать изображение» 12](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img12.jpg)
Нажимаем «Выбрать изображение»
12
![Нажимаем Process! 12](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img13.jpg)
Нажимаем Process!
12
![Идет процесс обучения готовой нейросети 12](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img14.jpg)
Идет процесс обучения готовой нейросети
12
![Нейронная сеть распознает людей на фото 12 12](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img15.jpg)
Нейронная сеть распознает людей на фото
12
12
![Эксперимент 17 17](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img16.jpg)
Эксперимент
17
17
![Практическая значимость Приложение предоставляет владельцу помощь в работе в особо вредных и опасных условиях (военных зонах). Мы планируем расширить возможности нашего приложения для распознавания птиц, животных на фото и видео. Аппаратная часть для продолжения проекта у нас уже есть, и необходимо дополнить приложение. Уверены, что у нас всё получится! 17](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img17.jpg)
Практическая значимость
Приложение предоставляет владельцу помощь в работе в особо вредных и опасных условиях (военных зонах).
Мы планируем расширить возможности нашего приложения для распознавания птиц, животных на фото и видео. Аппаратная часть для продолжения проекта у нас уже есть, и необходимо дополнить приложение.
Уверены, что у нас всё получится!
17
![Спасибо за внимание! 17](https://fsd.videouroki.net/html/2024/08/30/v_66d17ab131112/img18.jpg)
Спасибо за внимание!
17