Введение в ML
Задание № 1. Проект “Ответственный водитель”
Обучение собственной модели рассмотрим на примере такой задачи.
Вам поручили разработать систему, которая следит за водителем во время движения автомобиля. Если водитель держит в руках телефон или подносит его к уху, система предупреждает водителя об опасности.
Обучение модели состоит из трёх этапов:
- Сбор примеров для каждого из классов.
- Непосредственное обучения на этих примерах.
- Тестирование модели на данных, которых нет в примерах.
Создаём проект
Откройте сайт Teachable Machine в новой вкладе. С помощью этого сайта вы сможете обучить собственную модель машинного обучения.
Нажмите кнопку Начать. Выберите Проект с изображениями, Стандартная модель с изображениями.
В нашей задаче необходимо классифицировать два состояния: без телефона и с телефоном. Переименуйте классы и дайте им такие названия. Для этого рядом с именем по умолчанию (Class 1, Class 2) нажмите на изображение карандаша .
Добавляем примеры для обучения
Добавим примеры для обучения к первому классу без телефона. Нажмите на следующую кнопку:
Появится изображение с веб-камеры. Теперь нужно собрать образцы изображений на которых будет лицо человека без телефона. Посмотрите в камеру и зажмите кнопку Удерживание для записи. Пока эта кнопка нажата, к классу будут добавляться фотографии с веб-камеры.
Для обучения достаточно собрать 100 образцов. Постарайтесь сделать фотографии на которых вы смотрите в разные стороны.
Теперь нажмите кнопку Веб-Камера в классе с телефоном, чтобы собрать образцы для обучения. Возьмите в руку телефон сделайте ряд фото.
Для обучения достаточно собрать 100 образцов. На фотографиях держите телефон рядом с ухом.
Обучение и тестирование модели
После того, как фотографии для обучения модели сделаны, нажмите кнопку Обучить модель:
Не сворачивайте браузер и не меняйте вкладку, пока идёт обучение модели.
Когда обучение модели закончится, нужно проверить точность классификации. Попросите соседа посмотреть в веб-камеру без телефона и с телефонов возле уха. Под камерой показывается вероятность того, к какому классу относится изображение с веб-камеры:
Обратите внимание, что точность классификации зависит от разнообразия фотографий. Работает ли ваша модель, если телефон в правой руке? левой руке? просто держат в руках перед лицом? видно только часть лица?
Если точность классификации недостаточная, добавьте изображения к классам и повторите обучение модели.
Задание № 2. Проект “Маска”
Откройте сайт Scratch в новой вкладке. В этой версии Scratch можно использовать уже обученные модели. Используем модель, которая даёт нам координаты черт лица. С помощью этой модели создадим собственную маску.
Настройка проекта
Нажмите кнопку Добавить расширение . Щёлкните по расширению с именем Face detection (Обнаружение лица).
Добавятся блоки с помощью которых мы сможем определить координаты черт лица человека.
Перетащите два блока в область для скриптов. В первом выпадающем списке выберите left eye
(левый глаз), а во втором - webcam
(веб-камера):
Щелкните по первому блоку. Браузер попросит разрешения на использование веб-камеры.
Через некоторое время на сцене появится картинка с веб-камеры и блок покажет координату x
для левого глаза:
Добавьте к проекту два спрайта, которые будут располагаться на месте глаз. Можете выбрать готовые спрайты:
или нарисовать спрайт самостоятельно:
Составляем программы
Составьте такую программу для спрайта, который привяжется к левому глазу:
Теперь нажмите на зелёный флажок несколько раз. После каждого нажатия на флажок, спрайт должен оказаться на месте левого глаза.
Постоянно нажимать флажок не удобно, поэтому добавим к скрипту бесконечный цикл:
Нажмите на зелёный флажок и проверьте, работает ли программа. Чтобы остановить скрипт, нажмите на кнопку .
Выберите спрайт, который расположится на месте правого глаза и составьте такой же скрипт как и для левого глаза. В первом выпадающем списке выберите вариант right eye
(правый глаз):
Нажмите на зелёный флажок, чтобы проверить, как работает ваш проект.
Как улучшить проект?
Добавьте ещё один спрайт, который будет располагаться на месте носа.
Задание № 3. Проект “Разминка”
Откройте сайт Scratch в новой вкладке.
Сохраните файл Разминка_старт.sb3. Для этого нажмите правой кнопкой мыши по ссылке и выберите пункт меню Сохранить ссылку как...
.
Настройка проекта
Откройте стартовый проект в Scratch. Для этого выберите пункт меню Файл - Загрузить с компьютера
. В стартовом проекте уже есть три спрайта: Игрок, Метеорит и Звезда. Программы для метеорита и звезды уже составлены. Нажмите зелёный флажок, чтобы проверить это. Метеориты и звезды будут появляться в случайных месте сверху сцены и потом будут двигаться вниз. После столкновения с игроком, метеорит отнимает одно очко, а звезда - добавляет.
Нажмите кнопку Добавить расширение . Щёлкните по расширению с именем Pose detection (Обнаружение позы).
Добавится один блок с помощью которого можно определить координаты рук, ног, плеч и других частей тела.
Для движения спрайта будем считывать расположения плеч игрока с веб-камеры. Разность координат y
левого и правого плеча определит направление движения - влево или вправо.
Проверка готовой модели
Выберите спрайт Игрок и перейдите в раздел Переменные. Нажмите кнопку Создать переменную и создайте переменые с именами y1
и y2
:
Выберите спрайт игрок:
Составьте в этом спрайте следующий скрипт:
- Программа запустится после нажатия на зелёный флажок.
- В переменную
y1
сохраняем координату y правого плеча. - В переменную
y2
сохраняем координату y левого плеча. - Находим разность координат и сохраняем её в переменную
разность
.
Наклонитесь вправо и нажмите на флажок. У переменной разность
должно быть положительное значение. Наклонитесь влево и нажмите флажок У переменной разность
должно быть отрицательное значение.
Добавьте цикл Повторять всегда, чтобы после запуска программы, значение переменных бесконечно обновлялись.
Добавляем управление персонажем
Спрайт с игроком должен двигаться влево или вправо в зависимости от знака переменной разность
. Для проверки знака используем блок если, то ... иначе
. После вычисления разности, добавьте блоки, обведённые рамкой:
Нажмите на зелёный флажок и проверьте программу. Спрайт должен реагировать на то, в какую сторону вы наклоняетесь в веб-камере. Но управление будет слишком чувствительным. Даже когда вы сидите прямо, спрайт будет двигаться.
Добавим ещё одно условие: начинать движение только если разность меньше -15 или больше 15. Иначе игрок должен оставаться на месте.
С помощью блоков из раздела Операторы
составим это условие:
Добавьте блок если
, который будет выполнятся, если составленное условие верно. Поместите блок если, то ... иначе
внутрь блока если
:
Запустите программу и проверьте её работу.
Проект готов.
Как улучшить проект?
Попробуйте использовать в игре координаты других частей тела.