Daftar Isi:
- Langkah 1: Hal-hal yang Digunakan dalam Proyek Ini
- Langkah 2: Ide?
- Langkah 3: Memulai?
- Langkah 4: Bakar Raspbian ke Kartu SD?
- Langkah 5: Mengumpulkan Dataset ?️
- Langkah 6: Merancang NN & Melatih Model ️⚙️
- Langkah 7: Menguji Model
- Langkah 8: Permainan Batu-Kertas-Gunting
- Langkah 9: Integrasi Motor Servo?
- Langkah 10: Pengerjaan Proyek?
- Langkah 11: Kode - Repo Proyek
Video: Gunting Kertas Batu AI: 11 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:55
Pernah merasa bosan sendirian? Mari bermain batu, kertas, dan gunting melawan sistem interaktif yang didukung oleh kecerdasan.
Langkah 1: Hal-hal yang Digunakan dalam Proyek Ini
Komponen perangkat keras
- Raspberry Pi 3 Model B+ × 1
- Modul Kamera Raspberry Pi V2 × 1
- SG90 Motor servo mikro × 1
Aplikasi perangkat lunak
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Langkah 2: Ide?
Setelah mengerjakan berbagai proyek di domain yang berbeda, saya berencana untuk membuat proyek yang menyenangkan, dan saya memutuskan untuk membuat game batu-kertas-gunting:)
Dalam proyek ini, kami akan membuat game interaktif dan bermain melawan komputer yang didukung oleh AI untuk membuat keputusan. AI menggunakan Kamera yang terhubung ke Raspberry Pi untuk mengenali gerakan apa yang dilakukan pengguna dengan tangan, mengklasifikasikannya ke dalam kategori terbaik (label) batu, kertas, atau gunting. Setelah komputer bergerak, motor stepper yang terhubung ke Raspberry Pi menunjuk ke arah berdasarkan gerakannya.
Aturan yang harus diperhatikan untuk permainan ini:
- Batu menumpulkan gunting
- Kertas menutupi batu
- Gunting memotong kertas
Pemenang akan ditentukan berdasarkan tiga kondisi di atas. Mari kita lihat demo singkat proyek ini di sini.
Langkah 3: Memulai?
Raspberry Pi
Saya telah menggunakan Raspberry Pi 3 Model B+ yang memiliki peningkatan hebat dan Lebih Kuat dari Raspberry Pi 3 Model B sebelumnya.
Raspberry Pi 3 B+ terintegrasi dengan prosesor quad-core 1.4GHz 64-bit, LAN nirkabel dual-band, Bluetooth 4.2/BLE, Ethernet yang lebih cepat, dan dukungan Power-over-Ethernet (dengan PoE HAT terpisah).
Spesifikasi:Broadcom BCM2837B0, Cortex-A53 (ARMv8) SoC 64-bit @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz dan 5GHz IEEE 802.11.b/g/n/ac LAN nirkabel, 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 ukuran penuh, Port kamera CSI untuk menghubungkan kamera Raspberry Pi, Port tampilan DSI untuk menghubungkan layar sentuh Raspberry Pi Output stereo 4 kutub dan komposit port video, port Micro SD untuk memuat sistem operasi Anda dan menyimpan input daya DC 5V/2.5A data, dukungan Power-over-Ethernet (PoE) (memerlukan PoE HAT terpisah).
Motor servo
Kami menggunakan motor servo SG-90, motor torsi tinggi yang dapat menangani beban hingga 2,5kg (1cm).
Kamera USB
Kamera USB untuk membuat game menjadi interaktif dengan pemrosesan gambar
Beberapa kabel Jumper digunakan untuk menghubungkan motor stepper dan Raspberry Pi.
Langkah 4: Bakar Raspbian ke Kartu SD?
Raspbian adalah distribusi Linux pilihan yang berjalan di Raspberry Pi. Dalam panduan ini, kami akan menggunakan versi Lite, tetapi versi Desktop (yang dilengkapi dengan lingkungan grafis) juga dapat digunakan.
- Unduh Etcher dan instal.
- Hubungkan pembaca kartu SD dengan kartu SD di dalamnya.
- Buka Etcher dan pilih dari hard drive Anda file Raspberry Pi.img atau.zip yang ingin Anda tulis ke kartu SD.
- Pilih kartu SD yang ingin Anda gunakan untuk menulis gambar.
- Tinjau pilihan Anda dan klik 'Flash!' untuk mulai menulis data ke kartu SD.
Hubungkan perangkat ke jaringan Anda
- Aktifkan akses SSH dengan menambahkan file ssh kosong, sekali lagi ditempatkan di akar volume boot pada kartu SD Anda.
- Masukkan kartu SD ke dalam Raspberry Pi. Ini akan boot dalam waktu sekitar 20 detik. Anda sekarang harus memiliki akses SSH ke Raspberry Pi Anda. Secara default, nama hostnya adalah raspberrypi.local. Di komputer Anda, buka jendela terminal dan ketik berikut ini:
Kata sandi default adalah raspberry
Di sini saya telah menggunakan monitor terpisah untuk berinteraksi dengan Raspberry Pi.
Langkah 5: Mengumpulkan Dataset ?️
Langkah pertama dalam proyek ini adalah pengumpulan data. Sistem harus mengidentifikasi gerakan tangan dan mengenali tindakan dan membuatnya bergerak sesuai.
Kami menginstal beberapa perpustakaan ke Raspberry Pi menggunakan pip install
memerintah.
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-pelajari pip install scikit-image pip install h5py pip install Keras pip install tensorflow pip install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip install tensorboard pip install tensorflow-estimator pip install mock pip install grpcio pip install absl-pypip install gast pip install joblib pip install Markdown pip install protobuf pip install PyYAML pip install enam
Jika Anda menghadapi masalah dengan OpenCVpackage, saya sangat menyarankan untuk menginstal paket-paket 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 install libqt4-test
Kami telah menginstal semua dependensi yang diperlukan untuk proyek ini. Data-set dibuat dengan koleksi dan pengaturan gambar di bawah label yang sesuai.
Di sini kami membuat gambar kumpulan data untuk label batu, kertas, dan gunting menggunakan cuplikan berikut.
roi = bingkai[100:500, 100:500]
save_path = os.path.join(img_class_path, '{}.jpg'.format(count + 1)) cv2.imwrite(save_path, roi)
Gambar diambil untuk setiap label (batu, kertas, gunting, dan Tidak Ada).
Langkah 6: Merancang NN & Melatih Model ️⚙️
Inti dari proyek ini adalah pengklasifikasi gambar yang mengklasifikasikan salah satu dari tiga kategori. Untuk membuat Classifier ini, kami menggunakan CNN (Convolutional Network) yang telah dilatih sebelumnya yang disebut SqueezeNet.
Di sini kita menggunakan Keras dan TensorFlow untuk menghasilkan model SqueezeNet yang dapat mengidentifikasi gerakan. Gambar yang kami hasilkan pada langkah sebelumnya digunakan untuk melatih model. Model dilatih menggunakan Dataset yang dihasilkan untuk tidak ada Zaman (Siklus) yang disebutkan.
Model dikonfigurasi dengan hyperparameters seperti yang ditunjukkan di bawah ini.
model = Berurutan([SqueezeNet(input_shape=(227, 227, 3), include_top=False), Putus sekolah (0,5), Konvolusi2D(NUM_CLASSES, (1, 1), padding='valid'), Aktivasi('relu'), GlobalAveragePooling2D(), Aktivasi('softmax')])
Saat model sedang dilatih, Anda dapat menemukan kehilangan dan akurasi model untuk setiap Epoch dan akurasi meningkat di beberapa titik waktu setelah beberapa Epoch.
Kira-kira butuh 2 jam untuk menghasilkan model dengan akurasi tertinggi setelah 10 epoch. Jika Anda menghadapi kesalahan alokasi memori, lakukan langkah-langkah berikut (Terima kasih kepada Adrian)
Untuk menambah ruang swap Anda, buka /etc/dphys-swapfile dan kemudian edit variabel CONF_SWAPSIZE:
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=1024
Perhatikan bahwa saya meningkatkan swap dari 100MB menjadi 1024MB. Dari sana, mulai ulang layanan swap:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Catatan:
Meningkatkan ukuran swap adalah cara yang bagus untuk membakar kartu memori Anda, jadi pastikan untuk mengembalikan perubahan ini dan memulai ulang layanan swap setelah selesai. Anda dapat membaca lebih lanjut tentang ukuran besar yang merusak kartu memori di sini.
Langkah 7: Menguji Model
Setelah model dihasilkan, Ini menghasilkan file output "batu-kertas-gunting-model.h5". File ini digunakan sebagai sumber untuk menguji apakah sistem dapat mengidentifikasi gerakan tangan yang berbeda dan dapat membedakan tindakan.
Model dimuat dalam skrip python sebagai berikut:
model = load_model("batu-kertas-gunting-model.h5")
Kamera membaca gambar uji dan mengubah model warna yang diperlukan, lalu 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(path file)
img = cv2.cvtColor(img, cv2. COLOR_BGR2RGB) img = cv2.resize(img, (227, 227))
Setelah model dimuat dan gambar diperoleh oleh kamera, model memprediksi gambar yang diambil menggunakan model SqueezeNet yang dimuat, dan membuat prediksi untuk pergerakan pengguna.
pred = model.predict(np.array())
move_code = np.argmax(pred[0]) move_name = mapper(move_code) print("Diprediksi: {}".format(move_name))
Jalankan skrip test.py untuk menguji model dengan berbagai gambar uji.
python3 test.py
Sekarang model siap untuk mendeteksi dan memahami gerakan tangan.
Langkah 8: Permainan Batu-Kertas-Gunting
Game menggunakan fungsi pembuatan angka acak untuk memutuskan langkah komputer. Ini mengikuti aturan yang disebutkan di atas untuk menentukan pemenang. Gim ini dirancang dengan dua mode: Mode Normal dan Mode Cerdas, di mana mode cerdas menyerang balik gerakan pengguna, yaitu Komputer memenangkan semua gerakan melawan pengguna.
cap = cv2. VideoCapture(0) # Untuk mengambil gambar dari Kamera
Sekarang mari kita buat game dalam mode Normal di mana sistem/ Raspberry Pi mengambil gambar tangan dan menganalisis serta mengidentifikasi gerakan tangan. Kemudian menggunakan generator angka acak, gerakan komputer dimainkan. Pemenang dipilih berdasarkan aturan dan kemudian ditampilkan di layar. Mulai permainan menggunakan perintah berikut.
python3 play.py
Langkah 9: Integrasi Motor Servo?
Terakhir, tambahkan motor servo ke proyek ini. Motor servo adalah GPIO pin 17 dari Raspberry Pi, yang memiliki fungsi PWM untuk mengontrol sudut putaran.
Motor Servo yang digunakan dalam proyek ini adalah SG-90. Itu dapat membuat rotasi searah jarum jam dan berlawanan arah jarum jam hingga 180 °
Koneksi diberikan sebagai berikut.
Servo Motor - Raspberry Pi
Vcc - +5V
GND - GND
Sinyal - GPIO17
Pustaka seperti RPi. GPIO dan waktu digunakan dalam proyek ini.
impor RPi. GPIO sebagai GPIO
waktu impor
Pin GPIO kemudian dikonfigurasikan 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 mengatur siklus kerja (Ton & Toff) dari 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 pulsa, yang akan memberikan sudut rotasi yang diinginkan.
Sekarang saya telah mengambil bagan dan mengirisnya menjadi tiga bagian, untuk batu, kertas, dan gunting. Motor servo dipasang di tengah grafik. Pointer/flap terhubung ke poros motor servo. Poros ini menunjuk ke gerakan komputer sesuai dengan logika yang dihitung dalam skrip.
Langkah 10: Pengerjaan Proyek?
Dan sekarang, waktunya bermain. Mari kita lihat cara kerja proyek.
Jika Anda menghadapi masalah dalam membangun proyek ini, jangan ragu untuk bertanya kepada saya. Tolong sarankan proyek baru yang Anda ingin saya lakukan selanjutnya.
Berikan jempol jika itu benar-benar membantu Anda dan ikuti saluran saya untuk proyek-proyek menarik.:)
Bagikan video ini jika Anda suka.
Senang Anda berlangganan:
Terima kasih sudah membaca!
Langkah 11: Kode - Repo Proyek
Kode ditambahkan ke Repositori GitHub yang dapat ditemukan di bagian kode.
Rahul24-06 / Rock-Paper-Scissors -
Direkomendasikan:
Permainan Gunting Kertas Batu: 6 Langkah
Stone Paper Scissor Game: Ini adalah instruksi pertama saya. Saya ingin menulis satu untuk waktu yang lama tetapi saya tidak memiliki proyek apa pun yang dapat saya publikasikan di sini. Jadi ketika saya mendapat ide proyek ini, saya memutuskan ini adalah salah satunya. Jadi saya menjelajahi situs tensorflow.js, itu
Pemelihara Kertas: Hemat Kertas Toilet Dengan Terapi Kejut: 4 Langkah
Pemelihara Kertas: Hemat Kertas Toilet Dengan Terapi Kejut: Kita semua pernah melihat rak kosong di toko bahan makanan dan sepertinya akan ada kekurangan kertas toilet untuk sementara waktu. Jika Anda tidak membeli lebih awal, Anda mungkin berada dalam situasi yang saya alami. Saya memiliki rumah dengan 6 orang dan hanya beberapa gulungan untuk bertahan
Game Gunting Batu Kertas Arduino Genggam Menggunakan Layar LCD 20x4 Dengan I2C: 7 Langkah
Game Gunting Batu Kertas Arduino Genggam Menggunakan Layar LCD 20x4 Dengan I2C: Halo semuanya atau mungkin saya harus mengatakan "Halo Dunia!"Senang rasanya berbagi proyek dengan Anda yang telah menjadi entri saya untuk banyak hal Arduino. Ini adalah permainan Gunting Batu Kertas Arduino genggam menggunakan layar LCD I2C 20x4. SAYA
Gunting Kertas Batu: 10 Langkah
Gunting Kertas Batu: Tujuan: Setelah menyelesaikan ini, Anda akan belajar cara membuat permainan Batu Gunting Kertas sederhana dari awal menggunakan Code.org. Bahan / Persyaratan yang dibutuhkan: Pemahaman dasar tentang sintaks Javascript, komputer, akun Code.org
Pemrograman Berorientasi Objek: Membuat Objek Pembelajaran/Metode/Teknik Pengajaran Menggunakan Gunting: 5 Langkah
Pemrograman Berorientasi Objek: Membuat Objek Pembelajaran/Metode/Teknik Mengajar Menggunakan Gunting: Metode pembelajaran/pengajaran untuk siswa yang baru mengenal pemrograman berorientasi objek. Ini adalah cara untuk memungkinkan mereka memvisualisasikan dan melihat proses pembuatan objek dari kelas. Bagian: 1. Gunting (apa pun bisa dilakukan). 2. Secarik kertas atau kartu stok. 3. Penanda