Съдържание:

Ножица за скална хартия AI: 11 стъпки
Ножица за скална хартия AI: 11 стъпки

Видео: Ножица за скална хартия AI: 11 стъпки

Видео: Ножица за скална хартия AI: 11 стъпки
Видео: Adam vs. Toa 2.0 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 за вземане на решения. 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 на 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 картата, на която искате да запишете вашето изображение.
  • Прегледайте избора си и кликнете върху „Flash!“за да започнете да записвате данни на 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 ъпгрейди инсталирайте 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 и обучение на модела ⚒️⚙️

Проектиране на NN и обучение на модела ⚒️⚙️
Проектиране на 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: Работа по проекта?

Image
Image

И сега е време за игра. Нека видим работата на проекта.

Ако сте имали някакви проблеми при изграждането на този проект, не се колебайте да ме попитате. Моля, предлагайте нови проекти, които искате да направя по -нататък.

Стискайте палци нагоре, ако наистина ви е помогнало и проследете канала ми за интересни проекти.:)

Споделете това видео, ако искате.

Радвам се, че сте се абонирали:

Благодаря за четенето!

Стъпка 11: Код - Project Repo

Кодът е добавен към хранилището на GitHub, което може да бъде намерено в раздела за код.

Rahul24-06/Ножици за скална хартия-https://github.com/Rahul24-06/Rock-Paper-Scissors

Препоръчано: