Mündəricat:

Qaya Kağız Qayçı AI: 11 addım
Qaya Kağız Qayçı AI: 11 addım

Video: Qaya Kağız Qayçı AI: 11 addım

Video: Qaya Kağız Qayçı AI: 11 addım
Video: #11 Jesus Christ - Qaraqan | Ikinci Addım / Həqiqətin Beş Adı 2024, Noyabr
Anonim
Qaya Kağız Qayçı AI
Qaya Kağız Qayçı AI

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?

Image
Image

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?

Başlayırsınız?
Başlayırsınız?
Başlayırsınız?
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?

SD karta Raspbian yandırılsın?
SD karta Raspbian yandırılsın?
SD karta Raspbian yandırılsın?
SD karta Raspbian yandırılsın?
SD karta Raspbian yandırılsın?
SD karta Raspbian yandırılsı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:

ssh [email protected]

Varsayılan parol moruqdur

Burada Raspberry Pi ilə əlaqə yaratmaq üçün ayrı bir monitordan istifadə etdim.

Addım 5: Dataset toplanır? ️

Məlumat toplusunu toplayırsınız? ️
Məlumat toplusunu toplayırsınız? ️
Dataset toplanır? ️
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 ️⚙️

Bir NN Dizaynı və Modelə Təlim ⚒️⚙️
Bir 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 ✅

Modelin sınanması ✅
Modelin sınanması ✅
Modelin sınanması ✅
Modelin sınanması ✅
Modelin sınanması ✅
Modelin sınanması ✅

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

Qaya-kağız-qayçı oyunu
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?

Image
Image

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ə: