Mundarija:

Rok -qog'oz qaychi AI: 11 qadam
Rok -qog'oz qaychi AI: 11 qadam

Video: Rok -qog'oz qaychi AI: 11 qadam

Video: Rok -qog'oz qaychi AI: 11 qadam
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Noyabr
Anonim
Qog'ozdan yasalgan qaychi AI
Qog'ozdan yasalgan qaychi AI

Hech qachon yolg'iz o'zingizni zeriktirganmisiz? Keling, aql bilan ishlaydigan interaktiv tizimga qarshi tosh, qog'oz va qaychi o'ynaymiz.

1 -qadam: Ushbu loyihada ishlatilgan narsalar

Uskuna komponentlari

  • Raspberry Pi 3 modeli B+ × 1
  • Raspberry Pi kamera moduli V2 × 1
  • SG90 mikro-servo dvigateli × 1

Dasturiy ta'minot dasturlari

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

2 -qadam: Fikr?

Image
Image

Turli sohalarda turli xil loyihalar ustida ishlaganimdan so'ng, men qiziqarli loyiha qilishni rejalashtirgandim va rok-qog'oz-qaychi o'yinini yaratishga qaror qildim:)

Ushbu loyihada biz interaktiv o'yin o'tkazamiz va qaror qabul qilish uchun sun'iy intellekt bilan ishlaydigan kompyuterga qarshi o'ynaymiz. AI Raspberry Pi -ga ulangan kameradan foydalanuvchining qo'li bilan qilgan harakatlarini taniydi, ularni eng yaxshi toifadagi (yorliqli) tosh, qog'oz yoki qaychi deb tasniflaydi. Kompyuter harakat qilgandan so'ng, Raspberry Pi -ga ulangan qadam dvigateli uning harakatiga qarab yo'nalishni ko'rsatadi.

O'yinda e'tiborga olish kerak bo'lgan qoidalar:

  • Rok qaychini uradi
  • Qog'oz toshni qoplaydi
  • Qaychi qog'ozni kesib tashladi

G'olib yuqoridagi uchta shart asosida aniqlanadi. Keling, bu erda loyihaning tezkor demosini ko'rib chiqaylik.

3 -qadam: Ishni boshlaysizmi?

Ishni boshlash ?
Ishni boshlash ?
Ishni boshlash ?
Ishni boshlash ?

Raspberry Pi

Men Raspberry Pi 3 Model B+ dan foydalandim, u katta yaxshilanishlarga ega va avvalgi Raspberry Pi 3 Model B ga qaraganda kuchliroq.

Raspberry Pi 3 B+ 1,4 gigagertsli 64 bitli to'rt yadroli protsessor, ikki tarmoqli simsiz LAN, Bluetooth 4.2/BLE, tezroq Ethernet va Ethernet orqali quvvat (alohida PoE HAT bilan) bilan birlashtirilgan.

Xususiyatlar: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64 bitli SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz va 5GHz IEEE 802.11.b/g/n/ac simsiz LAN, Bluetooth 4.2, BLE, USB 2.0 orqali Gigabit Ethernet (maksimal o'tkazish tezligi 300 Mbit / s), kengaytirilgan 40-pinli GPIO sarlavhasi, to'liq o'lchamli HDMI4 USB 2.0 portlari, Raspberry Pi kamerasini ulash uchun CSI kamera porti, Raspberry Pi sensorli displeyini ulash uchun DSI displey porti 4 qutbli stereo chiqish va kompozit video port, operatsion tizimingizni yuklash va ma'lumotlarni saqlash uchun Micro SD porti5V/2,5A doimiy quvvat manbai, Ethernet orqali quvvat (PoE) qo'llab-quvvatlashi (alohida PoE HAT talab qilinadi).

Servo dvigatel

Biz SG-90 servo dvigatelidan foydalanamiz, u 2,5 kg (1 sm) gacha yukni bardoshli, yuqori momentli dvigatel.

USB kamera

Tasvirni qayta ishlash bilan o'yinni interaktiv qilish uchun USB kamera

Ba'zi jumper kabellari step motorini va Raspberry Pi -ni simlash uchun ishlatiladi.

4 -qadam: Raspbian -ni SD -kartaga yoqingmi?

Raspbian SD -kartaga yoqilsinmi?
Raspbian SD -kartaga yoqilsinmi?
Raspbian SD -kartaga yoqilsinmi?
Raspbian SD -kartaga yoqilsinmi?
Raspbian SD -kartaga yoqilsinmi?
Raspbian SD -kartaga yoqilsinmi?

Raspbian - bu Raspberry Pi -da ishlaydigan Linux tanlovi. Ushbu qo'llanmada biz Lite versiyasidan foydalanamiz, lekin ish stoli versiyasi (grafik muhit bilan ta'minlangan) ham ishlatilishi mumkin.

  • Etcher -ni yuklab oling va o'rnating.
  • SD -kartani o'quvchini ichidagi SD -karta bilan ulang.
  • Etcher -ni oching va qattiq diskdan SD -kartaga yozmoqchi bo'lgan Raspberry Pi.img yoki.zip faylini tanlang.
  • Rasm yozmoqchi bo'lgan SD -kartani tanlang.
  • Tanlovlaringizni ko'rib chiqing va "Flash!" Tugmasini bosing. ma'lumotlarni SD -kartaga yozishni boshlash.

Qurilmani tarmoqqa ulang

  • SSH -ga kirishni yoqish, bo'sh SD faylini qo'shib, yana SD -kartangiz yuklash hajmining tubiga joylashtiriladi.
  • SD -kartani Raspberry Pi -ga joylashtiring. U taxminan 20 soniyada yuklanadi. Endi siz Raspberry Pi -ga SSH -ga kirishingiz kerak. Odatiy bo'lib, uning xost nomi raspberrypi.local bo'ladi. Kompyuteringizda terminal oynasini oching va quyidagilarni kiriting:

ssh [email protected]

Standart parol - malina

Bu erda men Raspberry Pi bilan ishlash uchun alohida monitordan foydalanardim.

5 -qadam: Ma'lumotlar to'plamini yig'ish? ️

Ma'lumotlar to'plami yig'ilmoqda? ️
Ma'lumotlar to'plami yig'ilmoqda? ️
Ma'lumotlar to'plami yig'ilmoqda? ️
Ma'lumotlar to'plami yig'ilmoqda? ️

Loyihaning birinchi bosqichi ma'lumotlarni yig'ishdir. Tizim qo'l harakatini aniqlab, harakatni tan olishi va shunga muvofiq harakat qilishi kerak.

Biz pip install yordamida Raspberry Pi -ga bir nechta kutubxonalarni o'rnatamiz

buyruq.

sudo apt-get update && sudo apt-get upgradesudo 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 h5py pip install Keras pip tensorflow pip o'rnatish Werkzeug pip o'rnatish Keras-Applications pip Keras-Preprocessing pip install keras-squeezenet pip astor pip install tensorboard pip tensorflow-taxlash pip o'rnatish mock pip install grpcio pip install absl-pypip gast pip install joblib pip install Markdown pip install protobuf pip install PyYAML pip install six

Agar siz OpenCVpackage bilan bog'liq muammolarga duch kelsangiz, men ushbu paketlarni o'rnatishni qat'iy tavsiya qilaman.

sudo apt-get libhdf5-dev ni o'rnating

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

Biz ushbu loyiha uchun zarur bo'lgan barcha bog'liqliklarni o'rnatdik. Ma'lumotlar to'plami tegishli yorliq ostida tasvirlarni yig'ish va tartibga solish orqali amalga oshiriladi.

Bu erda biz tosh, qog'oz va qaychi yorlig'i uchun ma'lumotlar parchasini quyidagi parchadan foydalanib yaratamiz.

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

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

Rasm har bir yorliq uchun olinadi (tosh, qog'oz, qaychi va yo'q).

6 -qadam: NNni loyihalash va modelni o'rgatish ⚒️⚙️

NNni loyihalash va modelni o'rgatish ⚒️⚙️
NNni loyihalash va modelni o'rgatish ⚒️⚙️

Ushbu loyihaning asosiy qismi uchta toifadan birini tasniflaydigan tasvir tasniflagichidir. Ushbu tasniflagichni yaratish uchun biz oldindan tayyorlangan SqueezeNet nomli CNN (Convolutional Network) tarmog'idan foydalanamiz.

Bu erda biz imo -ishorani aniqlaydigan SqueezeNet modelini yaratish uchun Keras va TensorFlow -dan foydalanamiz. Oldingi bosqichda biz yaratgan rasmlar modelni o'rgatish uchun ishlatiladi. Model eslatib o'tilgan davrlar (tsikllar) uchun yaratilgan ma'lumotlar to'plami yordamida o'qitiladi.

Model quyida ko'rsatilganidek, giperparametrlar yordamida tuzilgan.

model = ketma -ket ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Tashlab ketish (0,5), Convolution2D (NUM_CLASSES, (1, 1), to'ldirish = 'haqiqiy'), Faollashtirish ("relu"), GlobalAveragePooling2D (), Faollashtirish ("softmax")])

Model mashg'ulot paytida siz har bir davr uchun modelning yo'qolishi va aniqligini topishingiz mumkin va aniqlik bir necha davrdan keyin ma'lum vaqt ichida oshadi.

10 davrdan keyin modelni yuqori aniqlikda ishlab chiqarish uchun taxminan 2 soat vaqt kerak bo'ldi, agar xotira ajratishda xatolarga duch kelsangiz, quyidagi amallarni bajaring (Adrian rahmat)

O'zgartirish maydonini ko'paytirish uchun /etc /dphys-swapfile-ni oching va CONF_SWAPSIZE o'zgaruvchisini tahrir qiling:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

E'tibor bering, men almashtirishni 100 MB dan 1024 MB gacha oshiryapman, u erdan almashtirish xizmatini qayta ishga tushiring:

$ sudo /etc/init.d/dphys-swapfile to'xtatish

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

Eslatma:

Svop hajmini oshirish - bu xotira kartasini o'chirishning ajoyib usuli, shuning uchun bu o'zgarishni qaytaring va tugatgandan so'ng almashtirish xizmatini qayta ishga tushiring. Bu erda xotira kartalari buzilgan katta o'lchamlari haqida ko'proq o'qishingiz mumkin.

7 -qadam: Modelni sinovdan o'tkazish ✅

✅ Modelni sinovdan o'tkazish
✅ Modelni sinovdan o'tkazish
✅ Modelni sinovdan o'tkazish
✅ Modelni sinovdan o'tkazish
✅ Modelni sinovdan o'tkazish
✅ Modelni sinovdan o'tkazish

Model yaratilgach, "rock-paper-scissors-model.h5" chiqish faylini chiqaradi. Bu fayl manba sifatida tizim har xil qo'l ishoralarini aniqlay oladimi yoki harakatlarni farqlay oladimi -yo'qligini tekshirish uchun ishlatiladi.

Model python skriptida quyidagicha yuklangan

model = load_model ("tosh-qog'oz-qaychi-model.h5")

Kamera sinov tasvirini o'qiydi va kerakli rang modelini o'zgartiradi, so'ngra tasvir hajmini 227 x 227 pikselga o'zgartiradi (modelni yaratish uchun bir xil o'lchamda). Modelni o'rgatish uchun ishlatilgan tasvirlar yaratilgan modelni sinab ko'rish uchun ishlatilishi mumkin.

img = cv2.imread (filepath)

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

Model yuklangach va tasvirni kamera qo'lga kiritgandan so'ng, model yuklangan SqueezeNet modeli yordamida olingan tasvirni bashorat qiladi va foydalanuvchining harakatlariga bashorat qiladi.

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

move_code = np.argmax (pred [0]) move_name = mapper (move_code) chop etish ("Bashorat qilingan: {}". format (move_name))

Modelni turli xil test tasvirlari bilan sinab ko'rish uchun test.py skriptini ishga tushiring.

python3 test.py

Endi model qo'l harakatlarini aniqlash va tushunishga tayyor.

8-qadam: Rok-qog'oz-qaychi o'yini

Qog'oz-qaychi o'yini
Qog'oz-qaychi o'yini

O'yin kompyuterning harakatini aniqlash uchun tasodifiy sonlarni ishlab chiqarish funktsiyasidan foydalanadi. G'olibni aniqlash uchun yuqoridagi qoidalarga amal qilinadi. O'yin ikkita rejimda ishlab chiqilgan: Oddiy rejim va aqlli rejim, bunda aqlli rejim foydalanuvchi harakatiga qarshi hujum qiladi, ya'ni kompyuter foydalanuvchiga qarshi barcha harakatlarni yutadi.

cap = cv2. VideoCapture (0) # Kameradan tasvir olish uchun

Keling, o'yinni Oddiy rejimda o'tkazamiz, u erda tizim/ Raspberry Pi qo'lning rasmini oladi va qo'l harakatini tahlil qiladi va aniqlaydi. Keyin tasodifiy sonlar generatoridan foydalanib, kompyuter harakati o'ynaladi. G'olib qoidalar asosida tanlanadi va keyin ekranda ko'rsatiladi. Quyidagi buyruq yordamida o'yinni boshlang.

python3 play.py

9 -qadam: Servo dvigatel integratsiyasi?

Nihoyat, servo motorni ushbu loyihaga qo'shing. Servo dvigatel - bu Raspberry Pi -ning GPIO pin 17, burilish burchagini boshqarish uchun PWM funktsiyasiga ega.

Ushbu loyihada ishlatiladigan Servo Dvigatel-SG-90. U soat yo'nalishi bo'yicha va soat sohasi farqli o'laroq 180 ° gacha burilishlarni amalga oshirishi mumkin

Ulanishlar quyidagicha berilgan.

Servo dvigatel - Raspberry Pi

VC - +5V

GND - GND

Signal - GPIO17

Ushbu loyihada RPi. GPIO va vaqt kabi kutubxonalar ishlatiladi.

RPi. GPIO -ni GPIO sifatida import qilish

import vaqti

Keyin GPIO pin quyidagi satrlar yordamida PWM ga sozlangan

servoPIN = 17

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

GPIO Pin 17 50 Gts chastotada PWM sifatida foydalanish uchun tuzilgan. Servo dvigatelning burchagi PWMning ishlash tsiklini (Ton & Toff) sozlash orqali erishiladi

burch = burchak/18 + 2

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

Bu har bir zarba uchun kerakli qadam burchagini hosil qiladi, bu esa aylanishning kerakli burchagini beradi.

Endi men jadvalni oldim va uni tosh, qog'oz va qaychi uchun uch qismga ajratdim. Servo dvigatel diagramma markaziga o'rnatiladi. Ko'rsatkich/qopqoq servo dvigatel miliga ulangan. Bu o'q skriptda hisoblangan mantiqqa muvofiq kompyuterning harakatini ko'rsatadi.

10 -qadam: Loyihaning ishlashi?

Image
Image

Va endi, o'yin vaqti. Loyihaning ishlashini ko'rib chiqaylik.

Agar siz ushbu loyihani tuzishda biron bir muammoga duch kelsangiz, mendan so'rang. Iltimos, men xohlagan yangi loyihalarni taklif qiling.

Agar bu sizga haqiqatan ham yordam bergan bo'lsa, bosh barmog'ingizni bering va qiziqarli loyihalar uchun kanalimni kuzatib boring.:)

Agar sizga yoqsa bu videoni baham ko'ring.

Obuna bo'lganingizdan xursandman:

O'qiganingiz uchun tashakkur!

11 -qadam: Kod - loyiha repo

Kod GitHub omboriga qo'shiladi, uni kod bo'limida topish mumkin.

Rahul24-06/Rok-qog'oz-qaychi-https://github.com/Rahul24-06/Rock-Paper-Scissors

Tavsiya: