INHOUDSOPGAWE:
- Stap 1: Dinge wat in hierdie projek gebruik word
- Stap 2: Idee?
- Stap 3: Aan die gang?
- Stap 4: Brand Raspbian op die SD -kaart?
- Stap 5: Versamel die datastel? ️
- Stap 6: Ontwerp 'n NN en lei die model op ⚒️⚙️
- Stap 7: Toets die model ✅
- Stap 8: Rock-Paper-Scissors Game
- Stap 9: Servomotorintegrasie?
- Stap 10: Werk aan die projek?
- Stap 11: Kode - Project Repo
Video: Rock Paper Scissor AI: 11 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:25
Het u al ooit alleen verveeld gevoel? Kom ons speel klip, papier en 'n skêr teen 'n interaktiewe stelsel met intelligensie.
Stap 1: Dinge wat in hierdie projek gebruik word
Hardeware komponente
- Framboos Pi 3 Model B+ × 1
- Framboos Pi -kameramodule V2 × 1
- SG90 Mikro-servomotor × 1
Sagteware programme
- Framboos Pi Raspbian
- OpenCV
- TensorFlow
Stap 2: Idee?
Nadat ek aan verskillende projekte op verskillende terreine gewerk het, was ek van plan om 'n prettige projek te maak, en ek het besluit om 'n rotspapier-skêrspel te maak:)
In hierdie projek maak ons 'n interaktiewe speletjie en speel teen die rekenaar wat deur AI aangedryf word om besluite te neem. AI gebruik die kamera wat gekoppel is aan die Raspberry Pi om te herken watter bewegings die gebruiker met die hand gemaak het, om dit in die beste kategorie (etiket) rots, papier of skêr te klassifiseer. Sodra die rekenaar beweeg, wys die stapmotor wat aan die Raspberry Pi gekoppel is, in die rigting wat gebaseer is op die beweging.
Reëls wat in ag geneem moet word vir hierdie wedstryd:
- Rots maak die skêr stomp
- Papier bedek die rots
- Skêr sny papier
Wenner word bepaal op grond van bogenoemde drie voorwaardes. Kom ons kyk hier na 'n vinnige demonstrasie van die projek.
Stap 3: Aan die gang?
Framboos Pi
Ek het 'n Raspberry Pi 3 Model B+ gebruik wat uitstekende verbeterings het en meer kragtig is as die vorige Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ is geïntegreer met die 1,4 GHz 64-bis quad-core verwerker, draadlose LAN met twee bande, Bluetooth 4.2/BLE, vinniger Ethernet en Power-over-Ethernet ondersteuning (met aparte PoE HAT).
Spesifikasies: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bis SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz en 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE, Gigabit Ethernet via USB 2.0 (maksimum deurset van 300 Mbps), die uitgebreide 40-pins GPIO-kop, volgrootte HDMI4 USB 2.0-poorte, CSI-kamerapoort vir die aansluiting van 'n Raspberry Pi-kamera, DSI-skermpoort vir die aansluiting van 'n Raspberry Pi-aanraakskermvertoning 4-polige stereo-uitset en saamgestelde videopoort, Micro SD-poort vir die laai van u bedryfstelsel en die stoor van data 5V/2.5A DC-ingang, Power-over-Ethernet (PoE) ondersteuning (vereis aparte PoE HAT).
Servomotor
Ons gebruik 'n SG-90 servomotor, 'n motor met 'n hoë wringkrag wat die las tot 2,5 kg (1 cm) kan hanteer.
USB kamera
'N USB -kamera om die spel interaktief te maak met die beeldverwerking
Sommige springkabels word gebruik om die stapmotor en Raspberry Pi te bedrieg.
Stap 4: Brand Raspbian op die SD -kaart?
Raspbian is die Linux -verspreiding van keuse wat op die Raspberry Pi gebruik word. In hierdie gids gebruik ons die Lite -weergawe, maar die lessenaarweergawe (wat 'n grafiese omgewing bied) kan ook gebruik word.
- Laai Etcher af en installeer dit.
- Koppel 'n SD -kaartleser met die SD -kaart binne.
- Maak Etcher oop en kies uit u hardeskyf die Raspberry Pi.img- of.zip -lêer wat u op die SD -kaart wil skryf.
- Kies die SD -kaart waarop u die prent wil skryf.
- Gaan u keuses na en klik op 'Flits!' om data na die SD -kaart te begin skryf.
Koppel die toestel aan u netwerk
- Aktiveer SSH -toegang deur leë lêer ssh by te voeg, weer geplaas by die wortel van die opstartvolume op u SD -kaart.
- Plaas die SD -kaart in die Raspberry Pi. Dit sal binne ongeveer 20 sekondes begin. U behoort nou SSH -toegang tot u Raspberry Pi te hê. Die gasheernaam is standaard raspberrypi.local. Open 'n terminale venster op u rekenaar en tik die volgende:
Die standaard wagwoord is framboos
Hier het ek 'n aparte monitor gebruik om met die Raspberry Pi te koppel.
Stap 5: Versamel die datastel? ️
Die eerste stap in hierdie projek is data -insameling. Die stelsel moet die handgebaar identifiseer en die aksie herken en dit dienooreenkomstig laat beweeg.
Ons installeer verskeie biblioteke op die Raspberry Pi met behulp van pip install
bevel.
sudo apt-get update && sudo apt-get upgrades sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip installeer opencv pip install numpy pip install scikit-leer pip installeer scikit-image pip installeer h5py pip install Keras pip installeer tensorflow pip installeer 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 installeer protobuf pip installeer PyYAML pip installeer ses
As u probleme ondervind met die OpenCVpackage, beveel ek u sterk aan om hierdie pakkette te installeer.
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
Ons het al die vereiste afhanklikhede vir hierdie projek geïnstalleer. Die datastel word gemaak deur versamelings en rangskikkings van die beelde onder die toepaslike etiket.
Hier skep ons die datastelbeelde vir die etiket rock, papier en 'n skêr met behulp van die volgende brokkie.
roi = raam [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (telling + 1)) cv2.imwrite (save_path, roi)
Die prentjie word vir elke etiket (rots, papier, skêr en Geen) geneem.
Stap 6: Ontwerp 'n NN en lei die model op ⚒️⚙️
Die kern van hierdie projek is 'n beeldklassifiseerder wat een van drie kategorieë klassifiseer. Om hierdie klassifiseerder te maak, gebruik ons die vooraf opgeleide CNN (Convolutional Network) genaamd SqueezeNet.
Hier gebruik ons Keras en TensorFlow om die SqueezeNet -model te genereer wat die gebaar kan identifiseer. Die beelde wat ons in die vorige stap gegenereer het, word gebruik om die model op te lei. Die model word opgelei met behulp van die datastel wat vir geen van die genoemde tydperke (siklusse) gegenereer is nie.
Die model is opgestel met die hiperparameters soos hieronder getoon.
model = opeenvolgend ([SqueezeNet (input_shape = (227, 227, 3), include_top = Onwaar), Uitval (0,5), Konvolusie2D (NUM_CLASSES, (1, 1), padding = 'geldig'), Aktivering ('relu'), GlobalAveragePooling2D (), Aktivering ('softmax')])
Terwyl die model oefen, vind u die verlies en akkuraatheid van die model vir elke tydperk en neem die akkuraatheid op 'n sekere tydstip na 'n paar tydperke toe.
Dit het ongeveer 2 uur geneem om die model met die hoogste akkuraatheid na 10 tydperke te genereer. As u geheue -toewysingsfoute ondervind, doen die volgende stappe (dankie aan Adrian)
Om u ruilruimte te vergroot, maak /etc /dphys-swapfile oop en wysig dan die veranderlike CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Let op dat ek die ruil van 100MB na 1024MB verhoog. Begin dan weer die ruildiens:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile begin
Let wel:
Om die ruilgrootte te vergroot, is 'n uitstekende manier om u geheue kaart uit te brand, dus herhaal hierdie verandering en begin die ruildiens as u klaar is. U kan hier meer lees oor groot groottes wat geheue kaarte beskadig.
Stap 7: Toets die model ✅
Sodra die model gegenereer is, produseer dit die uitvoerlêer "rock-paper-scissors-model.h5". Hierdie lêer word as bron gebruik om te toets of die stelsel verskillende handgebare kan identifiseer en die aksies kan onderskei.
Die model word soos volg in die python -skrif gelaai
model = load_model ("rock-paper-scissors-model.h5")
Die kamera lees die toetsbeeld en verander die vereiste kleurmodel, en verander dan die grootte van die prent tot 227 x 227 pixel (dieselfde grootte as modelontwikkeling). Die beelde wat vir die opleiding van die model gebruik is, kan gebruik word om die gegenereerde model te toets.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Sodra die model gelaai is en die beeld deur die kamera verkry is, voorspel die model die vasgelegde beeld met behulp van die SqueezeNet -model wat gelaai is, en maak die voorspelling vir die gebruiker se bewegings.
pred = model.predict (np.array ())
move_code = np.argmax (pred [0]) move_name = map (print_code) print ("Voorspel: {}". formaat (move_name))
Begin die test.py -script om die model met verskillende toetsbeelde te toets.
python3 test.py
Nou is die model gereed om die handgebare op te spoor en te verstaan.
Stap 8: Rock-Paper-Scissors Game
Die spel gebruik 'n ewekansige getalgenerasie -funksie om die rekenaar se skuif te bepaal. Dit volg die bogenoemde reëls om die wenner te bepaal. Die spel is ontwerp met twee modusse: die normale modus en die intelligente modus, waar die intelligente modus die beweging van die gebruiker teenwerk, dit wil sê die rekenaar wen al die bewegings teen die gebruiker.
cap = cv2. VideoCapture (0) # Om beeld van die kamera af te neem
Laat ons nou die spel in die normale modus maak, waar die stelsel/ Framboos Pi die foto van die hand neem en die handgebaar ontleed en identifiseer. Dan word die rekenaarbeweging met 'n ewekansige getalgenerator gespeel. Die wenner word gekies op grond van die reëls en dan op die skerm vertoon. Begin die spel met die volgende opdrag.
python3 play.py
Stap 9: Servomotorintegrasie?
Voeg uiteindelik die servomotor by hierdie projek. Servomotor is GPIO -pen 17 van die Raspberry Pi, wat die PWM -funksie het om die draaihoek te beheer.
Die servomotor wat in hierdie projek gebruik word, is SG-90. Dit kan tot 180 ° met die kloksgewys en teen die kloksgewys draai
Die verbindings word soos volg gegee.
Servomotor - Framboos Pi
Vcc - +5V
GND - GND
Sein - GPIO17
Die biblioteke soos RPi. GPIO en tyd word in hierdie projek gebruik.
voer RPi. GPIO in as GPIO
invoer tyd
Die GPIO -pen word dan opgestel na PWM met behulp van die volgende reëls
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 is opgestel om te gebruik as PWM met 'n frekwensie van 50Hz. Die hoek van die servomotor word bereik deur die werksiklus (Ton & Toff) van die PWM in te stel
plig = hoek/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Dit gee die gewenste staphoek vir elke pols, wat die gewenste draaihoek gee.
Nou het ek die kaart geneem en in drie dele gesny, vir rots, papier en skêr. Die servomotor is in die middel van die kaart vasgemaak. Die wyser/klep is verbind met die as van die servomotor. Hierdie skag dui op die beweging van die rekenaar volgens die logika wat in die skrif bereken is.
Stap 10: Werk aan die projek?
En nou is dit speeltyd. Kom ons kyk hoe die projek werk.
Vra my gerus as u probleme ondervind met die bou van hierdie projek. Stel asseblief nuwe projekte voor wat u wil hê ek moet volgende doen.
Duim vas as dit jou werklik gehelp het, en volg my kanaal vir interessante projekte.:)
Deel hierdie video as u wil.
Gelukkig dat u ingeteken is:
Dankie vir die lees!
Stap 11: Kode - Project Repo
Die kode word by die GitHub -bewaarplek gevoeg, wat in die kode -afdeling gevind kan word.
Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors
Aanbeveel:
Maak u eie Rock Band Ekit Adapter (sonder Legacy Adapter), nie vernietigend nie !: 10 stappe
Maak u eie Rock Band Ekit Adapter (sonder Legacy Adapter), nie vernietigend nie !: Nadat ek 'n gewilde podcast -gasheer gehoor het dat hy besorg was oor sy USB -legacy -adapter wat sterf, het ek na 'n DIY -oplossing gesoek om 'n beter/aangepaste eKit aan RB aan te sluit. . Dankie aan die heer DONINATOR op Youtube wat 'n video gemaak het met sy soortgelyke
Stone Paper Scissor Game: 6 stappe
Stone Paper Scissor Game: Dit is my eerste instruksie. Ek wou lankal een skryf, maar ek het geen projek byderhand wat ek hier kon publiseer nie. Toe ek 'n idee kry van hierdie projek, het ek besluit dat dit die een is
Handheld Arduino Paper Rock -skêrspel met 20x4 LCD -skerm met I2C: 7 stappe
Handheld Arduino Paper Rock -skêrspel met 'n 20x4 LCD -skerm met I2C: Hallo almal, of miskien moet ek 'Hallo wêreld' sê! ' Dit is 'n handheld Arduino Paper Rock -skêrspel met 'n I2C 20x4 LCD -skerm. Ek
Scissor Drive Servo Hat: 4 stappe (met foto's)
Scissor Drive Servo Hat: Hierdie eenvoudige 3D-drukwerk en servomotorprojek is 'n goeie gevoel vir Simone Giertz, 'n wonderlike vervaardiger wat pas 'n operasie vir die verwydering van 'n breingewas ondergaan het. Die skaartoestel word aangedryf deur 'n mikroservomotor en die Trinket -mikrokontroleerder wat 'n bietjie Ard loop
Rock Paper Sciss: 10 stappe
Rock Paper Scissors: Doel: Nadat u dit voltooi het, leer u hoe u 'n eenvoudige Rock-, Paper Sciss -speletjie van nuuts af kan maak met Code.org. Materiaal / vereistes benodig: Basiese begrip van Javascript -sintaksis, 'n rekenaar, 'n Code.org -rekening