Mundarija:
- 1 -qadam: Ushbu loyihada ishlatilgan narsalar
- 2 -qadam: Fikr?
- 3 -qadam: Ishni boshlaysizmi?
- 4 -qadam: Raspbian -ni SD -kartaga yoqingmi?
- 5 -qadam: Ma'lumotlar to'plamini yig'ish? ️
- 6 -qadam: NNni loyihalash va modelni o'rgatish ⚒️⚙️
- 7 -qadam: Modelni sinovdan o'tkazish ✅
- 8-qadam: Rok-qog'oz-qaychi o'yini
- 9 -qadam: Servo dvigatel integratsiyasi?
- 10 -qadam: Loyihaning ishlashi?
- 11 -qadam: Kod - loyiha repo
Video: Rok -qog'oz qaychi AI: 11 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:24
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?
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?
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 - 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:
Standart parol - malina
Bu erda men Raspberry Pi bilan ishlash uchun alohida monitordan foydalanardim.
5 -qadam: Ma'lumotlar to'plamini yig'ish? ️
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 ⚒️⚙️
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 ✅
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
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?
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:
O'zingizning rok -guruhingiz Ekit adapterini yarating (eski adaptersiz), buzilmasdan!: 10 qadam
O'zingizning rok -guruhingiz Ekit adapterini yarating (eskirgan adaptersiz), buzilmasdan!: Mashhur podkast xosti USB -ning eski simli adapterining o'lishi haqidagi xavotirini eshitganidan so'ng, men RB -ga yaxshiroq/maxsus eKit -ni ulash uchun DIY echimini izladim. . Youtube -dagi janob DONINATORga minnatdorchilik bildiraman, u shunga o'xshash video tasvirini yaratdi
Qaychi haydovchi Servo shapkasi: 4 qadam (rasmlar bilan)
Qaychi haydovchi Servo qalpoqchasi: Bu oddiy 3D bosma va servo dvigatel loyihasi Simone Giertz uchun yaxshi his-tuyg'u bo'lib, u endigina miya o'simtasini olib tashlash operatsiyasini o'tkazgan. Qaychi qurilmasi mikro servo dvigatel va Trinket mikrokontrolli tomonidan boshqariladi, u ozgina Ard bilan ishlaydi
X-box rok-barabanlarini yolg'iz elektron barabanlarga aylantiring: 4 qadam (rasmlar bilan)
X-box rok-barabanlarini midi-stendli elektron barabanlarga aylantiring. Menga ishlatilgan x-quti tambur to'plamini olish baxtiga muyassar bo'ldim, u biroz qo'pol shaklda, belkurak yo'q, lekin tuzatib bo'lmaydigan hech narsa yo'q. uni mustaqil elektr baraban to'plamiga aylantiring. Piezo sensori analog qiymatini o'qish va uni MIDI komendantiga aylantirish
Ob'ektga yo'naltirilgan dasturlash: Ob'ektlarni yaratish/O'qitish usuli/Qaychi yordamida texnika: 5 qadam
Ob'ektga yo'naltirilgan dasturlash: Ob'ektlarni yaratish O'qitish/O'qitish usuli/Qaychi yordamida texnikasi: Ob'ektga yo'naltirilgan dasturlashni yangi boshlagan talabalar uchun o'rganish/o'qitish usuli. Bu ularga sinflardan ob'ektlar yaratish jarayonini tasavvur qilish va ko'rish imkoniyatini berishning bir usuli.Qismlar: 1. Qaychi (har qanday turdagi qiladi). 2. Qog'oz yoki kartochka bo'lagi. 3. Marker.
Raspberry Pi boshqariladigan qaychi ko'tarish: 17 qadam (rasmlar bilan)
Raspberry Pi boshqariladigan qaychi ko'targichi: nima uchun qaychi ko'tariladi? Nega yo'q! Bu ajoyib va qurish uchun qiziqarli loyiha. Mening haqiqiy sababim - Great Mojave Rover loyihamdagi kameralarni ko'tarish. Men kameralar roverdan yuqoriga ko'tarilishini va atrofni tasvirga olishlarini xohlayman. Lekin menga kerak edi