Talaan ng mga Nilalaman:
- Hakbang 1: Mga Bagay na Ginamit sa Project na Ito
- Hakbang 2: Ideya?
- Hakbang 3: Pagsisimula?
- Hakbang 4: Sunugin ang Raspbian sa SD Card?
- Hakbang 5: Pagkolekta ng Dataset? ️
- Hakbang 6: Pagdidisenyo ng isang NN at Pagsasanay sa Modelo ⚒️⚙️
- Hakbang 7: Pagsubok sa Modelo ✅
- Hakbang 8: Laro sa Rock-Paper-Gunting
- Hakbang 9: Pagsasama ng Servo Motor?
- Hakbang 10: Paggawa ng Proyekto?
- Hakbang 11: Code - Project Repo
Video: Rock Paper Scissor AI: 11 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
Naranasan mo na bang mainis na mag-isa? Maglaro tayo ng bato, papel, at gunting laban sa isang interactive na system na pinalakas ng intelihensiya.
Hakbang 1: Mga Bagay na Ginamit sa Project na Ito
Mga bahagi ng hardware
- Raspberry Pi 3 Model B + × 1
- Raspberry Pi Camera Module V2 × 1
- SG90 Micro-servo motor × 1
Mga app ng software
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Hakbang 2: Ideya?
Matapos magtrabaho sa iba't ibang mga proyekto sa iba't ibang mga domain, binalak kong gumawa ng isang kasiya-siyang proyekto, at nagpasya akong gumawa ng isang rock-paper-gunting na laro:)
Sa proyektong ito, gumawa kami ng isang interactive na laro at maglaro laban sa computer na pinalakas ng AI upang magpasya. Ginagamit ng AI ang Camera na konektado sa Raspberry Pi upang makilala kung ano ang gumagalaw ng gumagamit gamit ang kamay, inuri ito sa pinakamahusay na kategorya (label) na bato, papel, o gunting. Kapag ang computer ay gumagalaw, ang stepper motor ay konektado sa mga puntos ng Raspberry Pi patungo sa direksyon batay sa paglipat nito.
Mga panuntunan na dapat isaalang-alang para sa larong ito:
- Pinupula ng bato ang gunting
- Sinasaklaw ng papel ang bato
- Gumupit ng papel ang gunting
Mapagpasyahan ang nagwagi batay sa tatlong mga kundisyon sa itaas. Tingnan natin ang isang mabilis na demo ng proyekto dito.
Hakbang 3: Pagsisimula?
Raspberry Pi
Gumamit ako ng isang Raspberry Pi 3 Model B + na may mahusay na mga pagpapahusay at Mas Malakas kaysa sa naunang Raspberry Pi 3 Model B.
Ang Raspberry Pi 3 B + ay isinama sa 1.4GHz 64-bit quad-core processor, dual-band wireless LAN, Bluetooth 4.2 / BLE, mas mabilis na Ethernet, at suporta ng Power-over-Ethernet (na may hiwalay na PoE HAT).
Mga pagtutukoy: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz at 5GHz IEEE 802.11.b / g / n / ac wireless LAN, Bluetooth 4.2, BLE, Gigabit Ethernet sa USB 2.0 (maximum throughput ng 300 Mbps), Ang pinalawig na 40-pin GPIO header, Full-size HDMI4 USB 2.0 port, CSI camera port para sa pagkonekta ng isang Raspberry Pi camera, DSI display port para sa pagkonekta ng isang Raspberry Pi touchscreen display4-post stereo output at pinaghalo video port, Micro SD port para sa paglo-load ng iyong operating system at pag-iimbak ng data5V / 2.5A DC power input, suporta ng Power-over-Ethernet (PoE) (nangangailangan ng hiwalay na PoE HAT).
Servo Motor
Gumagamit kami ng isang SG-90 servo motor, isang mataas na torque motor na maaaring hawakan ang pagkarga ng hanggang sa 2.5kg (1cm).
USB Camera
Isang USB camera upang gawing interactive ang laro sa pagproseso ng imahe
Ang ilang mga Jumper cables ay ginagamit upang i-wire ang stepper motor at Raspberry Pi.
Hakbang 4: Sunugin ang Raspbian sa SD Card?
Ang Raspbian ay ang pamamahagi ng pagpipilian ng Linux na tumatakbo sa Raspberry Pi. Sa gabay na ito, gagamitin namin ang bersyon ng Lite, ngunit ang bersyon ng Desktop (na kasama ng isang grapikong kapaligiran) ay maaari ding magamit.
- I-download ang Etcher at i-install ito.
- Ikonekta ang isang SD card reader sa loob ng SD card.
- Buksan ang Etcher at pumili mula sa iyong hard drive ng Raspberry Pi.img o.zip file na nais mong isulat sa SD card.
- Piliin ang SD card kung saan mo nais isulat ang iyong imahe.
- Suriin ang iyong mga napili at i-click ang 'Flash!' upang simulang magsulat ng data sa SD card.
Ikonekta ang aparato sa iyong network
- Paganahin ang pag-access ng SSH sa pamamagitan ng pagdaragdag ng walang laman na file ssh, muling inilagay sa ugat ng dami ng boot sa iyong SD card.
- Ipasok ang SD card sa Raspberry Pi. Mag-boot ito sa halos 20 segundo. Dapat ay mayroon ka nang access sa SSH sa iyong Raspberry Pi. Bilang default, ang hostname nito ay magiging raspberrypi.local. Sa iyong computer, buksan ang isang window ng terminal at i-type ang sumusunod:
Ang default na password ay raspberry
Dito ko ginamit ang isang hiwalay na monitor upang mag-interface sa Raspberry Pi.
Hakbang 5: Pagkolekta ng Dataset? ️
Ang unang hakbang sa proyektong ito ay ang pagkolekta ng data. Kinikilala ng System ang kilos ng kamay at kilalanin ang pagkilos at gawin itong ilipat nang naaayon.
Nag-i-install kami ng maraming mga aklatan sa Raspberry Pi gamit ang pag-install ng pip
utos
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-learn pip install scikit-image pip install h5py pip install Keras pip i-install ang tensorflow pip install Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squzenet 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 anim
Kung nahaharap ka sa anumang mga isyu sa OpenCVpackage, masidhing inirerekumenda kong i-install ang mga package na ito.
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
Na-install namin ang lahat ng kinakailangang mga dependency para sa proyektong ito. Ang hanay ng Data ay ginawa ng mga koleksyon at pag-aayos ng mga imahe sa ilalim ng naaangkop na label.
Dito nilikha namin ang mga itinakdang data ng mga imahe para sa label na rock, papel at gunting gamit ang sumusunod na snippet.
roi = frame [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Ang imahe ay nakunan para sa bawat label (bato, papel, gunting at Wala).
Hakbang 6: Pagdidisenyo ng isang NN at Pagsasanay sa Modelo ⚒️⚙️
Ang Core ng proyektong ito ay isang klasipikasyon ng imahe na inuri ang isa sa tatlong mga kategorya. Upang magawa ang Classifier na ito, ginagamit namin ang paunang sanay na CNN (Convolutional Network) na tinatawag na SqueezeNet.
Dito ginagamit namin ang Keras at TensorFlow upang makabuo ng modelo ng SqueezeNet na maaaring makilala ang kilos. Ang mga larawang nilikha namin sa nakaraang hakbang ay ginagamit upang sanayin ang modelo. Ang modelo ay sinanay gamit ang nabuo na Dataset para sa wala sa mga Panahon (Mga Pag-ikot) na nabanggit.
Ang modelo ay naka-configure sa mga hyperparameter tulad ng ipinakita sa ibaba.
modelo = Sequential ([SqueezeNet (input_shape = (227, 227, 3), isama_top = Mali), Pag-dropout (0.5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Pag-activate ('relu'), GlobalAveragePooling2D (), Pag-activate ('softmax')])
Habang ang modelo ay pagsasanay, maaari mong makita ang pagkawala at kawastuhan ng modelo para sa bawat Epoch at ang kawastuhan ay nagdaragdag sa ilang mga oras sa oras pagkatapos ng ilang Epoch.
Halos tumagal ito ng 2 oras upang makabuo ng modelo na may pinakamataas na kawastuhan pagkatapos ng 10 kapanahunan. Kung nahaharap ka sa anumang mga error sa paglalaan ng memorya, gawin ang mga sumusunod na hakbang (Salamat kay Adrian)
Upang madagdagan ang iyong puwang ng swap, buksan ang / etc / dphys-swapfile at pagkatapos ay i-edit ang variable na CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Pansinin na pinapataas ko ang swap mula sa 100MB hanggang 1024MB. Mula doon, i-restart ang swap service:
Huminto sa $ sudo /etc/init.d/dphys-swapfile
Magsimula ang $ sudo /etc/init.d/dphys-swapfile
Tandaan:
Ang pagdaragdag ng laki ng pagpapalit ay isang mahusay na paraan upang masunog ang iyong memory card, kaya tiyaking ibalik ang pagbabagong ito at muling simulan ang serbisyo ng swap kapag tapos ka na. Maaari kang magbasa nang higit pa tungkol sa malalaking sukat na sumisira sa mga memory card dito.
Hakbang 7: Pagsubok sa Modelo ✅
Kapag nabuo ang modelo, gumagawa ito ng output file na "rock-paper-gunting-model.h5". Ginamit ang file na ito bilang mapagkukunan upang masubukan kung makikilala ng system ang iba't ibang mga kilos ng kamay at makakaiba ang mga pagkilos.
Ang modelo ay na-load sa python script tulad ng sumusunod
modelo = load_model ("rock-paper-gunting-model.h5")
Binabasa ng camera ang imahe ng pagsubok at binago ang kinakailangang modelo ng kulay, at pagkatapos ay baguhin ang laki ng imahe sa 227 x 227 pixel (Parehong laki na ginamit para sa pagbuo ng modelo). Ang mga imaheng ginamit para sa pagsasanay ng modelo ay maaaring magamit upang subukan ang nabuong modelo.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Kapag na-load ang modelo at ang imahe ay nakuha ng camera, hinuhulaan ng modelo ang nakunan ng imahe gamit ang modelong SqueezeNet na na-load, at hinuhulaan ang paggalaw ng gumagamit.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Hula: {}". format (ilipat_name))
Patakbuhin ang test.py script upang subukan ang modelo na may iba't ibang mga imahe ng pagsubok.
pagsubok sa python3.py
Ngayon ang modelo ay handa na upang makita at maunawaan ang mga kilos ng kamay.
Hakbang 8: Laro sa Rock-Paper-Gunting
Ang Laro ay gumagamit ng isang random na pagbuo ng bilang ng henerasyon upang magpasya ang paglipat ng computer. Sinusunod nito ang mga nasabing tuntunin upang matukoy ang nagwagi. Ang laro ay dinisenyo gamit ang dalawang mga mode: Normal Mode at Intelligent mode, kung saan ang matalinong mode ay nag-counterattack ng paggalaw ng gumagamit, ibig sabihin, ang Computer ay nanalo sa lahat ng mga paggalaw laban sa gumagamit.
cap = cv2. VideoCapture (0) # Upang makuha ang imahe mula sa Camera
Ngayon gawin natin ang laro sa Normal mode kung saan kinukunan ng system / Raspberry Pi ang larawan ng kamay at pinag-aaralan at kinikilala ang kilos ng kamay. Pagkatapos ay gumagamit ng isang random na generator ng numero, nilalaro ang paglipat ng computer. Ang nagwagi ay pinili batay sa mga patakaran at pagkatapos ay ipapakita sa screen. Simulan ang laro gamit ang sumusunod na utos.
play ng python3.py
Hakbang 9: Pagsasama ng Servo Motor?
Sa wakas, idagdag ang servo motor sa proyektong ito. Ang Servo motor ay ang GPIO pin 17 ng Raspberry Pi, na mayroong pagpapaandar ng PWM upang makontrol ang anggulo ng pag-ikot.
Ang Servo Motor na ginamit sa proyektong ito ay SG-90. Maaari itong gumawa ng pag-ikot ng pakaliwa at laban sa pakaliwa hanggang sa 180 °
Ang mga Koneksyon ay ibinibigay tulad ng sumusunod.
Servo Motor - Raspberry Pi
Vcc - + 5V
GND - GND
Signal - GPIO17
Ang mga aklatan tulad ng RPi. GPIO at oras ay ginagamit sa proyektong ito.
i-import ang RPi. GPIO bilang GPIO
oras ng pag-import
Pagkatapos ay naka-configure ang pin ng GPIO sa PWM gamit ang mga sumusunod na linya
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
Ang GPIO Pin 17 ay na-configure upang magamit bilang isang PWM sa dalas ng 50Hz. Ang Angle ng servo motor ay nakakamit sa pamamagitan ng pagtatakda ng duty cycle (Ton & Toff) ng PWM
tungkulin = anggulo / 18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) oras. Tulog (1) GPIO.output (servoPIN, Mali) p. ChangeDutyCycle (0)
Lilikha ito ng nais na anggulo ng hakbang para sa bawat pulso, na magbibigay ng nais na anggulo ng pag-ikot.
Ngayon ay kinuha ko ang tsart at hiniwa ito sa tatlong mga seksyon, para sa bato, papel, at gunting. Ang motor na Servo ay naayos sa gitna ng tsart. Ang pointer / flap ay konektado sa baras ng servo motor. Itinuturo ng baras na ito ang paglipat ng computer ayon sa lohikal na nakalkula sa script.
Hakbang 10: Paggawa ng Proyekto?
At ngayon, oras na ng pag-play. Tingnan natin ang pagtatrabaho ng proyekto.
Kung nahaharap ka sa anumang mga isyu sa pagbuo ng proyektong ito, huwag mag-atubiling magtanong sa akin. Mangyaring magmungkahi ng mga bagong proyekto na nais mong susunod ko.
Magbigay ng isang thumbs up kung nakatulong talaga ito sa iyo at sundin ang aking channel para sa mga kagiliw-giliw na proyekto.:)
Ibahagi ang video na ito kung nais mo.
Maligaya na nag-subscribe ka:
Salamat sa pagbabasa!
Hakbang 11: Code - Project Repo
Ang code ay idinagdag sa GitHub Repository na maaaring matagpuan sa seksyon ng code.
Rahul24-06 / Rock-Paper-Gunting -
Inirerekumendang:
Laro ng Stone Paper Scissor: 6 na Hakbang
Laro ng Stone Paper Scissor: Ito ang aking unang itinuturo. Nais kong magsulat ng isa sa mahabang panahon ngunit wala akong anumang proyekto sa kamay na maaari kong mai-publish dito. Kaya't nang magkaroon ako ng ideya ng proyektong ito, napagpasyahan kong ito ang isa. Kaya't nagba-browse ako sa site ng tensorflow.js, ito
Ang Handhand Arduino Paper Rock Gunting na Laro Gamit ang 20x4 LCD Display Sa I2C: 7 Mga Hakbang
Ang Handhand Arduino Paper Rock Scissors Game Gamit ang 20x4 LCD Display Sa I2C: Kamusta sa lahat o marahil dapat kong sabihin " Hello World! &Quot; Masayang kasiyahan na ibahagi ang isang proyekto sa iyo na naging entry ko sa maraming bagay Arduino. Ito ay isang handheld Arduino Paper Rock Scissors na laro gamit ang isang I2C 20x4 LCD display. Ako
Scissor Drive Servo Hat: 4 Hakbang (na may Mga Larawan)
Scissor Drive Servo Hat: Ang simpleng 3D na pag-print at servo motor na proyekto na ito ay isang magandang pakiramdam para kay Simone Giertz, isang kahanga-hangang tagagawa na nagkaroon lamang ng pagtanggal sa tumor sa utak. Ang aparato ng gunting ay hinihimok ng isang micro servo motor at Trinket microcontroller na nagpapatakbo ng isang maliit na Ard
Gunting ng Rock Paper: 10 Hakbang
Rock Paper Gunting: Layunin: Matapos makumpleto ito, malalaman mo kung paano gumawa ng isang simpleng laro ng Rock, Mga Gunting ng papel mula sa simula gamit ang Code.org. Mga Kagamitan / Kinakailangan na kinakailangan: Pangunahing pag-unawa sa Javascript syntax, isang computer, isang Code.org account
Kinokontrol ng Raspberry Pi Scissor Lift: 17 Hakbang (na may Mga Larawan)
Kinokontrol na Kinokontrol ng Scutor ng Raspberry Pi: Bakit angat ng isang gunting? Bakit hindi! Ito ay cool at isang nakakatuwang proyekto na maitatayo. Ang totoong dahilan para sa akin ay para sa pagtaas ng mga camera sa aking Mahusay na Mojave Rover Project. Gusto kong tumaas ang mga camera sa itaas ng rover at kumuha ng mga imahe ng paligid. Ngunit kailangan ko