Mündəricat:
- Addım 1: Bu Layihədə İstifadə Edilən Şeylər
- Addım 2: Fikir?
- Addım 3: Başlayırsınız?
- Addım 4: Raspbian'ı SD Karta yazın?
- Addım 5: Dataset toplanır? ️
- Addım 6: NN Dizaynı və Modelə Təlim ️⚙️
- Addım 7: Modelin Test Edilməsi ✅
- Addım 8: Qaya-Kağız-Qayçı Oyunu
- Addım 9: Servo Motor İnteqrasiyası?
- Addım 10: Layihənin işlənməsi?
- Addım 11: Kod - Layihə Repo
Video: Qaya Kağız Qayçı AI: 11 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:44
Heç təklikdə cansıxıcı hiss etdinizmi? Zəka ilə işləyən interaktiv bir sistemə qarşı qaya, kağız və qayçı oynayaq.
Addım 1: Bu Layihədə İstifadə Edilən Şeylər
Avadanlıq komponentləri
- Raspberry Pi 3 Model B+ × 1
- Raspberry Pi Kamera Modulu V2 × 1
- SG90 Mikro-servo motor × 1
Proqram proqramları
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Addım 2: Fikir?
Fərqli sahələrdə müxtəlif layihələr üzərində işlədikdən sonra əyləncəli bir layihə hazırlamağı planlaşdırdım və qaya-kağız-qayçı oyunu etmək qərarına gəldim:)
Bu layihədə, interaktiv bir oyun edəcəyik və qərar qəbul etmək üçün AI ilə işləyən kompüterə qarşı oynayacağıq. AI, Raspberry Pi ilə əlaqəli Kameranı istifadəçinin əllə etdiyi hərəkətləri tanımaq, onları ən yaxşı kateqoriya (etiket) qaya, kağız və ya qayçı kimi təsnif etmək üçün istifadə edir. Kompüter hərəkət etdikdən sonra, Raspberry Pi -yə qoşulan pilləli motor, hərəkətinə əsasən istiqamətə işarə edir.
Bu oyun üçün nəzərə alınmalı olan qaydalar:
- Qaya qayçı kəsir
- Kağız daşları əhatə edir
- Qayçı kağız kəsdi
Qalib yuxarıdakı üç şərt əsasında müəyyən ediləcək. Burada layihənin sürətli bir demosunu görək.
Addım 3: Başlayırsınız?
Moruq Pi
Əvvəlki Raspberry Pi 3 Model B -dən daha güclü olan və böyük inkişaf etmiş Raspberry Pi 3 Model B+ istifadə etdim.
Raspberry Pi 3 B+, 1.4 GHz 64 bitlik dörd nüvəli prosessor, iki bantlı simsiz LAN, Bluetooth 4.2/BLE, daha sürətli Ethernet və Power-over-Ethernet dəstəyi (ayrı PoE HAT ilə) ilə birləşdirilmişdir.
Xüsusiyyətlər: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz və 5GHz IEEE 802.11.b/g/n/ac simsiz LAN, Bluetooth 4.2, BLE, USB 2.0 üzərindən Gigabit Ethernet (maksimum ötürmə qabiliyyəti 300 Mbit / s), Genişləndirilmiş 40 pinli GPIO başlığı, Tam ölçülü HDMI4 USB 2.0 portu, Raspberry Pi kamerasını bağlamaq üçün CSI kamera portu, Raspberry Pi toxunma ekranını birləşdirmək üçün DSI ekran portu 4 qütblü stereo çıxışı və kompozit video portu, əməliyyat sisteminizi yükləmək və məlumatları saxlamaq üçün Micro SD portu5V/2.5A DC güc girişi, Ethernet üzərindən güc (PoE) dəstəyi (ayrıca PoE HAT tələb olunur).
Servo Motor
SG-90 servo mühərriki, 2,5 kq (1 sm) qədər yükü idarə edə bilən yüksək torklu motordan istifadə edirik.
USB Kamera
Oyunun görüntü işlənməsi ilə interaktiv olmasını təmin edən USB kamera
Bəzi Jumper kabelləri, step motorunu və Raspberry Pi -ni bağlamaq üçün istifadə olunur.
Addım 4: Raspbian'ı SD Karta yazın?
Raspbian, Raspberry Pi üzərində işləyən Linux seçimidir. Bu təlimatda Lite versiyasını istifadə edəcəyik, ancaq Masaüstü versiyası (qrafik mühiti ilə birlikdə gəlir) də istifadə edilə bilər.
- Etcher proqramını yükləyin və quraşdırın.
- İçərisində SD kart olan bir SD kart oxuyucusunu bağlayın.
- Etcher proqramını açın və sabit diskinizdən SD karta yazmaq istədiyiniz Raspberry Pi.img və ya.zip faylını seçin.
- Şəkilinizi yazmaq istədiyiniz SD kartı seçin.
- Seçimlərinizi nəzərdən keçirin və 'Flash!' Düyməsini basın. SD karta məlumat yazmağa başlayın.
Cihazı şəbəkənizə qoşun
- Yenidən SD kartınızdakı yükləmə həcminin kökündə yerləşdirilən boş ssh faylını əlavə edərək SSH girişini aktiv edin.
- SD kartı Raspberry Pi -yə daxil edin. Təxminən 20 saniyədə açılacaq. İndi Raspberry Pi -yə SSH girişiniz olmalıdır. Varsayılan olaraq, onun ana adı raspberrypi.local olacaq. Kompüterinizdə bir terminal pəncərəsi açın və aşağıdakıları yazın:
Varsayılan parol moruqdur
Burada Raspberry Pi ilə əlaqə yaratmaq üçün ayrı bir monitordan istifadə etdim.
Addım 5: Dataset toplanır? ️
Bu layihədə ilk addım məlumatların toplanmasıdır. Sistem əl jestini tanımalı və hərəkəti tanımalı və buna uyğun olaraq hərəkət etməlidir.
Pip install istifadə edərək Raspberry Pi -yə bir neçə kitabxana quraşdırırıq
əmr.
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 install h5py pip install Keras pip tensorflow pip quraşdırın Werkzeug pip quraşdırın Keras-Applications pip yükləyin Keras-Preprocessing pip yükləyin keras-squeezenet pip astor pip quraşdırın tensorboard pip quraşdırın pip install protobuf pip install PyYAML pip install six
OpenCVpackage ilə bağlı hər hansı bir problemlə qarşılaşsanız, bu paketləri quraşdırmanızı şiddətlə məsləhət görürəm.
sudo apt-get libhdf5-dev quraşdırın
sudo apt-get yüklə libhdf5-serial-dev sudo apt-get libatlas-base-dev sudo apt-get qur libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Bu layihə üçün lazım olan bütün asılılıqları quraşdırdıq. Məlumat dəsti, şəkillərin müvafiq etiket altında toplanması və tənzimlənməsi ilə hazırlanır.
Burada aşağıdakı parçadan istifadə edərək qaya, kağız və qayçı etiketləri üçün məlumat dəsti şəkilləri yaradırıq.
roi = çərçivə [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (say + 1)) cv2.imwrite (save_path, roi)
Şəkil hər etiket üçün çəkilir (qaya, kağız, qayçı və heç biri).
Addım 6: NN Dizaynı və Modelə Təlim ️⚙️
Bu layihənin əsası üç kateqoriyadan birini təsnif edən bir görüntü təsnifatçısıdır. Bu təsnifatçını hazırlamaq üçün əvvəlcədən öyrədilmiş SqueezeNet adlı CNN-dən (Konvolutional Network) istifadə edirik.
Burada, jesti təyin edə biləcək SqueezeNet modelini yaratmaq üçün Keras və TensorFlow istifadə edirik. Əvvəlki addımda hazırladığımız şəkillər modeli öyrətmək üçün istifadə olunur. Model, qeyd olunan heç bir Dövr (Dövr) üçün yaradılan Dataset istifadə edərək öyrədilir.
Model, aşağıda göstərildiyi kimi hiperparametrlərlə qurulmuşdur.
model = Ardıcıl ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Çıxış (0.5), Convolution2D (NUM_CLASSES, (1, 1), doldurma = 'etibarlı'), Aktivləşdirmə ('relu'), GlobalAveragePooling2D (), Aktivləşdirmə ('softmax')])
Model məşq edərkən, hər dövr üçün modelin itkisini və dəqiqliyini tapa bilərsiniz və dəqiqlik bir neçə dövrdən sonra müəyyən bir zamanda artır.
Modeli 10 dövrdən sonra ən yüksək dəqiqliklə hazırlamaq təxminən 2 saat çəkdi. Hər hansı bir yaddaş ayırma xətası ilə qarşılaşsanız, aşağıdakı addımları edin (Adrian sayəsində)
Mübadilə sahənizi artırmaq üçün /etc /dphys-swapfile açın və sonra CONF_SWAPSIZE dəyişənini redaktə edin:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Swapı 100 MB -dan 1024 MB -a qədər artırdığımın fərqinə var. Oradan dəyişdirmə xidmətini yenidən başladın:
$ sudo /etc/init.d/dphys-swapfile dayandırın
$ sudo /etc/init.d/dphys-swapfile başlanğıcı
Qeyd:
Svop ölçüsünü artırmaq yaddaş kartınızı yandırmaq üçün əla bir yoldur, buna görə də bu dəyişikliyi geri qaytardığınızdan və bitirdikdən sonra dəyişdirmə xidmətini yenidən başladığınızdan əmin olun. Yaddaş kartlarını korlayan böyük ölçülər haqqında daha çox məlumatı burada oxuya bilərsiniz.
Addım 7: Modelin Test Edilməsi ✅
Model yaradıldıqdan sonra "rock-paper-scissors-model.h5" faylını çıxarır. Bu fayl, sistemin müxtəlif əl hərəkətlərini müəyyən edə biləcəyini və hərəkətləri fərqləndirə biləcəyini yoxlamaq üçün mənbə olaraq istifadə olunur.
Model python skriptində aşağıdakı kimi yüklənir
model = load_model ("qaya-kağız-qayçı-model.h5")
Kamera test görüntüsünü oxuyur və tələb olunan rəng modelini çevirir və sonra görüntünün ölçüsünü 227 x 227 pikselə (Model istehsalı üçün istifadə olunan eyni ölçüdə) dəyişir. Modeli öyrətmək üçün istifadə olunan şəkillər yaradılan modeli sınamaq üçün istifadə edilə bilər.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Model yükləndikdən və şəkil kamera tərəfindən alındıqdan sonra, model, yüklənmiş SqueezeNet modelindən istifadə edərək çəkilən görüntünü proqnozlaşdırır və istifadəçinin hərəkətləri üçün proqnoz verir.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) çap ("Proqnozlaşdırılan: {}". format (move_name))
Modeli müxtəlif test şəkilləri ilə sınamaq üçün test.py skriptini işə salın.
python3 test.py
İndi model əl hərəkətlərini aşkar etməyə və anlamağa hazırdır.
Addım 8: Qaya-Kağız-Qayçı Oyunu
Oyun, kompüterin hərəkətinə qərar vermək üçün təsadüfi ədədlər yaratmaq funksiyasından istifadə edir. Qalibi müəyyən etmək üçün yuxarıda göstərilən qaydalara riayət olunur. Oyun iki rejimlə hazırlanmışdır: Normal Mod və Ağıllı rejim, burada ağıllı rejim istifadəçinin hərəkətinə əks hücum edir, yəni Kompüter istifadəçiyə qarşı bütün hərəkətləri qazanır.
cap = cv2. VideoCapture (0) # Kameradan şəkil çəkmək üçün
İndi oyunu Normal rejimdə edək ki, sistem/ Raspberry Pi əlin şəklini çəkir və əl jestini təhlil edir və müəyyən edir. Sonra təsadüfi ədədlər generatorundan istifadə edərək kompüterin hərəkəti oynanılır. Qalib qaydalara əsasən seçilir və sonra ekranda göstərilir. Aşağıdakı əmri istifadə edərək oyuna başlayın.
python3 play.py
Addım 9: Servo Motor İnteqrasiyası?
Nəhayət, servo motoru bu layihəyə əlavə edin. Servo motor, fırlanma bucağını idarə etmək üçün PWM funksiyasına malik olan Raspberry Pi -nin GPIO pin 17 -dir.
Bu layihədə istifadə olunan Servo Motor SG-90-dır. Saat yönünde və saat yönünün əksinə 180 ° -ə qədər fırlanma edə bilər
Bağlantılar aşağıdakı kimi verilir.
Servo Motor - Raspberry Pi
Vcc - +5V
GND - GND
Siqnal - GPIO17
Bu layihədə RPi. GPIO və zaman kimi kitabxanalar istifadə olunur.
GPO olaraq RPi. GPIO idxal edin
idxal vaxtı
GPIO pin sonra aşağıdakı xətləri istifadə edərək PWM üçün konfiqurasiya olunur
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17, 50Hz tezliyində PWM olaraq istifadə etmək üçün qurulmuşdur. Servo motorun açısı, PWM -in iş dövrünü (Ton və Toff) təyin etməklə əldə edilir
vəzifə = bucaq/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (vəzifə) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Bu, hər nəbz üçün istənilən addım bucağını verəcəkdir ki, bu da istənilən fırlanma bucağını verəcəkdir.
İndi qrafiki götürdüm və qaya, kağız və qayçı üçün üç hissəyə kəsdim. Servo motor cədvəlin ortasına sabitlənmişdir. Göstərici/qapaq servo motorun milinə bağlıdır. Bu şaft, skriptdə hesablanmış məntiqə görə kompüterin hərəkətini göstərir.
Addım 10: Layihənin işlənməsi?
Və indi oyun vaxtıdır. Layihənin işini görək.
Bu layihəni qurarkən hər hansı bir problemlə üzləşmisinizsə, məndən soruşun. Zəhmət olmasa, bundan sonra etməyimi istədiyiniz yeni layihələr təklif edin.
Həqiqətən sizə kömək edərsə barmaqlarınızı yuxarı qaldırın və maraqlı layihələr üçün kanalımı izləyin.:)
İstəsəniz bu videonu paylaşın.
Abunə olmağınızdan məmnunuq:
Oxuduğunuz üçün təşəkkürlər!
Addım 11: Kod - Layihə Repo
Kod, kod bölməsində tapıla bilən GitHub Deposuna əlavə olunur.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Tövsiyə:
Bu Yüksək Gərginlikli Tıklama Clack Oyuncağı Qaya!: 11 Addım (Şəkillərlə)
Bu Yüksək Gərginlikli Tıklama Clack Oyuncaq Qayaları !: Burada 70-ci illərdə liseylərdə məşhur olan retro Click-Clack oyuncağının iki elektrostatik versiyası. Versiya 1.0 super büdcəli modeldir. Parçalar (enerji təchizatı istisna olmaqla) demək olar ki, heç bir şeyə bərabər deyil. Ən bahalılarının təsviri
Daş Kağız Qayçı Oyunu: 6 addım
Daş Kağız Qayçı Oyunu: Bu mənim ilk təlimatımdır. Uzun müddətdir bir şey yazmaq istəyirdim, amma burada dərc edə biləcəyim heç bir layihəm yox idi. Bu layihə ideyası ilə qarşılaşdığımda, bunun bir layihə olduğuna qərar verdim, buna görə də tensorflow.js saytına baxırdım
I2C ilə 7x4 LCD Ekranı istifadə edən Əl Arduino Kağız Qaya Qayçı Oyunu: 7 addım
I2C ilə 20x4 LCD Ekrandan istifadə edən Əl Arduino Kağız Qaya Qayçı Oyunu: Hər kəsə salam və ya bəlkə də "Salam Dünya!" Deməliyəm ki, Arduinonun bir çox şeylərinə girişim olan bir layihəni sizinlə bölüşmək çox xoş olardı. Bu, I2C 20x4 LCD displeydən istifadə edən əl Arduino Paper Rock Scissors oyunudur. Mən
Qayçı Sürücü Servo Şapka: 4 Addım (Şəkillərlə birlikdə)
Qayçı Sürücü Servo Şapka: Bu sadə 3D çap və servo motor layihəsi, beyin şişi çıxarma əməliyyatı keçirmiş zəhmli bir istehsalçı Simone Giertz üçün yaxşı bir hissdir. Qayçı cihazı bir az servo mühərriki və bir az Ard işləyən Trinket mikrokontrolörü ilə idarə olunur
Qaya kağızı qayçı: 10 addım
Qaya Kağız Qayçı: Məqsəd: Bunu tamamladıqdan sonra Code.org istifadə edərək sadə bir Rock, Kağız Qayçı oyununun sıfırdan necə hazırlanacağını öyrənəcəksiniz. Lazım olan materiallar / tələblər: Javascript sintaksisi, kompüter, Code.org hesabı haqqında əsas anlayış