İçindekiler:

Taş Kağıt Makas AI: 11 Adım
Taş Kağıt Makas AI: 11 Adım

Video: Taş Kağıt Makas AI: 11 Adım

Video: Taş Kağıt Makas AI: 11 Adım
Video: Sıfırdan Python - Taş, Kağıt, Makas Oyunu Yapmak 2024, Kasım
Anonim
Taş Kağıt Makas AI
Taş Kağıt Makas AI

Hiç yalnız sıkıldığınızı hissettiniz mi? Zeka ile güçlendirilmiş etkileşimli bir sisteme karşı taş, kağıt ve makas oynayalım.

Adım 1: Bu Projede Kullanılanlar

Donanım bileşenleri

  • Raspberry Pi 3 Model B+ × 1
  • Raspberry Pi Kamera Modülü V2 × 1
  • SG90 Mikro servo motor × 1

Yazılım uygulamaları

  • Ahududu Pi Ahududu
  • OpenCV
  • TensorFlow

Adım 2: Fikir?

Image
Image

Farklı alanlarda çeşitli projeler üzerinde çalıştıktan sonra eğlenceli bir proje yapmayı planladım ve taş-kağıt-makas oyunu yapmaya karar verdim:)

Bu projede interaktif bir oyun yapacağız ve karar vermek için AI tarafından desteklenen bilgisayara karşı oynayacağız. AI, Raspberry Pi'ye bağlı Kamerayı kullanarak kullanıcının eliyle ne hareket ettiğini tanır, bunları en iyi kategori (etiket) taş, kağıt veya makasta sınıflandırır. Bilgisayar hareketini yaptıktan sonra Raspberry Pi'ye bağlı step motor, hareketine göre yönü gösterir.

Bu oyun için dikkate alınması gereken kurallar:

  • Kaya makası köreltir
  • Kağıt kayayı kaplar
  • Makas kesilmiş kağıt

Kazanan, yukarıdaki üç koşula göre belirlenecektir. Burada projenin hızlı bir demosunu görelim.

Adım 3: Başlarken?

Başlarken ?
Başlarken ?
Başlarken ?
Başlarken ?

Ahududu Pi

Harika geliştirmeleri olan ve önceki Raspberry Pi 3 Model B'den Daha Güçlü olan bir Raspberry Pi 3 Model B+ kullandım.

Raspberry Pi 3 B+, 1.4GHz 64-bit dört çekirdekli işlemci, çift bantlı kablosuz LAN, Bluetooth 4.2/BLE, daha hızlı Ethernet ve Ethernet Üzerinden Güç desteği (ayrı PoE HAT ile) ile entegredir.

Özellikler:Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz ve 5GHz IEEE 802.11.b/g/n/ac kablosuz LAN, Bluetooth 4.2, BLE, USB 2.0 üzerinden Gigabit Ethernet (maksimum 300 Mbps verim), Genişletilmiş 40-pin GPIO başlığı, Tam boyutlu HDMI4 USB 2.0 bağlantı noktaları, bir Raspberry Pi kamera bağlamak için CSI kamera bağlantı noktası, bir Raspberry Pi dokunmatik ekran bağlamak için DSI ekran bağlantı noktası4 kutuplu stereo çıkış ve kompozit video bağlantı noktası, işletim sisteminizi yüklemek ve veri depolamak için Micro SD bağlantı noktası 5V/2.5A DC güç girişi, Ethernet Üzerinden Güç (PoE) desteği (ayrı PoE HAT gerektirir).

Servo Motor

2.5kg'a (1cm) kadar yükü kaldırabilen yüksek torklu bir motor olan SG-90 servo motor kullanıyoruz.

USB Kamera

Oyunu görüntü işleme ile etkileşimli hale getirmek için bir USB kamera

Step motoru ve Raspberry Pi'yi bağlamak için bazı Jumper kabloları kullanılır.

Adım 4: Raspbian'ı SD Karta Yazmak ?

Raspbian'ı SD Karta Yazmak ?
Raspbian'ı SD Karta Yazmak ?
Raspbian'ı SD Karta Yazmak ?
Raspbian'ı SD Karta Yazmak ?
Raspbian'ı SD Karta Yazmak ?
Raspbian'ı SD Karta Yazmak ?

Raspbian, Raspberry Pi üzerinde çalışan tercih edilen Linux dağıtımıdır. Bu kılavuzda Lite sürümünü kullanacağız, ancak Masaüstü sürümü (grafiksel bir ortamla birlikte gelir) de kullanılabilir.

  • Etcher'ı indirin ve kurun.
  • İçinde SD kart olan bir SD kart okuyucu bağlayın.
  • Etcher'ı açın ve SD karta yazmak istediğiniz Raspberry Pi.img veya.zip dosyasını sabit sürücünüzden seçin.
  • Resminizi yazmak istediğiniz SD kartı seçin.
  • Seçimlerinizi gözden geçirin ve 'Flaş!'ı tıklayın. SD karta veri yazmaya başlamak için

Cihazı ağınıza bağlayın

  • Yine SD kartınızdaki önyükleme biriminin köküne yerleştirilmiş boş ssh dosyası ekleyerek SSH erişimini etkinleştirin.
  • SD kartı Raspberry Pi'ye takın. Yaklaşık 20 saniye içinde açılacaktır. Artık Raspberry Pi'nize SSH erişiminiz olmalıdır. Varsayılan olarak, ana bilgisayar adı raspberrypi.local olacaktır. Bilgisayarınızda bir terminal penceresi açın ve aşağıdakini yazın:

ssh [email protected]

Varsayılan şifre ahududu

Burada Raspberry Pi ile arayüz oluşturmak için ayrı bir monitör kullandım.

Adım 5: Veri Kümesini Toplama ?️

Veri Kümesini Toplama ?️
Veri Kümesini Toplama ?️
Veri Kümesini Toplama ?️
Veri Kümesini Toplama ?️

Bu projedeki ilk adım veri toplamadır. Sistemin el hareketini tanıması ve hareketi tanıması ve buna göre hareket etmesini sağlaması gerekir.

Raspberry Pi'ye pip kurulumunu kullanarak birkaç kitaplık kuruyoruz

emretmek.

sudo apt-get güncelleme && sudo apt-get yükseltmesudo apt-get kurulumu libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip kurulumu opencv pip kurulumu numpy pip kurulumu scikit-learn pip kurulumu scikit-image pip kurulumu h5py pip kurulumu Kere tensorflow pip kurulumu Werkzeug pip kurulumu Keras-Applications pip kurulumu Keras-Preprocessing pip kurulumu keras-squeezenet pip kurulumu astor pip kurulumu tensorboard pip kurulumu tensorflow tahmincisi pip kurulumu sahte pip kurulumu grpcio pip kurulumu absl-pipip kurulumu gast pip kurulumu joblib pip kurulumu Marks-squeezenet kurulumu pip kurulumu pip kurulumu protobuf pip kurulumu PyYAML pip kurulumu altı

OpenCVpackage ile ilgili herhangi bir sorunla karşılaşırsanız, bu paketleri kurmanızı şiddetle tavsiye ederim.

sudo apt-get install libhdf5-dev

sudo apt-get kurulumu libhdf5-seri-dev kurulumu sudo apt-get kurulumu libatlas-base-dev sudo apt-get kurulumu libjasper-dev sudo apt-get kurulumu libqtgui4 sudo apt-get kurulumu libqt4-test

Bu proje için gerekli tüm bağımlılıkları kurduk. Veri seti, görüntülerin uygun etiket altında toplanması ve düzenlenmesi ile yapılır.

Burada aşağıdaki snippet'i kullanarak etiket taş, kağıt ve makas için veri seti görüntüleri oluşturuyoruz.

roi = çerçeve[100:500, 100:500]

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

Her etiket için (taş, kağıt, makas ve Yok) görüntü alınır.

Adım 6: Bir NN Tasarlamak ve Modeli Eğitmek ⚒️⚙️

Bir NN Tasarlamak ve Modeli Eğitmek ⚒️⚙️
Bir NN Tasarlamak ve Modeli Eğitmek ⚒️⚙️

Bu projenin özü, üç kategoriden birini sınıflandıran bir görüntü sınıflandırıcıdır. Bu Sınıflandırıcıyı yapmak için SqueezeNet adlı önceden eğitilmiş CNN'yi (Convolutional Network) kullanıyoruz.

Burada, hareketi tanımlayabilen SqueezeNet modelini oluşturmak için Keras ve TensorFlow kullanıyoruz. Bir önceki adımda oluşturduğumuz görüntüler modeli eğitmek için kullanılır. Model, belirtilen Dönemlerin (Döngülerin) hiçbiri için oluşturulan Veri Kümesi kullanılarak eğitilir.

Model, aşağıda gösterildiği gibi hiperparametrelerle yapılandırılır.

model = Sıralı([SqueezeNet(input_shape=(227, 227, 3), include_top=Yanlış), Bırakma(0.5), Convolution2D(NUM_CLASSES, (1, 1), padding='geçerli'), Aktivasyon('relu'), GlobalAveragePooling2D(), Aktivasyon('softmax')])

Model eğitilirken, her Epoch için modelin kaybını ve doğruluğunu bulabilir ve birkaç Epoch'tan sonra zamanın bir noktasında doğruluk artar.

10 epoch'tan sonra en yüksek doğrulukla modeli oluşturmak yaklaşık 2 saat sürdü. Herhangi bir bellek ayırma hatasıyla karşılaşırsanız, aşağıdaki adımları uygulayın (Adrian'a teşekkürler)

Takas alanınızı artırmak için /etc/dphys-swapfile dosyasını açın ve ardından CONF_SWAPSIZE değişkenini düzenleyin:

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

Takas miktarını 100MB'den 1024MB'ye yükselttiğime dikkat edin. Buradan takas hizmetini yeniden başlatın:

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

$ sudo /etc/init.d/dphys-swapfile başlangıcı

Not:

Takas boyutunu artırmak, hafıza kartınızı yakmanın harika bir yoludur, bu nedenle işiniz bittiğinde bu değişikliği geri aldığınızdan ve takas hizmetini yeniden başlattığınızdan emin olun. Hafıza kartlarını bozan büyük boyutlar hakkında daha fazla bilgiyi buradan okuyabilirsiniz.

7. Adım: Modeli Test Etme ✅

Modelin Test Edilmesi ✅
Modelin Test Edilmesi ✅
Modelin Test Edilmesi ✅
Modelin Test Edilmesi ✅
Modelin Test Edilmesi ✅
Modelin Test Edilmesi ✅

Model oluşturulduktan sonra, "rock-paper-scissors-model.h5" çıktı dosyasını üretir. Bu dosya, sistemin farklı el hareketlerini tanımlayıp tanımlayamayacağını ve eylemleri ayırt edip edemediğini test etmek için kaynak olarak kullanılır.

Model, python betiğine aşağıdaki gibi yüklenir

model = load_model("taş-kağıt-makas-model.h5")

Kamera test görüntüsünü okur ve gerekli renk modelini dönüştürür ve ardından görüntüyü 227 x 227 piksel olarak yeniden boyutlandırır (Model oluşturma için kullanılanla aynı boyut). Modeli eğitmek için kullanılan görüntüler, oluşturulan modeli test etmek için kullanılabilir.

img = cv2.imread(dosya yolu)

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

Model yüklendikten ve görüntü kamera tarafından alındıktan sonra, model, yüklenen SqueezeNet modelini kullanarak yakalanan görüntüyü tahmin eder ve kullanıcının hareketleri için tahminde bulunur.

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

move_code = np.argmax(pred[0]) move_name = eşleyici(move_code) print("Öngörülen: {}".format(move_name))

Modeli çeşitli test görüntüleri ile test etmek için test.py betiğini çalıştırın.

python3 testi.py

Artık model el hareketlerini algılamaya ve anlamaya hazırdır.

Adım 8: Taş-Kağıt-Makas Oyunu

Taş Kağıt Makas Oyunu
Taş Kağıt Makas Oyunu

Oyun, bilgisayarın hareketine karar vermek için rastgele bir sayı üretme işlevi kullanır. Kazananı belirlemek için yukarıda belirtilen kuralları takip eder. Oyun iki mod ile tasarlanmıştır: Normal Mod ve Akıllı mod, burada akıllı mod kullanıcının hareketine karşı saldırır, yani Bilgisayar kullanıcıya karşı tüm hareketleri kazanır.

cap = cv2. VideoCapture(0) # Kameradan görüntü yakalamak için

Şimdi oyunu, sistem/Raspberry Pi'nin elin resmini çektiği ve el hareketini analiz edip tanımladığı Normal modda yapalım. Daha sonra rastgele bir sayı üreteci kullanılarak bilgisayar hareketi oynanır. Kazanan, kurallara göre seçilir ve ardından ekranda görüntülenir. Aşağıdaki komutu kullanarak oyunu başlatın.

python3 oyun.py

Adım 9: Servo Motor Entegrasyonu ?

Son olarak servo motoru bu projeye ekleyin. Servo motor, dönüş açısını kontrol etmek için PWM işlevine sahip Raspberry Pi'nin GPIO pimi 17'dir.

Bu projede kullanılan Servo Motor SG-90'dır. 180°'ye kadar saat yönünde ve saat yönünün tersine dönüş yapabilir.

Bağlantılar aşağıdaki gibi verilmiştir.

Servo Motor - Raspberry Pi

Vcc - +5V

GND - GND

Sinyal - GPIO17

Bu projede RPi. GPIO ve time gibi kütüphaneler kullanılmaktadır.

RPi. GPIO'yu GPIO olarak içe aktar

ithalat zamanı

GPIO pini daha sonra aşağıdaki satırlar kullanılarak PWM'ye yapılandırılır

servoPIN = 17

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

GPIO Pin 17, 50Hz frekansında PWM olarak kullanılmak üzere yapılandırılmıştır. Servo motorun açısı, PWM'nin görev döngüsü (Ton & Toff) ayarlanarak elde edilir.

görev = açı/18 + 2

GPIO.output(servoPIN, True) p. ChangeDutyCycle(görev) time.sleep(1) GPIO.output(servoPIN, False) p. ChangeDutyCycle(0)

Bu, istenen dönüş açısını verecek olan her darbe için istenen adım açısını üretecektir.

Şimdi çizelgeyi aldım ve taş, kağıt ve makas için üç bölüme ayırdım. Servo motor, tablonun ortasına sabitlenmiştir. İşaretçi/kanat, servo motorun miline bağlıdır. Bu şaft, bilgisayarın komut dosyasında hesaplanan mantığa göre hareketine işaret eder.

Adım 10: Projenin Çalışması ?

Image
Image

Ve şimdi, oyun zamanı. Projenin işleyişini görelim.

Bu projeyi oluştururken herhangi bir sorunla karşılaşırsanız, bana sormaktan çekinmeyin. Lütfen daha sonra yapmamı istediğiniz yeni projeler önerin.

Size gerçekten yardımcı olduysa bir başparmak verin ve ilginç projeler için kanalımı takip edin.:)

İsterseniz bu videoyu paylaşın.

Abone olmanıza sevindim:

Okuduğunuz için teşekkürler!

Adım 11: Kod - Proje Deposu

Kod, kod bölümünde bulunabilecek GitHub Deposuna eklenir.

Rahul24-06 / Taş-Kağıt-Makas -

Önerilen: