Меню
Разработки
Разработки  /  Информатика  /  Презентации  /  9 класс  /  ЦОР Разработка алгоритма для обучения нейронной сети на Python

ЦОР Разработка алгоритма для обучения нейронной сети на Python

Цифровой образовательный ресурс включает в себя презентацию на тему Разработка алгоритма для обучения нейронной сети на Python
30.08.2024

Содержимое разработки

Разработка алгоритма на языке программирования Python «Обучение нейронной сети»   Пуховская Анастасия, 9 класс, МБОУ «Брянская СОШ» Научный руководитель: Кречман Ольга Алексеевна

Разработка алгоритма на языке программирования Python

«Обучение нейронной сети»

 

Пуховская Анастасия,

9 класс, МБОУ «Брянская СОШ»

Научный руководитель:

Кречман Ольга Алексеевна

Код будущего

Код будущего

Нейронные сети Нейронные сети относятся к направлению ИИ и применяются для распознавания скрытых закономерностей в необработанных данных. Нейронные сети - это компьютерные системы, моделирующие работу человеческого мозга и могут обучаться на большом количестве информации

Нейронные сети

Нейронные сети относятся к направлению ИИ и применяются для распознавания скрытых закономерностей в необработанных данных.

Нейронные сети - это компьютерные системы, моделирующие работу человеческого мозга и могут обучаться на большом количестве информации

Цель, гипотеза и задачи исследования Задачи : Цель:  Создание приложения на языке Python для обучения нейронной сети  Гипотеза : Мы предполагаем, что в домашних условиях можно обучить нейронную сеть распознавать людей на фотографии Изучить научную и учебную литературу по проблеме обучения нейронной сети, историю ИИ Разработать алгоритм создания приложения для обучения нейронной сети Запустить приложение, произвести тестирование Провести эксперимент с разными фотографиями

Цель, гипотеза и задачи исследования

Задачи :

Цель:

Создание приложения на языке Python для обучения нейронной сети

Гипотеза :

Мы предполагаем, что в домашних условиях можно обучить нейронную сеть распознавать людей на фотографии

  • Изучить научную и учебную литературу по проблеме обучения нейронной сети, историю ИИ
  • Разработать алгоритм создания приложения для обучения нейронной сети
  • Запустить приложение, произвести тестирование
  • Провести эксперимент с разными фотографиями

Объект   и предмет исследования Объектом исследования является обучение нейронной сети Предмет исследования –  алгоритм для создания приложения по обучению нейронной сети на языке Python

Объект и предмет исследования

Объектом исследования

является обучение нейронной сети

Предмет исследования

алгоритм для создания приложения по обучению нейронной сети на языке Python

Методы исследования метод машинного обучения изучение компьютерных технологий и математики метод искусственного интеллекта  

Методы исследования

  • метод машинного обучения
  • изучение компьютерных технологий и математики
  • метод искусственного интеллекта

 

Официальный сайт Python

Официальный сайт 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  нужные виджеты, кнопки, окна и т.д.

Этап практический

Устанавливаем нужные библиотеки

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 нужные виджеты, кнопки, окна и т.д.

Создаем классы, функции

Создаем классы, функции

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()   " width="640"

Программный код Приложения готов

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()

 

Отладка кода и компиляция

Отладка кода и компиляция

Результат выполнения кода Приложение готово 12 12

Результат выполнения кода

Приложение готово

12

12

Нажимаем «Выбрать изображение» 12

Нажимаем «Выбрать изображение»

12

Нажимаем Process! 12

Нажимаем Process!

12

Идет процесс  обучения готовой нейросети 12

Идет процесс обучения готовой нейросети

12

Нейронная сеть распознает людей на фото 12 12

Нейронная сеть распознает людей на фото

12

12

Эксперимент 17 17

Эксперимент

17

17

Практическая значимость Приложение предоставляет владельцу помощь в работе в особо вредных и опасных условиях (военных зонах). Мы планируем расширить возможности нашего приложения для распознавания птиц, животных на фото и видео. Аппаратная часть для продолжения проекта у нас уже есть, и необходимо дополнить приложение. Уверены, что у нас всё получится! 17

Практическая значимость

Приложение предоставляет владельцу помощь в работе в особо вредных и опасных условиях (военных зонах).

Мы планируем расширить возможности нашего приложения для распознавания птиц, животных на фото и видео. Аппаратная часть для продолжения проекта у нас уже есть, и необходимо дополнить приложение.

Уверены, что у нас всё получится!

17

Спасибо за внимание! 17

Спасибо за внимание!

17

-80%
Курсы повышения квалификации

Система работы с высокомотивированными и одаренными учащимися по учебному предмету

Продолжительность 72 часа
Документ: Удостоверение о повышении квалификации
4000 руб.
800 руб.
Подробнее
Скачать разработку
Сохранить у себя:
ЦОР Разработка алгоритма для обучения нейронной сети на Python (6.01 MB)

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт