Isi kandungan:
- Langkah 1: Perkara Yang Digunakan dalam Projek Ini
- Langkah 2: Idea?
- Langkah 3: Bermula?
- Langkah 4: Membakar Raspbian ke Kad SD?
- Langkah 5: Mengumpulkan Set Data? ️
- Langkah 6: Merancang NN & Melatih Model ⚒️⚙️
- Langkah 7: Menguji Model ✅
- Langkah 8: Permainan Batu-Kertas-Gunting
- Langkah 9: Integrasi Motor Servo?
- Langkah 10: Mengendalikan Projek?
- Langkah 11: Kod - Repo Projek
Video: Rock Paper Scissor AI: 11 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:08
Pernah merasa bosan sendirian? Mari bermain batu, kertas, dan gunting terhadap sistem interaktif yang dilengkapi dengan kecerdasan.
Langkah 1: Perkara Yang Digunakan dalam Projek Ini
Komponen perkakasan
- Raspberry Pi 3 Model B + × 1
- Modul Kamera Raspberry Pi V2 × 1
- Motor servo mikro SG90 × 1
Aplikasi perisian
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Langkah 2: Idea?
Setelah mengerjakan pelbagai projek di domain yang berbeza, saya merancang untuk membuat projek yang menyeronokkan, dan saya memutuskan untuk membuat permainan gunting batu-kertas:)
Dalam projek ini, kami akan membuat permainan interaktif dan bermain dengan komputer yang dikuasakan oleh AI untuk membuat keputusan. AI menggunakan Kamera yang disambungkan ke Raspberry Pi untuk mengenali apa yang membuat pengguna membuat tangan, mengklasifikasikannya ke dalam kategori (label) batu, kertas, atau gunting terbaik. Setelah komputer bergerak, motor stepper yang disambungkan ke Raspberry Pi menunjuk ke arah berdasarkan pergerakannya.
Peraturan yang harus dipertimbangkan untuk permainan ini:
- Rock menggunting gunting
- Kertas meliputi batu
- Gunting memotong kertas
Pemenang akan ditentukan berdasarkan tiga syarat di atas. Mari lihat demo ringkas projek di sini.
Langkah 3: Bermula?
Pai raspberi
Saya telah menggunakan Raspberry Pi 3 Model B + yang mempunyai penambahbaikan yang hebat dan Lebih Kuat daripada Model B Raspberry Pi 3 sebelumnya.
Raspberry Pi 3 B + disepadukan dengan pemproses quad-core 64-bit 1.4GHz, LAN tanpa wayar dua jalur, Bluetooth 4.2 / BLE, Ethernet yang lebih pantas, dan sokongan Power-over-Ethernet (dengan PoE HAT yang berasingan).
Spesifikasi: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz dan 5GHz IEEE 802.11.b / g / n / ac LAN tanpa wayar, Bluetooth 4.2, BLE, Gigabit Ethernet melalui USB 2.0 (throughput maksimum 300 Mbps), Header GPIO 40-pin yang diperluas, port HDMI4 USB 2.0 bersaiz penuh, port kamera CSI untuk menyambungkan kamera Raspberry Pi, port paparan DSI untuk menyambungkan paparan skrin sentuh Raspberry Pi output stereo 4-tiang dan komposit port video, port Micro SD untuk memuatkan sistem operasi anda dan menyimpan data input kuasa DC 5V / 2.5A, sokongan Power-over-Ethernet (PoE) (memerlukan PoE HAT yang berasingan).
Motor Servo
Kami menggunakan motor servo SG-90, motor tork tinggi yang dapat menangani beban hingga 2.5kg (1cm).
Kamera USB
Kamera USB untuk menjadikan permainan interaktif dengan pemprosesan gambar
Beberapa kabel Jumper digunakan untuk memasang motor stepper dan Raspberry Pi.
Langkah 4: Membakar Raspbian ke Kad SD?
Raspbian adalah sebaran pilihan Linux yang dijalankan pada Raspberry Pi. Dalam panduan ini, kami akan menggunakan versi Lite, tetapi versi Desktop (yang dilengkapi dengan persekitaran grafik) juga dapat digunakan.
- Muat turun Etcher dan pasangkannya.
- Sambungkan pembaca kad SD dengan kad SD di dalamnya.
- Buka Etcher dan pilih dari cakera keras fail Raspberry Pi.img atau.zip yang ingin anda tulis ke kad SD.
- Pilih kad SD yang ingin anda tuliskan gambar anda.
- Semak pilihan anda dan klik 'Flash!' untuk mula menulis data ke kad SD.
Sambungkan peranti ke rangkaian anda
- Aktifkan akses SSH dengan menambahkan ssh fail kosong, sekali lagi diletakkan di akar kelantangan but pada kad SD anda.
- Masukkan kad SD ke dalam Raspberry Pi. Ia akan boot dalam masa kira-kira 20 saat. Anda kini harus mempunyai akses SSH ke Raspberry Pi anda. Secara lalai, nama hosnya akan menjadi raspberrypi.local. Di komputer anda, buka tetingkap terminal dan taipkan yang berikut:
Kata laluan lalai adalah raspberry
Di sini saya telah menggunakan monitor yang berasingan untuk berinteraksi dengan Raspberry Pi.
Langkah 5: Mengumpulkan Set Data? ️
Langkah pertama dalam projek ini adalah pengumpulan data. Sistem harus mengenal pasti isyarat tangan dan mengenali tindakan dan membuatnya bergerak dengan sewajarnya.
Kami memasang beberapa perpustakaan ke Raspberry Pi menggunakan pemasangan pip
arahan.
sudo apt-get update & sudo apt-get upgradeadeso 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 pasang pip tensorflow pasang pip Werkzeug pasang Keras-Aplikasi pip pasang Keras-Pipa pemprosesan pasang paip keras-tekan memasang pip protobuf pip memasang PyYAML pip memasang enam
Sekiranya anda menghadapi masalah dengan OpenCVpackage, saya sangat mengesyorkan memasang pakej ini.
sudo apt-get install libhdf5-dev
sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get pasang libqt4-test
Kami telah memasang semua pergantungan yang diperlukan untuk projek ini. Kumpulan Data dibuat berdasarkan koleksi dan susunan gambar di bawah label yang sesuai.
Di sini kami membuat gambar set data untuk label batu, kertas dan gunting menggunakan coretan berikut.
roi = bingkai [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (kiraan + 1)) cv2.imwrite (save_path, roi)
Gambar diambil untuk setiap label (batu, kertas, gunting dan Tiada).
Langkah 6: Merancang NN & Melatih Model ⚒️⚙️
Inti projek ini adalah pengkelasan gambar yang mengklasifikasikan salah satu daripada tiga kategori. Untuk menjadikan Classifier ini, kami menggunakan CNN yang telah dilatih (Convolutional Network) yang disebut SqueezeNet.
Di sini kita menggunakan Keras dan TensorFlow untuk menghasilkan model SqueezeNet yang dapat mengenal pasti gerak isyarat. Gambar yang kami hasilkan pada langkah sebelumnya digunakan untuk melatih model. Model dilatih menggunakan Dataset yang dihasilkan untuk tidak ada Epochs (Cycles) yang disebutkan.
Model dikonfigurasi dengan hiperparameter seperti yang ditunjukkan di bawah.
model = Berurutan ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Putus sekolah (0.5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Pengaktifan ('relu'), GlobalAveragePooling2D (), Pengaktifan ('softmax')])
Semasa model sedang berlatih, anda dapat mengetahui kehilangan dan ketepatan model untuk setiap Epoch dan ketepatannya meningkat pada satu ketika selepas beberapa Epoch.
Kira-kira mengambil masa 2 jam untuk menghasilkan model dengan ketepatan tertinggi setelah 10 zaman. Sekiranya anda menghadapi kesilapan peruntukan memori, lakukan langkah-langkah berikut (Terima kasih kepada Adrian)
Untuk meningkatkan ruang pertukaran anda, buka / etc / dphys-swapfile dan kemudian edit pemboleh ubah CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Perhatikan bahawa saya meningkatkan pertukaran dari 100MB hingga 1024MB. Dari sana, mulakan semula perkhidmatan pertukaran:
$ sudo /etc/init.d/dphys-swapfile berhenti
$ sudo /etc/init.d/dphys-swapfile bermula
Catatan:
Meningkatkan ukuran pertukaran adalah cara terbaik untuk membakar kad memori anda, jadi pastikan untuk mengembalikan perubahan ini dan mulakan semula perkhidmatan pertukaran apabila anda selesai. Anda boleh membaca lebih lanjut mengenai saiz kad memori yang merosakkan di sini.
Langkah 7: Menguji Model ✅
Setelah model dihasilkan, ia menghasilkan fail output "rock-paper-scissors-model.h5". Fail ini digunakan sebagai sumber untuk menguji sama ada sistem dapat mengenal pasti isyarat tangan yang berbeza dan dapat membezakan tindakannya.
Model dimuat dalam skrip python seperti berikut
model = load_model ("batu-kertas-gunting-model.h5")
Kamera membaca gambar ujian dan mengubah model warna yang diperlukan, dan kemudian mengubah ukuran gambar menjadi 227 x 227 piksel (Ukuran yang sama digunakan untuk pembuatan model). Gambar yang digunakan untuk melatih model dapat digunakan untuk menguji model yang dihasilkan.
img = cv2.imread (jalan masuk)
img = cv2.cvtWarna (img, cv2. COLOR_BGR2RGB) img = cv2. ubah saiz (img, (227, 227))
Setelah model dimuat dan gambar diperoleh oleh kamera, model meramalkan gambar yang diambil menggunakan model SqueezeNet dimuat, dan membuat ramalan untuk pergerakan pengguna.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Ramalan: {}". format (move_name))
Jalankan skrip test.py untuk menguji model dengan pelbagai gambar ujian.
python3 test.py
Kini model itu siap untuk mengesan dan memahami gerak tangan.
Langkah 8: Permainan Batu-Kertas-Gunting
Permainan menggunakan fungsi penjanaan nombor secara rawak untuk menentukan pergerakan komputer. Ia mengikuti peraturan yang dinyatakan di atas untuk menentukan pemenangnya. Permainan ini dirancang dengan dua mod: Mod Normal dan mod Pintar, di mana mod pintar menyerang pergerakan pengguna, iaitu Komputer memenangkan semua pergerakan terhadap pengguna.
cap = cv2. VideoCapture (0) # Untuk menangkap gambar dari Kamera
Sekarang mari kita buat permainan dalam mod Normal di mana sistem / Raspberry Pi mengambil gambar tangan dan menganalisis dan mengenal pasti isyarat tangan. Kemudian menggunakan penjana nombor rawak, pergerakan komputer dimainkan. Pemenang dipilih berdasarkan peraturan dan kemudian dipaparkan di skrin. Mulakan permainan dengan menggunakan arahan berikut.
python3 play.py
Langkah 9: Integrasi Motor Servo?
Akhirnya, tambahkan motor servo ke projek ini. Motor servo adalah GPIO pin 17 dari Raspberry Pi, yang mempunyai fungsi PWM untuk mengawal sudut putaran.
Servo Motor yang digunakan dalam projek ini ialah SG-90. Ia boleh membuat putaran mengikut arah jam dan berlawanan arah jam hingga 180 °
Sambungan diberikan seperti berikut.
Servo Motor - Raspberry Pi
Vcc - + 5V
GND - GND
Isyarat - GPIO17
Perpustakaan seperti RPi. GPIO dan masa digunakan dalam projek ini.
import RPi. GPIO sebagai GPIO
masa import
Pin GPIO kemudian dikonfigurasi ke PWM menggunakan baris berikut
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 dikonfigurasi untuk digunakan sebagai PWM pada frekuensi 50Hz. Sudut motor servo dicapai dengan menetapkan kitaran tugas (Ton & Toff) PWM
tugas = sudut / 18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Ini akan menghasilkan sudut langkah yang diinginkan untuk setiap nadi, yang akan memberikan sudut putaran yang diinginkan.
Sekarang saya telah mengambil carta dan memotongnya menjadi tiga bahagian, untuk batu, kertas, dan gunting. Motor Servo terpaku ke tengah carta. Penunjuk / kepak disambungkan ke batang motor servo. Poros ini menunjukkan pergerakan komputer mengikut logik yang dihitung dalam skrip.
Langkah 10: Mengendalikan Projek?
Dan sekarang, ia adalah waktu bermain. Mari lihat kerja projek.
Sekiranya anda menghadapi sebarang masalah dalam membina projek ini, sila tanya saya. Tolong cadangkan projek baru yang anda mahu saya lakukan seterusnya.
Beri jempol jika itu benar-benar membantu anda dan ikuti saluran saya untuk projek menarik.:)
Kongsi video ini jika anda suka.
Senang anda melanggan:
Terima kasih untuk membaca!
Langkah 11: Kod - Repo Projek
Kod tersebut ditambahkan ke GitHub Repository yang boleh didapati di bahagian kod.
Rahul24-06 / Batu-Kertas-Gunting -
Disyorkan:
Jadikan Adaptor Rock Band Ekit Anda Sendiri (tanpa Adaptor Legacy), Tanpa Kekurangan !: 10 Langkah
Buat Adaptor Rock Band Ekit Anda Sendiri (tanpa Legacy Adapter), Tidak Menghancurkan !: Setelah mendengar tuan rumah podcast yang terkenal menyebutkan keprihatinannya mengenai penyesuai USB warisannya yang mati, saya pergi mencari penyelesaian DIY untuk menghubungkan eKit yang lebih baik / tersuai ke RB . Terima kasih kepada Mr DONINATOR di Youtube yang membuat video yang memperincikan p
Permainan Gunting Kertas Rock Arduino Genggam Menggunakan Paparan LCD 20x4 Dengan I2C: 7 Langkah
Permainan Gunting Kertas Rock Arduino Genggam Menggunakan Paparan LCD 20x4 Dengan I2C: Halo semua atau mungkin saya harus mengatakan " Hello World! &Quot; Akan sangat senang berkongsi projek dengan anda yang telah menjadi entri saya kepada banyak perkara Arduino. Ini adalah permainan Arduino Paper Rock Scissors genggam yang menggunakan paparan LCD I2C 20x4. Saya
Scissor Drive Servo Hat: 4 Langkah (dengan Gambar)
Scissor Drive Servo Hat: Projek percetakan 3D dan servo motor ringkas ini adalah sentimen yang baik untuk Simone Giertz, pembuat hebat yang baru sahaja menjalani pembedahan pembuangan tumor otak. Peranti gunting dipacu oleh motor servo mikro dan mikrokontroler Trinket yang menjalankan Ard
Putar Drum Band Rock X ke dalam Drum Elektronik Sendiri Midi: 4 Langkah (dengan Gambar)
Ubah Drum Band Rock X ke dalam Drum Elektronik Midi Berdiri Sendiri .: Saya bernasib baik kerana mendapat set drum x-box bekas, ia dalam bentuk agak kasar, dan tidak ada dayung, tetapi tidak ada yang tidak dapat diperbaiki. ubahnya menjadi set dram elektrik yang berdiri sendiri. Membaca nilai analog dari sensor piezo dan mengubahnya menjadi MIDI comman
Robotics Remote Control Rock Crawler Arduino: 4 Langkah
Robotics Remote Control Rock Crawler Arduino: Ini kelihatan dan sangat barebone. Saya mengesyorkan kepada sesiapa yang ingin melakukan projek ini, pertimbangkan beberapa cara untuk menutupi elektronik untuk melindungi daripada air dan kotoran