Daftar Isi:

Gunting Kertas Batu AI: 11 Langkah
Gunting Kertas Batu AI: 11 Langkah

Video: Gunting Kertas Batu AI: 11 Langkah

Video: Gunting Kertas Batu AI: 11 Langkah
Video: MAIN BATU GUNTING KERTAS,YANG MENANG DAPET HADIAH 2024, November
Anonim
Gunting Kertas Batu AI
Gunting Kertas Batu AI

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?

Image
Image

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?

Mulai ?
Mulai ?
Mulai ?
Mulai ?

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?

Membakar Raspbian ke Kartu SD?
Membakar Raspbian ke Kartu SD?
Membakar Raspbian ke Kartu SD?
Membakar Raspbian ke Kartu SD?
Membakar Raspbian ke Kartu SD?
Membakar 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:

ssh [email protected]

Kata sandi default adalah raspberry

Di sini saya telah menggunakan monitor terpisah untuk berinteraksi dengan Raspberry Pi.

Langkah 5: Mengumpulkan Dataset ?️

Mengumpulkan Dataset ?️
Mengumpulkan Dataset ?️
Mengumpulkan Dataset ?️
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 ️⚙️

Merancang NN & Melatih Model ️⚙️
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

Menguji Model
Menguji Model
Menguji Model
Menguji Model
Menguji Model
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

Permainan Batu-Kertas-Gunting
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?

Image
Image

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: