Оглавление:
- Шаг 1. Вещи, использованные в этом проекте
- Шаг 2: Идея?
- Шаг 3: Приступаем к работе?
- Шаг 4. Записать Raspbian на SD-карту?
- Шаг 5: Сбор набора данных? ️
- Шаг 6: Создание сети и обучение модели ⚒️⚙️
- Шаг 7: Тестирование модели ✅
- Шаг 8: игра камень-ножницы-бумага
- Шаг 9: Интеграция серводвигателя?
- Шаг 10: Работа над проектом?
- Шаг 11: Код - Репозиторий проекта
Видео: Камень-ножницы-бумага AI: 11 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:50
Вам когда-нибудь было скучно в одиночестве? Давайте сыграем в камень, ножницы и бумагу против интерактивной системы, наделенной интеллектом.
Шаг 1. Вещи, использованные в этом проекте
Компоненты оборудования
- Raspberry Pi 3 Модель B + × 1
- Модуль камеры Raspberry Pi V2 × 1
- Микро-серводвигатель SG90 × 1
Программные приложения
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Шаг 2: Идея?
Поработав над разными проектами в разных областях, я задумал сделать забавный проект и решил сделать игру камень-ножницы-бумага:)
В этом проекте мы создадим интерактивную игру и будем играть против компьютера, на котором для принятия решений работает ИИ. 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 - это предпочтительный дистрибутив 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. На вашем компьютере откройте окно терминала и введите следующее:
Пароль по умолчанию - малиновый.
Здесь я использовал отдельный монитор для взаимодействия с 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: Работа над проектом?
А теперь время для игр. Посмотрим, как работает проект.
Если у вас возникли проблемы при создании этого проекта, не стесняйтесь спрашивать меня. Пожалуйста, предлагайте новые проекты, которыми вы хотите, чтобы я занимался дальше.
Поднимите палец вверх, если это действительно помогло вам, и подписывайтесь на мой канал за интересными проектами.:)
Поделитесь этим видео, если хотите.
Рад, что вы подписались:
Спасибо за прочтение!
Шаг 11: Код - Репозиторий проекта
Код добавлен в репозиторий GitHub, который можно найти в разделе кода.
Rahul24-06 / Камень-ножницы-бумага -
Рекомендуемые:
Дизайн игры в Flick за 5 шагов: 5 шагов
Дизайн игры в Flick за 5 шагов: Flick - это действительно простой способ создания игры, особенно чего-то вроде головоломки, визуального романа или приключенческой игры
Счетчик шагов - Micro: Bit: 12 шагов (с изображениями)
Счетчик шагов - Микро: Бит: Этот проект будет счетчиком шагов. Мы будем использовать датчик акселерометра, встроенный в Micro: Bit, для измерения наших шагов. Каждый раз, когда Micro: Bit трясется, мы добавляем 2 к счетчику и отображаем его на экране
Играйте в Doom на своем IPod за 5 простых шагов !: 5 шагов
Играйте в Doom на своем IPod за 5 простых шагов!: Пошаговое руководство по двойной загрузке Rockbox на iPod, чтобы играть в Doom и десятки других игр. Это действительно легко сделать, но многие люди до сих пор удивляются, когда видят, как я играю дум на своем iPod, и путаются с инструкциями
Кормушка для рыбы Arduino Uno за 6 простых и простых шагов !: 6 шагов
Arduino Uno Fish Feeder за 6 простых и дешевых шагов !: Итак, для этого проекта может потребоваться немного предыстории. Людям с домашними рыбками, вероятно, приходилось сталкиваться с той же проблемой, что и мне: отпуск и забывчивость. Я постоянно забывала покормить рыбу и всегда старалась это сделать, пока она не упала
Акустическая левитация с Arduino Uno, шаг за шагом (8 шагов): 8 шагов
Акустическая левитация с Arduino Uno Пошаговая инструкция (8 шагов): ультразвуковые преобразователи звука L298N Женский адаптер питания постоянного тока с штыревым контактом постоянного тока Arduino UNOBreadboard Как это работает: сначала вы загружаете код в Arduino Uno (это микроконтроллер, оснащенный цифровым и аналоговые порты для преобразования кода (C ++)