Съдържание:
- Стъпка 1: Нещата, използвани в този проект
- Стъпка 2: Идея?
- Стъпка 3: Първи стъпки?
- Стъпка 4: Записване на Raspbian на SD картата?
- Стъпка 5: Събиране на набора от данни? ️
- Стъпка 6: Проектиране на NN и обучение на модела ⚒️⚙️
- Стъпка 7: Тестване на модела ✅
- Стъпка 8: Игра на ножица с рок хартия
- Стъпка 9: Интеграция на серво мотор?
- Стъпка 10: Работа по проекта?
- Стъпка 11: Код - Project Repo
Видео: Ножица за скална хартия AI: 11 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Случвало ли ви се е да се отегчите сами? Нека да играем рок, хартия и ножици срещу интерактивна система, задвижвана с интелигентност.
Стъпка 1: Нещата, използвани в този проект
Хардуерни компоненти
- Raspberry Pi 3 Модел B+ × 1
- Модул за камера на Raspberry Pi V2 × 1
- SG90 Микро-серво мотор × 1
Софтуерни приложения
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Стъпка 2: Идея?
След като работих по различни проекти в различни области, планирах да направя забавен проект и реших да направя игра с ножица рок-хартия:)
В този проект ще направим интерактивна игра и ще играем срещу компютъра, който се захранва от AI за вземане на решения. AI използва Камерата, свързана с Raspberry Pi, за да разпознае какво движи потребителят с ръката, да ги класифицира в най -добрата категория (етикет) камък, хартия или ножица. След като компютърът се движи, стъпковият двигател, свързан към Raspberry Pi, сочи посоката въз основа на неговото движение.
Правила, които трябва да се имат предвид за тази игра:
- Рокът притъпява ножицата
- Хартията покрива скалата
- Ножици, нарязани на хартия
Победителят ще бъде определен въз основа на горните три условия. Нека да видим бърза демонстрация на проекта тук.
Стъпка 3: Първи стъпки?
Малина Пи
Използвал съм Raspberry Pi 3 Model B+, който има големи подобрения и е по -мощен от по -ранния Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ е интегриран с 1.4GHz 64-битов четириядрен процесор, двулентова безжична LAN, Bluetooth 4.2/BLE, по-бърз Ethernet и поддръжка на Power-over-Ethernet (с отделна PoE HAT).
Спецификации: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-битов SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz и 5GHz IEEE 802.11.b/g/n/ac безжична LAN, Bluetooth 4.2, BLE, Gigabit Ethernet през USB 2.0 (максимална пропускателна способност от 300 Mbps), Удълженият 40-пинов GPIO хедър, Пълен размер HDMI4 USB 2.0 портове, CSI порт за камера за свързване на Raspberry Pi камера, DSI порт за свързване на Raspberry Pi сензорен дисплей 4-полюсен стерео изход и композитен видео порт, Micro SD порт за зареждане на вашата операционна система и съхранение на данни 5V/2.5A DC входно захранване, Power-over-Ethernet (PoE) поддръжка (изисква отделен PoE HAT).
Серво мотор
Използваме сервомотор SG-90, мотор с голям въртящ момент, който може да издържи натоварването до 2,5 кг (1 см).
USB камера
USB камера, за да направи играта интерактивна с обработката на изображения
Някои кабели Jumper се използват за свързване на стъпковия двигател и Raspberry Pi.
Стъпка 4: Записване на Raspbian на SD картата?
Raspbian е Linux дистрибуция по избор, работеща на Raspberry Pi. В това ръководство ще използваме Lite версията, но може да се използва и настолната версия (която идва с графична среда).
- Изтеглете Etcher и го инсталирайте.
- Свържете четец на SD карти със SD картата вътре.
- Отворете Etcher и изберете от вашия твърд диск Raspberry Pi.img или.zip файл, който искате да запишете на SD картата.
- Изберете SD картата, на която искате да запишете вашето изображение.
- Прегледайте избора си и кликнете върху „Flash!“за да започнете да записвате данни на 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 ъпгрейди инсталирайте tensorflow pip инсталирайте Werkzeug pip инсталирайте Keras-Applications pip инсталирайте Keras-Предварителна обработка pip инсталирайте keras-squeezenet pip инсталирайте astor pip инсталирайте tensorboard pip инсталирайте tensorflow-estimator pip инсталирайте mock pip инсталирайте grpcio pip инсталирайте absl-pypip инсталирайте gast pip инсталирайте joblib pip инсталирайте 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 = рамка [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Изображението се заснема за всеки етикет (скала, хартия, ножица и Няма).
Стъпка 6: Проектиране на NN и обучение на модела ⚒️⚙️
Ядрото на този проект е класификатор на изображения, който класифицира една от трите категории. За да направим този класификатор, използваме предварително обучената CNN (конволюционна мрежа), наречена SqueezeNet.
Тук използваме Keras и TensorFlow за генериране на модела SqueezeNet, който може да идентифицира жеста. Изображенията, които генерирахме в предишната стъпка, се използват за обучение на модела. Моделът се обучава с помощта на набора от данни, генериран за нито една от споменатите епохи (цикли).
Моделът е конфигуриран с хиперпараметри, както е показано по -долу.
модел = Последователен ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Отпадане (0,5), Конволюция2D (NUM_CLASSES, (1, 1), padding = 'valid'), Активиране („relu“), GlobalAveragePooling2D (), Активиране („softmax“)])
Докато моделът се обучава, можете да намерите загубата и точността на модела за всяка Епоха и точността се увеличава в даден момент след няколко Епоха.
Приблизително са били необходими 2 часа за генериране на модела с най -висока точност след 10 епоха. Ако срещнете грешки при разпределението на паметта, направете следните стъпки (благодарение на Adrian)
За да увеличите своп пространството, отворете /etc /dphys-swapfile и след това редактирайте променливата CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Забележете, че увеличавам суапа от 100MB на 1024MB. Оттам рестартирайте услугата за суап:
$ sudo /etc/init.d/dphys-swapfile стоп
$ sudo /etc/init.d/dphys-swapfile старт
Забележка:
Увеличаването на размера на суапа е чудесен начин да изгорите картата с памет, така че не забравяйте да отмените тази промяна и да рестартирате услугата за размяна, когато приключите. Можете да прочетете повече за големи размери, повреждащи картите с памет тук.
Стъпка 7: Тестване на модела ✅
След като моделът е генериран, той извежда изходния файл "rock-paper-scissors-model.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 ("Предвидено: {}". формат (move_name))
Стартирайте скрипта test.py, за да тествате модела с различни тестови изображения.
python3 test.py
Сега моделът е готов да открива и разбира жестовете на ръцете.
Стъпка 8: Игра на ножица с рок хартия
Играта използва функция за генериране на произволни числа, за да реши хода на компютъра. Следва гореспоменатите правила за определяне на победителя. Играта е проектирана с два режима: Нормален режим и Интелигентен режим, където интелигентният режим контраатакува движението на потребителя, т.е. Компютърът печели всички ходове срещу потребителя.
cap = cv2. VideoCapture (0) # За заснемане на изображение от камерата
Сега нека направим играта в нормален режим, където системата/ Raspberry Pi прави снимката на ръката и анализира и идентифицира жеста на ръката. След това с помощта на генератор на случайни числа се играе хода на компютъра. Победителят се избира въз основа на правилата и след това се показва на екрана. Стартирайте играта, като използвате следната команда.
python3 play.py
Стъпка 9: Интеграция на серво мотор?
Най -накрая добавете серво мотора към този проект. Серво моторът е GPIO щифт 17 на Raspberry Pi, който има PWM функция за контрол на ъгъла на завъртане.
Сервомоторът, използван в този проект, е SG-90. Може да върти по посока на часовниковата стрелка и обратно на часовниковата стрелка до 180 °
Връзките са дадени, както следва.
Серво мотор - Raspberry Pi
Vcc - +5V
GND - GND
Сигнал - GPIO17
Библиотеките като RPi. GPIO и time се използват в този проект.
импортирайте RPi. GPIO като GPIO
време за импортиране
След това GPIO щифтът се конфигурира за PWM, като се използват следните редове
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 е конфигуриран да се използва като ШИМ на честота 50Hz. Ъгълът на серво мотора се постига чрез задаване на работния цикъл (Ton & Toff) на ШИМ
мито = ъгъл/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Това ще произведе желания ъгъл на стъпка за всеки импулс, който ще даде желания ъгъл на въртене.
Сега взех диаграмата и я нарязах на три части, за камък, хартия и ножица. Сервомоторът е фиксиран в центъра на диаграмата. Указателят/клапата е свързан към вала на серво мотора. Този вал сочи движението на компютъра според логиката, изчислена в скрипта.
Стъпка 10: Работа по проекта?
И сега е време за игра. Нека видим работата на проекта.
Ако сте имали някакви проблеми при изграждането на този проект, не се колебайте да ме попитате. Моля, предлагайте нови проекти, които искате да направя по -нататък.
Стискайте палци нагоре, ако наистина ви е помогнало и проследете канала ми за интересни проекти.:)
Споделете това видео, ако искате.
Радвам се, че сте се абонирали:
Благодаря за четенето!
Стъпка 11: Код - Project Repo
Кодът е добавен към хранилището на GitHub, което може да бъде намерено в раздела за код.
Rahul24-06/Ножици за скална хартия-https://github.com/Rahul24-06/Rock-Paper-Scissors
Препоръчано:
Ножична игра за каменна хартия: 6 стъпки
Ножична игра за каменна хартия: Това е първата ми инструкция. Исках да напиша такъв дълго време, но нямах под ръка нито един проект, който да публикувам тук. Така че, когато ми хрумна идеята за този проект, реших, че това е този. Така че разглеждах сайта на tensorflow.js, той
Консерваторът за хартия: Запазете тоалетна хартия с шокова терапия: 4 стъпки
Консерваторът за хартия: Спестете тоалетна хартия с шокова терапия: Всички сме виждали празните рафтове в магазина за хранителни стоки и изглежда, че за известно време ще има недостиг на тоалетна хартия. Ако не сте се запасили рано, вероятно сте в положението, в което се намирам. Имам къща от 6 души и само няколко ролки, които да издържат
Ръчна Arduino хартиена скална ножица, използваща 20x4 LCD дисплей с I2C: 7 стъпки
Ръчна Arduino хартиена ножица за рок ножици, използваща 20x4 LCD дисплей с I2C: Здравейте на всички или може би трябва да кажа „Здравей, свят!“За мен ще бъде голямо удоволствие да споделя с вас проект, който беше моят вход за много неща Arduino. Това е ръчна игра Arduino Paper Rock Scissors, използваща I2C 20x4 LCD дисплей. Аз
Ножици за скална хартия: 10 стъпки
Ножици за рок хартия: Цел: След като завършите това, ще научите как да направите проста игра на Rock, Ножици за хартия от нулата с помощта на Code.org. Необходими материали / Изисквания: Основно разбиране на синтаксиса на Javascript, компютър, акаунт в Code.org
Обектно ориентирано програмиране: Създаване на обекти Обучение/Метод на преподаване/Техника с помощта на ножица: 5 стъпки
Обектно-ориентирано програмиране: Създаване на обекти Обучение/Метод на преподаване/Техника с помощта на ножица: Метод на обучение/преподаване за ученици, нови за обектно-ориентирано програмиране. Това е начин да им позволите да визуализират и видят процеса на създаване на обекти от класове. Части: 1. Ножици (всякакъв вид ще е подходящ). 2. Парче хартия или картон. 3. Маркер