Isi kandungan:

Rock Paper Scissor AI: 11 Langkah
Rock Paper Scissor AI: 11 Langkah

Video: Rock Paper Scissor AI: 11 Langkah

Video: Rock Paper Scissor AI: 11 Langkah
Video: VFX Reveal Before & After - Anime Rock, Paper, Scissors 2024, November
Anonim
Gunting Kertas Batu AI
Gunting Kertas Batu AI

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?

Image
Image

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?

Bermula?
Bermula?
Bermula?
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?

Bakar Raspbian ke Kad SD?
Bakar Raspbian ke Kad SD?
Bakar Raspbian ke Kad SD?
Bakar Raspbian ke Kad SD?
Bakar Raspbian ke Kad SD?
Bakar 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:

ssh [email protected]

Kata laluan lalai adalah raspberry

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

Langkah 5: Mengumpulkan Set Data? ️

Mengumpulkan Dataset? ️
Mengumpulkan Dataset? ️
Mengumpulkan Dataset? ️
Mengumpulkan Dataset? ️

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 ⚒️⚙️

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

Menguji Model ✅
Menguji Model ✅
Menguji Model ✅
Menguji Model ✅
Menguji Model ✅
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 Batu-Kertas-Gunting
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?

Image
Image

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: