Инфоурок Информатика Другие методич. материалыПрактическая работа по информатике на тему "Техническое зрение и нейронные сети"

Практическая работа по информатике на тему "Техническое зрение и нейронные сети"

Скачать материал

Практическая работа
по теме «Техническое зрение и нейронные сети»

Цель: познакомиться с библиотеками OpenCV и TensorFlow языка программирования python, научиться с помощью них обрабатывать изображения и выполнять простейшие задачи классификации

Задание № 1. Установка библиотеки OpenCV в проект программы PyCharm

1.       Запустите программу PyCharm и создайте новый проект с виртуальной средой (в группе Python Interpreter выбрать New environment using). В папке проекта будет папка venv, в которой находится виртуальный интерпретатор Python такой же версии, что и системный интепретатор, но с отдельными библиотеками.

 

Изображение выглядит как текст

Автоматически созданное описание

 

Дождитесь автоматической настройки виртуальной среды проекта

 

 

2.       Закройте созданный файл main.py (если появился) и создайте свой в корневом каталоге в инспекторе файлов проекта.

 

Изображение выглядит как текст

Автоматически созданное описание

 

3.       Установите необходимую библиотеку. Для этого нужно открыть настройки File -> Settings и в появившемся окне найти Python Interpreter, где выбрать виртуальный интерпретатор проекта.

 

Изображение выглядит как текст, монитор, снимок экрана, внутренний

Автоматически созданное описание

 

4.       Добавьте к существующим библиотекам OpenCV. Нажмите на + и найдите opencv-python в списке, затем выберите её и нажмите на Install Package. После этого можно закрыть диалоговые окна

Изображение выглядит как текст

Автоматически созданное описание

 

5.       Напишите тестовый вывод версии библиотеки. В коде импортируйте в программу установленную библиотеку и выведите на экран её версию. Запустите программу

 

import cv2

print(cv2.__version__)

 

 

Изображение выглядит как текст

Автоматически созданное описание

 

Изображение выглядит как текст

Автоматически созданное описание


ЗАДАНИЕ 2. ОСНОВЫ OPENCV. ВЫВОД ИЗОБРАЖЕНИЯ НА ЭКРАН

1.       Скачайте любое изображение и перенесите его в локальное расположение проекта. Локальное расположение файлов проекта можно узнать в строке инспектора файлов. Также можно открыть проводник по этим файлам, вызвав контекстное меню и выбрав в нём пункт Open In

 

Изображение выглядит как текст, снимок экрана, монитор, черный

Автоматически созданное описание

 

2.       Напишите программу по образцу, исключая строки с комментариями:

 

# импортирование библиотеки opencv
import cv2
# чтение изображения из файла в переменную img
img = cv2.imread('man.jpg')
# Создание окна с именем Image и вывод в него изображения из переменной img
cv2.imshow("Image", img)
# print(img.shape)
# ожидание нажатия любой клавиши для продолжения работы программы
cv2.waitKey(0)
# удаление всех окон
cv2.destroyAllWindows()

 

 

3.       Запустите созданную программу средствами PyCharm. Проанализируйте принцип работы алгоритма.

Изображение выглядит как текст, снимок экрана, монитор, внутренний

Автоматически созданное описание

4.       Добавьте в программу строчку вывода разрешения изображения в терминал

print(img.shape)

Определите, что в выводимом кортеже является высотой и шириной изображения. Почему глубина изображения равна трём?

Дополнительно. Напишите программу, которая открывает и выводит по очереди несколько изображений

 

Задание 3. Основы OpenCV. Обрезка изображения

1.       Создайте новую программу по образцу без указания комментариев

 

import cv2
img = cv2.imread(
'man.jpg')
print(img.shape)
# срез матрицы изображения по высоте и запись в переменную cut_img_1
cut_img_1 = img[0:200, :]
# срез матрицы изображения по ширине и запись в переменную cut_img_2
cut_img_2 = img[:, 200:499]
# срез матрицы изображения по двум координатам и запись в переменную cut_img_3
cut_img_3 = img[300:499, 100:250]
cv2.imshow(
"Image-1", cut_img_1)
cv2.imshow(
"Image-2", cut_img_2)
cv2.imshow(
"Image-3", cut_img_3)
cv2.waitKey(
0)
cv2.destroyAllWindows()

 

 

2.       Запустите программу и проанализируйте принцип работы алгоритма

 

3.       3. Напишите свою программу, которая обрезает выбранный вами принт из предлагаемого набора в файле prints.png

Подсказка. Программа, которая обрезает свечу в наборе, выглядит следующим образом:

 

import cv2
img = cv2.imread(
'prints.png')
cut_img = img[
150:300, 20:140]
cv2.imshow(
"Cut Image", cut_img)
cv2.waitKey(
0)
cv2.destroyAllWindows()

 

 

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

 

ЗАДАНИЕ 4. ОСНОВЫ OPENCV. НАЛОЖЕНИЕ ИЗОБРАЖЕНИЯ

1.       Создайте новую программу по образцу

 

import cv2
print_img = cv2.imread(
'prints.png')
cut_img = print_img[
150:300, 20:140]
man_img = cv2.imread(
'man.jpg')
man_img[
150:300, 200:320] = cut_img
cv2.imshow(
"Image", man_img)
cv2.waitKey(
0)
cv2.destroyAllWindows()

 

 

2.       Запустите программу и проанализируйте принцип работы алгоритма

 

Изображение выглядит как текст, снимок экрана, внутренний, монитор

Автоматически созданное описание

 

3.       Напишите свою программу для вставки выбранного вами принта из предыдущего задания в новое изображение (например, )

4.       Измените размер изображения принта с помощью функции

cv2.resize(изображение, (новая ширина, новая высота))

Пример:

 

import cv2
print_img = cv2.imread(
'prints.png')
cut_img = print_img[
150:300, 20:140]
cut_img = cv2.resize(cut_img
, (160, 200))
man_img = cv2.imread(
'man.jpg')
man_img[
130:330, 180:340] = cut_img
cv2.imshow(
"Image", man_img)
cv2.waitKey(
0)
cv2.destroyAllWindows()

 

Дополнительно.

Напишите программу, которая вставляет на футболку несколько принтов (на ваш выбор)

 

ЗАДАНИЕ 5. ВЫВОД ВИДЕОПОТОКА С WEB-КАМЕРЫ

1.       Напишите программу по следующему примеру:

# импортирование библиотеки OpenCV
import cv2
# инициализация камеры, подключённой компьютеру
cap = cv2.VideoCapture(0)
# бесконечный цикл вывода видеопотока на экран
while True:
   
# получение флага успешности чтения кадра и самого кадра с камеры
   
success, frame = cap.read()
   
# если кадр получен, то выводим его на экран, иначе пишем сообщение об ошибке и выходим из цикла
   
if success:
        cv2.imshow(
"Result", frame)
       
# если нажата клавиша "пробел", то завершаем работу программы
       
if cv2.waitKey(1) & 0xFF == ord(' '):
           
break
    else
:
       
print("Error!")
       
break
# закрываем все созданные окна
cv2.destroyAllWindows()
# освобождаем камеру
cap.release()

 

2.       Запустите программу и проанализируйте принцип работы алгоритма

 

 

3.       С помощью метода shape, изученного на прошлом уроке, выведите в консоль размер кадров

 

4.       С помощью инструментов для работы с многомерными массивами (срезы списков) сделайте кадры квадратными, обрезав их по левому и правому краю

 

5.       С помощью функции cv2.resize(изображение, (новая ширина, новая высота)) сделайте изображение размером 224x224 пикселя

 

ЗАДАНИЕ 6. СОЗДАНИЕ СТОП-КАДРА

1.       Напишите программу по следующему примеру:

# импортирование библиотеки OpenCV
import cv2
# импортирование библиотеки для работы с датой и временем datetime
import datetime
# инициализация камеры, подключённой компьютеру
cap = cv2.VideoCapture(0)
# бесконечный цикл вывода кадров на экран
while True:
   
# получение флага успешности чтения кадра и самого кадра с камеры
   
success, frame = cap.read()
   
# получение текущей даты и времени
   
now = datetime.datetime.now()
   
if success:
       
# наложение на кадр текста - текущего времени в формате ЧАСЫ:МИНУТЫ:СЕКУНДЫ
        # определённого шрифта, размера, цвета и жирности
       
cv2.putText(frame, now.strftime("%H:%M:%S"), (10, 30),
                                           cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
       
# вывод кадра на экран
       
cv2.imshow("Result", frame)
       
if cv2.waitKey(1) & 0xFF == ord(' '):
           
# запись текущего кадра в графический файл с именем в формате frame_чч_мм_сс.jpg
           
cv2.imwrite("frame_" + now.strftime("%H_%M_%S") + ".jpg", frame)
           
break
    else
:
       
print("Error!")
       
break
# закрытие окон и освобождение камеры
cv2.destroyAllWindows()
cap.release()

 

2.        Запустите программу и проанализируйте принцип работы алгоритма

Изображение выглядит как текст, монитор, компьютер, внутренний

Автоматически созданное описание

Изображение выглядит как текст, снимок экрана, монитор, компьютер

Автоматически созданное описание

3.       Исправьте программу, чтобы изображение сохранялось без метки времени (подсказка: нужно создать копию кадра для вывода на экран (с помощью функции copy), на которую будет накладываться метка времени, а в функцию imwrite необходимо подставлять оригинальный кадр)

 

4.       Примените зеркальное отражение к стоп-кадру с помощью функции cv2.flip(). Данный метод принимает два параметра – исходное изображение и ось для отражения. В качестве осей может быть следующие числа: 0 – по вертикали, 1 – по горизонтали, (-1) – по вертикали и по горизонтали.

Например, отображение по горизонтали делается так:

image = cv2.flip(image,1)

ЗАДАНИЕ 7. РАСПОЗНАВАНИЕ ИЗОБРАЖЕНИЙ С ПОМОЩЬЮ НЕЙРОННОЙ СЕТИ

1.       Зайдите на сайт https://teachablemachine.withgoogle.com/ и выберите создание стандартной модели классификатора изображений

 

 

2.       Обучите модель на распознавание 3 предметов и фона

 

Изображение выглядит как текст

Автоматически созданное описание

 

3.       Сделайте экспорт полученной модели нейронной сети, сохранив файл keras_model.h5 в папке своего проекта

Изображение выглядит как текст

Автоматически созданное описание

 

4.       Напишите программу для распознавания изображения и проанализируйте принцип работы алгоритма. В качестве изображений используйте стоп-кадры, сделанные с помощью предыдущей программы. Не забудьте заменить имена меток (названия классов изображений):

import cv2
import numpy as np
# импортирование инструментов работы с моделью нейронной сети
from tensorflow.keras.models import load_model
# загрузка модели нейронной сети из файла keras_model.h5
model = load_model('keras_model.h5')
# создание массива имён меток (должны быть в том же порядке, что и при тренировке нейронной сети)
labels = ['label 1', 'label 2', 'label 3', 'nothing']
# чтение файла изображения в переменную img
img = cv2.imread('frame_20_30_41.jpg')
# изменение размера изображения на 224x224 - размер входного слоя загруженной нейронной сети
img = cv2.resize(img, (224, 224))
# нормализация матрицы изображения - все значения пикселей приводятся к диапазону [0, 1]
img = img.astype("float32") / 255.0
# приведение массива изображения к нужной форме для подачи в нейронную сеть –
# вытягивание матрицы в вектор)
img = np.expand_dims(img, axis=0)
# получение прогноза нейронной сети при распознавании текущего изображения
prediction = model.predict(img)
# вывод прогноза в необработанном виде - значения выходного слоя нейронной сети
print(prediction)
# вывод вероятностей соотнесения с каждым классом изображения
for i in range(len(labels)):
    probability =
str(round(prediction[0][i], 2)) + '%'
   
print(labels[i], probability, sep=' - ')

 

Дополнительно: в последнем цикле сделайте вывод классов в порядке убывания их вероятностей

 

 

 

 

 ЗАДАНИЕ 8. РАСПОЗНАВАНИЕ ОБЪЕКТОВ НА ВИДЕОПОТОКЕ

1.       Напишите программу и проанализируйте принцип работы алгоритма. Добавьте комментарии к написанному коду.

import cv2
from tensorflow.keras.models import load_model
import numpy as np
model = load_model(
'keras_model.h5')
labels = [
'label 1', 'label 2', 'label 3', 'nothing']
cap = cv2.VideoCapture(
0)
while True:
    success
, imageOrig = cap.read()
   
if success:
        image = cv2.resize(imageOrig
, (224, 224))
        image = image.astype(
"float32") / 255.0
       
image = np.expand_dims(image, axis=0)
        prediction = model.predict(image)
        name = labels[prediction.argmax(
axis=1)[0]]
        cv2.putText(imageOrig
, name, (10, 30),
                                              cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
        cv2.imshow(
"Result image", imageOrig)
       
if cv2.waitKey(1) & 0xFF == ord(' '):
           
break
    else
:
       
print("Error!")
       
break
cv2.destroyAllWindows()
cap.release()

 

2.       Добавьте к тексту на кадрах, помимо названия класса, процент его прогноза

 

Дополнительно: добавьте вывод на кадрах имена всех классов с их прогнозом в порядке убывания

 

Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Практическая работа по информатике на тему "Техническое зрение и нейронные сети""

Методические разработки к Вашему уроку:

Получите новую специальность за 2 месяца

Инструктор по волейболу

Получите профессию

Технолог-калькулятор общественного питания

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 670 616 материалов в базе

Скачать материал

Другие материалы

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 22.11.2021 580
    • DOCX 4.4 мбайт
    • 10 скачиваний
    • Оцените материал:
  • Настоящий материал опубликован пользователем Сёмочкин Алексей Викторович. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Сёмочкин Алексей Викторович
    Сёмочкин Алексей Викторович
    • На сайте: 7 лет и 6 месяцев
    • Подписчики: 0
    • Всего просмотров: 1358
    • Всего материалов: 2

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Секретарь-администратор

Секретарь-администратор (делопроизводитель)

500/1000 ч.

Подать заявку О курсе

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

Особенности подготовки к сдаче ОГЭ по информатике и ИКТ в условиях реализации ФГОС ООО

36 ч. — 180 ч.

от 1700 руб. от 850 руб.
Подать заявку О курсе
  • Сейчас обучается 101 человек из 40 регионов
  • Этот курс уже прошли 808 человек

Курс профессиональной переподготовки

Информационные системы и технологии: теория и методика преподавания в профессиональном образовании

Преподаватель информационных систем и технологий

300/600 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Этот курс уже прошли 13 человек

Курс профессиональной переподготовки

Педагогическая деятельность по проектированию и реализации образовательного процесса в общеобразовательных организациях (предмет "Информатика")

Учитель информатики

300 ч. — 1200 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Этот курс уже прошли 20 человек

Мини-курс

Управление техническими ресурсами и экономикой предприятия

4 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Постановка базовых звуков раннего онтогенеза

2 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Привязанность и воспитание

3 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 73 человека из 37 регионов
  • Этот курс уже прошли 28 человек