Оглавление:

Камень-ножницы-бумага AI: 11 шагов
Камень-ножницы-бумага AI: 11 шагов

Видео: Камень-ножницы-бумага AI: 11 шагов

Видео: Камень-ножницы-бумага AI: 11 шагов
Видео: Аниме "Камень, ножницы, бумага" (создано нейросетями) 2024, Ноябрь
Anonim
Камень-ножницы-бумага AI
Камень-ножницы-бумага AI

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

Шаг 1. Вещи, использованные в этом проекте

Компоненты оборудования

  • Raspberry Pi 3 Модель B + × 1
  • Модуль камеры Raspberry Pi V2 × 1
  • Микро-серводвигатель SG90 × 1

Программные приложения

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Шаг 2: Идея?

Image
Image

Поработав над разными проектами в разных областях, я задумал сделать забавный проект и решил сделать игру камень-ножницы-бумага:)

В этом проекте мы создадим интерактивную игру и будем играть против компьютера, на котором для принятия решений работает ИИ. AI использует камеру, подключенную к Raspberry Pi, чтобы распознать, что движет пользователь, сделанное рукой, и классифицировать их в лучшую категорию (метку) камень, бумагу или ножницы. Когда компьютер начинает движение, шаговый двигатель, подключенный к Raspberry Pi, указывает направление, основанное на его движении.

Правила, которые необходимо учитывать в этой игре:

  • Рок притупляет ножницы
  • Бумага покрывает скалу
  • Ножницы режут бумагу

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

Шаг 3: Приступаем к работе?

Начиная ?
Начиная ?
Начиная ?
Начиная ?

Raspberry Pi

Я использовал Raspberry Pi 3 Model B +, который имеет большие улучшения и более мощный, чем более ранний Raspberry Pi 3 Model B.

Raspberry Pi 3 B + интегрирован с 64-разрядным четырехъядерным процессором с тактовой частотой 1,4 ГГц, двухдиапазонной беспроводной локальной сетью, Bluetooth 4.2 / BLE, более быстрым Ethernet и поддержкой Power-over-Ethernet (с отдельной PoE HAT).

Технические характеристики: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-разрядная SoC @ 1,4 ГГц, 1 ГБ LPDDR2 SDRAM, 2,4 и 5 ГГц IEEE 802.11.b / g / n / ac беспроводная локальная сеть, Bluetooth 4.2, BLE, Gigabit Ethernet через USB 2.0 (максимальная пропускная способность 300 Мбит / с), расширенный 40-контактный разъем GPIO, полноразмерные порты HDMI4 USB 2.0, порт камеры CSI для подключения камеры Raspberry Pi, порт дисплея DSI для подключения сенсорного дисплея Raspberry Pi 4-полюсный стереовыход и композитный видеопорт, порт Micro SD для загрузки операционной системы и хранения данных Вход питания постоянного тока 5 В / 2,5 А, поддержка Power-over-Ethernet (PoE) (требуется отдельная шляпа PoE).

Серводвигатель

Мы используем серводвигатель SG-90, двигатель с высоким крутящим моментом, который может выдерживать нагрузку до 2,5 кг (1 см).

USB-камера

USB-камера для интерактивной обработки изображений.

Некоторые соединительные кабели используются для подключения шагового двигателя и Raspberry Pi.

Шаг 4. Записать Raspbian на SD-карту?

Записать Raspbian на SD-карту?
Записать Raspbian на SD-карту?
Записать Raspbian на SD-карту?
Записать Raspbian на SD-карту?
Записать Raspbian на SD-карту?
Записать Raspbian на SD-карту?

Raspbian - это предпочтительный дистрибутив Linux, работающий на Raspberry Pi. В этом руководстве мы будем использовать версию Lite, но также можно использовать версию для ПК (которая поставляется с графической средой).

  • Скачайте Etcher и установите его.
  • Подключите устройство чтения SD-карт с SD-картой внутри.
  • Откройте Etcher и выберите на своем жестком диске файл Raspberry Pi.img или.zip, который вы хотите записать на SD-карту.
  • Выберите SD-карту, на которую хотите записать изображение.
  • Проверьте свой выбор и нажмите "Вспышка!" чтобы начать запись данных на SD-карту.

Подключите устройство к вашей сети

  • Включите доступ по SSH, добавив пустой файл ssh, снова помещенный в корень загрузочного тома на SD-карте.
  • Вставьте SD-карту в Raspberry Pi. Он загрузится примерно через 20 секунд. Теперь у вас должен быть SSH-доступ к вашему Raspberry Pi. По умолчанию его имя хоста будет raspberrypi.local. На вашем компьютере откройте окно терминала и введите следующее:

ssh [email protected]

Пароль по умолчанию - малиновый.

Здесь я использовал отдельный монитор для взаимодействия с Raspberry Pi.

Шаг 5: Сбор набора данных? ️

Сбор набора данных? ️
Сбор набора данных? ️
Сбор набора данных? ️
Сбор набора данных? ️

Первый шаг в этом проекте - сбор данных. Система должна идентифицировать жест руки, распознавать действие и соответственно заставлять его двигаться.

Устанавливаем несколько библиотек на Raspberry Pi с помощью pip install

команда.

sudo apt-get update && sudo apt-get upgradedesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip install opencv pip install numpy pip install scikit-learn pip install scikit-image pip install h5py pip install Keras pip установить команду tensorflow установить программу Werkzeug установить программу Keras-Applications установить программу Keras-Preprocessing установить программу keras-squeezenet установить программу Astor установить программу тензорборда установить программу оценки тензорного потока установить программу оценки потока установить mock pip установить grpcio pip установить absl-pypip установить gast pip установить joblib pip install Markdown pip install protobuf pip install PyYAML pip install six

Если у вас возникнут проблемы с OpenCVpackage, я настоятельно рекомендую установить эти пакеты.

sudo apt-get install libhdf5-dev

sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test

Мы установили все необходимые зависимости для этого проекта. Набор данных состоит из коллекций и размещения изображений под соответствующими ярлыками.

Здесь мы создаем изображения набора данных для этикетки «камень, бумага и ножницы», используя следующий фрагмент.

roi = frame [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

Изображение захватывается для каждой этикетки (камень, бумага, ножницы и «Нет»).

Шаг 6: Создание сети и обучение модели ⚒️⚙️

Создание сети и обучение модели ⚒️⚙️
Создание сети и обучение модели ⚒️⚙️

Ядром этого проекта является классификатор изображений, который классифицирует одну из трех категорий. Чтобы создать этот классификатор, мы используем предварительно обученную CNN (сверточную сеть) под названием SqueezeNet.

Здесь мы используем Keras и TensorFlow для создания модели SqueezeNet, которая может идентифицировать жест. Изображения, которые мы создали на предыдущем шаге, используются для обучения модели. Модель обучается с использованием набора данных, созданного ни для одной из упомянутых эпох (циклов).

Модель настроена с гиперпараметрами, как показано ниже.

модель = Последовательный ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Отсев (0,5), Convolution2D (NUM_CLASSES; (1, 1), padding = 'valid'), Активация ('relu'), GlobalAveragePooling2D (), Активация (softmax)])

Пока модель обучается, вы можете определить потери и точность модели для каждой Эпохи, и точность возрастет в какой-то момент времени после нескольких Эпох.

Примерно 2 часа ушло на создание модели с максимальной точностью после 10 эпох. Если вы столкнетесь с какими-либо ошибками выделения памяти, выполните следующие действия (спасибо Адриану)

Чтобы увеличить пространство подкачки, откройте / etc / dphys-swapfile и затем отредактируйте переменную CONF_SWAPSIZE:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Обратите внимание, что я увеличиваю размер подкачки со 100 МБ до 1024 МБ. Оттуда перезапустите службу подкачки:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

Примечание:

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

Шаг 7: Тестирование модели ✅

Тестирование модели ✅
Тестирование модели ✅
Тестирование модели ✅
Тестирование модели ✅
Тестирование модели ✅
Тестирование модели ✅

После создания модели будет создан выходной файл "камень-ножницы-бумага-модель.h5". Этот файл используется в качестве источника для проверки того, может ли система идентифицировать различные жесты рук и различать действия.

Модель загружается в скрипт python следующим образом

model = load_model ("камень-ножницы-бумага-модель.h5")

Камера считывает тестовое изображение и преобразует требуемую цветовую модель, а затем изменяет размер изображения до 227 x 227 пикселей (тот же размер, что и для создания модели). Изображения, которые использовались для обучения модели, можно использовать для тестирования созданной модели.

img = cv2.imread (путь к файлу)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

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

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Прогноз: {}". format (move_name))

Запустите сценарий test.py, чтобы протестировать модель с различными тестовыми изображениями.

python3 test.py

Теперь модель готова обнаруживать и понимать жесты рук.

Шаг 8: игра камень-ножницы-бумага

Игра камень-ножницы-бумага
Игра камень-ножницы-бумага

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

cap = cv2. VideoCapture (0) # Для захвата изображения с камеры

Теперь давайте сделаем игру в нормальном режиме, в котором система / Raspberry Pi делает снимок руки, анализирует и идентифицирует жест руки. Затем с помощью генератора случайных чисел разыгрывается ход компьютера. Победитель выбирается на основе правил и затем отображается на экране. Запустите игру, используя следующую команду.

python3 play.py

Шаг 9: Интеграция серводвигателя?

Наконец, добавьте в этот проект серводвигатель. Сервомотор - это вывод 17 GPIO Raspberry Pi, который имеет функцию ШИМ для управления углом поворота.

Серводвигатель, используемый в этом проекте, - SG-90. Он может вращаться по часовой стрелке и против часовой стрелки до 180 °.

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

Сервомотор - Raspberry Pi

Vcc - + 5В

GND - GND

Сигнал - GPIO17

В этом проекте используются такие библиотеки, как RPi. GPIO и time.

импортировать RPi. GPIO как GPIO

время импорта

Затем вывод GPIO настраивается на ШИМ, используя следующие строки

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

Вывод 17 GPIO настроен для использования в качестве ШИМ на частоте 50 Гц. Угол серводвигателя достигается путем установки рабочего цикла (Ton & Toff) ШИМ.

нагрузка = угол / 18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

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

Я взял диаграмму и разрезал ее на три части: камень, бумага и ножницы. Серводвигатель закреплен в центре диаграммы. Стрелка / заслонка соединена с валом серводвигателя. Этот вал указывает на движение компьютера в соответствии с логикой, вычисленной в сценарии.

Шаг 10: Работа над проектом?

Image
Image

А теперь время для игр. Посмотрим, как работает проект.

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

Поднимите палец вверх, если это действительно помогло вам, и подписывайтесь на мой канал за интересными проектами.:)

Поделитесь этим видео, если хотите.

Рад, что вы подписались:

Спасибо за прочтение!

Шаг 11: Код - Репозиторий проекта

Код добавлен в репозиторий GitHub, который можно найти в разделе кода.

Rahul24-06 / Камень-ножницы-бумага -

Рекомендуемые: