İçindekiler:
- Adım 1: Bu Projede Kullanılanlar
- Adım 2: Fikir?
- Adım 3: Başlarken?
- Adım 4: Raspbian'ı SD Karta Yazmak ?
- Adım 5: Veri Kümesini Toplama ?️
- Adım 6: Bir NN Tasarlamak ve Modeli Eğitmek ⚒️⚙️
- 7. Adım: Modeli Test Etme ✅
- Adım 8: Taş-Kağıt-Makas Oyunu
- Adım 9: Servo Motor Entegrasyonu ?
- Adım 10: Projenin Çalışması ?
- Adım 11: Kod - Proje Deposu
Video: Taş Kağıt Makas AI: 11 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:18
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?
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?
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, 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:
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 ?️
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 ⚒️⚙️
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 ✅
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
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ı ?
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:
Kolay Kağıt Pil Tutucu: 5 Adım
Kolay Kağıt Pil Tutacağı: Tıpkı benim gibi çocuklarınızla veya öğrencilerinizle küçük projeler yaparken madeni para pili için bir tutucu bulmakta zorlanıyorsanız, bu Talimatlar tam size göre. Bu pil tutucu, nasıl kapattığınıza bağlı olarak AÇIK veya KAPALI konuma da sahiptir
Taş Kağıt Makas Oyunu: 6 Adım
Taş Kağıt Makas Oyunu: Bu benim ilk talimatım. Uzun zamandır yazmak istiyordum ama elimde burada yayınlayabileceğim bir proje yoktu. Bu proje hakkında bir fikir bulduğumda, bunun tek olduğuna karar verdim.Bu yüzden tensorflow.js'nin sitesine göz atıyordum, ben
I2C ile 20x4 LCD Ekran Kullanan Elde Taşınabilir Arduino Kağıt Taş Makas Oyunu: 7 Adım
I2C ile 20x4 LCD Ekran Kullanan Elde Taşınabilir Arduino Kağıt Taş Makas Oyunu: Herkese merhaba ya da belki "Merhaba Dünya!" demeliyim, Arduino'ya birçok şeye giriş yaptığım bir projeyi sizlerle paylaşmak büyük bir zevk olurdu. Bu, I2C 20x4 LCD ekran kullanan elde taşınabilir bir Arduino Kağıt Taş Makas oyunudur. BEN
Taş Kağıt Makas: 10 Adım
Rock Paper Scissors: Amaç: Bunu tamamladıktan sonra Code.org kullanarak basit bir Rock, Paper Scissors oyununu sıfırdan nasıl yapacağınızı öğreneceksiniz. Gerekli Malzemeler / Gereksinimler: Javascript sözdiziminin temel anlayışı, bir bilgisayar, bir Code.org hesabı
Nesne Yönelimli Programlama: Nesne Oluşturma Makas Kullanarak Öğrenme/Öğretme Yöntemi/Tekniği: 5 Adım
Nesne Yönelimli Programlama: Nesne Oluşturma Öğrenme/Öğretme Yöntemi/Teknik Makas Kullanarak: Nesne yönelimli programlamaya yeni başlayan öğrenciler için öğrenme/öğretme yöntemi. Bu onların sınıflardan nesne yaratma sürecini görselleştirmelerine ve görmelerine izin vermenin bir yoludur. Parçalar: 1. Makas (her türlü olur). 2. Kağıt veya karton parçası. 3. İşaretleyici.