Indholdsfortegnelse:
- Trin 1: Ting, der bruges i dette projekt
- Trin 2: Idé?
- Trin 3: Kom godt i gang?
- Trin 4: Brænd Raspbian til SD -kortet?
- Trin 5: Indsamling af datasættet? ️
- Trin 6: Design af et NN og oplæring af modellen ⚒️⚙️
- Trin 7: Test af modellen ✅
- Trin 8: Rock-Paper-Scissors Game
- Trin 9: Servomotorintegration?
- Trin 10: Arbejde med projektet?
- Trin 11: Kode - Project Repo
Video: Rock Paper Scissor AI: 11 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:27
Har du nogensinde kedet dig alene? Lad os spille rock, papir og saks mod et interaktivt system med intelligens.
Trin 1: Ting, der bruges i dette projekt
Hardware komponenter
- Raspberry Pi 3 Model B+ × 1
- Raspberry Pi kameramodul V2 × 1
- SG90 Micro-servomotor × 1
Software apps
- Raspberry Pi Raspbian
- OpenCV
- TensorFlow
Trin 2: Idé?
Efter at have arbejdet med forskellige projekter på forskellige domæner, planlagde jeg at lave et sjovt projekt, og jeg besluttede at lave et klippepapir-saksespil:)
I dette projekt vil vi lave et interaktivt spil og spille mod computeren, der drives af AI til at træffe beslutninger. AI bruger kameraet, der er tilsluttet Raspberry Pi, til at genkende, hvad der bevæger brugeren med hånden, klassificere dem i den bedste kategori (etiket) sten, papir eller saks. Når computeren bevæger sig, peger trinmotoren, der er forbundet til Raspberry Pi, i retning af den baseret på dens bevægelse.
Regler, der skal overvejes for dette spil:
- Rock stumper saksen
- Papir dækker klippen
- Sakse klipper papir
Vinderen afgøres ud fra ovenstående tre betingelser. Lad os se en hurtig demo af projektet her.
Trin 3: Kom godt i gang?
Hindbær Pi
Jeg har brugt en Raspberry Pi 3 Model B+, som har store forbedringer og er mere kraftfuld end den tidligere Raspberry Pi 3 Model B.
Raspberry Pi 3 B+ er integreret med 1,4 GHz 64-bit quad-core processor, dual-band trådløst LAN, Bluetooth 4.2/BLE, hurtigere Ethernet og Power-over-Ethernet support (med separat PoE HAT).
Specifikationer: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz, 1GB LPDDR2 SDRAM, 2.4GHz og 5GHz IEEE 802.11.b/g/n/ac trådløst LAN, Bluetooth 4.2, BLE, Gigabit Ethernet over USB 2.0 (maksimal gennemstrømning på 300 Mbps), Den udvidede 40-pins GPIO-header, HDMI4 USB 2.0-porte i fuld størrelse, CSI-kameraport til tilslutning af et Raspberry Pi-kamera, DSI-skærmport til tilslutning af en Raspberry Pi touchscreen display 4-polet stereo output og komposit videoport, Micro SD-port til indlæsning af dit operativsystem og lagring af data5V/2,5A DC-strømindgang, Power-over-Ethernet (PoE) support (kræver separat PoE HAT).
Servomotor
Vi bruger en SG-90 servomotor, en motor med højt drejningsmoment, der kan klare belastningen op til 2,5 kg (1 cm).
USB kamera
Et USB -kamera til at gøre spillet interaktivt med billedbehandlingen
Nogle Jumper -kabler bruges til at tilslutte trinmotoren og Raspberry Pi.
Trin 4: Brænd Raspbian til SD -kortet?
Raspbian er den valgte Linux -distribution, der kører på Raspberry Pi. I denne vejledning bruger vi Lite -versionen, men desktopversionen (som leveres med et grafisk miljø) kan også bruges.
- Download Etcher og installer det.
- Tilslut en SD -kortlæser med SD -kortet indeni.
- Åbn Etcher, og vælg fra din harddisk den Raspberry Pi.img- eller.zip -fil, du vil skrive til SD -kortet.
- Vælg det SD -kort, du vil skrive dit billede til.
- Gennemgå dine valg, og klik på 'Flash!' for at begynde at skrive data til SD -kortet.
Tilslut enheden til dit netværk
- Aktiver SSH -adgang ved at tilføje tom fil ssh, igen placeret ved roden af bootvolumen på dit SD -kort.
- Indsæt SD -kortet i Raspberry Pi. Det vil starte om cirka 20 sekunder. Du skal nu have SSH -adgang til din Raspberry Pi. Som standard vil dets værtsnavn være raspberrypi.local. Åbn et terminalvindue på din computer, og skriv følgende:
Standardadgangskoden er hindbær
Her har jeg brugt en separat skærm til at interface med Raspberry Pi.
Trin 5: Indsamling af datasættet? ️
Det første trin i dette projekt er dataindsamling. Systemet skal identificere håndbevægelsen og genkende handlingen og få den til at bevæge sig i overensstemmelse hermed.
Vi installerer flere biblioteker til Raspberry Pi ved hjælp af pip -installation
kommando.
sudo apt-get update && sudo apt-get upgradesudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip installer opencv pip installer numpy pip install scikit-lær pip install scikit-image pip installer h5py pip install Keras pip installer tensorflow pip installer 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 installer seks
Hvis du støder på problemer med OpenCVpackage, anbefaler jeg stærkt at installere disse pakker.
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
Vi har installeret alle de nødvendige afhængigheder til dette projekt. Datasættet foretages ved at indsamle og arrangere billederne under den relevante etiket.
Her opretter vi datasættets billeder til etiketten sten, papir og saks ved hjælp af følgende uddrag.
roi = ramme [100: 500, 100: 500]
save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)
Billedet er taget for hver etiket (sten, papir, saks og Ingen).
Trin 6: Design af et NN og oplæring af modellen ⚒️⚙️
Kernen i dette projekt er en billedklassificering, der klassificerer en af tre kategorier. For at lave denne klassifikator bruger vi det foruddannede CNN (Convolutional Network) kaldet SqueezeNet.
Her bruger vi Keras og TensorFlow til at generere SqueezeNet -modellen, som kan identificere gestus. De billeder, som vi genererede i det foregående trin, bruges til at træne modellen. Modellen er uddannet ved hjælp af datasættet genereret for ingen af de nævnte epoker (cykler).
Modellen er konfigureret med hyperparametrene som vist nedenfor.
model = Sekventiel ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Frafald (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivering ('relu'), GlobalAveragePooling2D (), Aktivering ('softmax')])
Mens modellen træner, kan du finde tabet og nøjagtigheden af modellen for hver epoke, og nøjagtigheden stiger på et tidspunkt efter et par epoker.
Det tog nogenlunde 2 timer at generere modellen med den højeste nøjagtighed efter 10 epoker. Hvis du står over for fejl ved hukommelsestildeling, skal du gøre følgende trin (tak til Adrian)
For at øge dit bytteplads skal du åbne /etc /dphys-swapfile og derefter redigere variablen CONF_SWAPSIZE:
# CONF_SWAPSIZE = 100
CONF_SWAPSIZE = 1024
Bemærk, at jeg øger swap'en fra 100MB til 1024MB. Derfra genstart swap -tjenesten:
$ sudo /etc/init.d/dphys-swapfile stop
$ sudo /etc/init.d/dphys-swapfile start
Bemærk:
Forøgelse af swap -størrelse er en fantastisk måde at brænde dit hukommelseskort på, så sørg for at tilbageføre denne ændring og genstarte swap -tjenesten, når du er færdig. Du kan læse mere om store størrelser, der ødelægger hukommelseskort her.
Trin 7: Test af modellen ✅
Når modellen er genereret, producerer den outputfilen "rock-paper-scissors-model.h5". Denne fil bruges som kilde til at teste, om systemet kan identificere forskellige håndbevægelser og kunne differentiere handlingerne.
Modellen indlæses i python -scriptet som følger
model = load_model ("rock-paper-saks-model.h5")
Kameraet læser testbilledet og transformerer den påkrævede farvemodel og ændrer derefter størrelsen på billedet til 227 x 227 pixel (Samme størrelse bruges til modelgenerering). De billeder, der blev brugt til at oplære modellen, kan bruges til at teste den genererede model.
img = cv2.imread (filepath)
img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))
Når modellen er indlæst, og billedet er erhvervet af kameraet, forudsiger modellen det taget billede ved hjælp af SqueezeNet -modellen, der er indlæst, og foretager forudsigelsen for brugerens bevægelser.
pred = model.predict (np.array ())
move_code = np.argmax (forud [0]) move_name = mapper (move_code) print ("Forudsagt: {}". format (move_name))
Kør test.py -scriptet for at teste modellen med forskellige testbilleder.
python3 test.py
Nu er modellen klar til at registrere og forstå håndbevægelserne.
Trin 8: Rock-Paper-Scissors Game
Spillet bruger en tilfældig talgenereringsfunktion til at bestemme computerens flytning. Det følger ovennævnte regler for at bestemme vinderen. Spillet er designet med to tilstande: Normal tilstand og Intelligent tilstand, hvor intelligent tilstand modangriber brugerens bevægelse, dvs. Computer vinder alle træk mod brugeren.
cap = cv2. VideoCapture (0) # For at tage billede fra kameraet
Lad os nu lave spillet i normal tilstand, hvor systemet/ Raspberry Pi tager billedet af hånden og analyserer og identificerer håndbevægelsen. Derefter afspilles computerens bevægelse ved hjælp af en tilfældig talgenerator. Vinderen vælges ud fra reglerne og vises derefter på skærmen. Start spillet ved hjælp af følgende kommando.
python3 play.py
Trin 9: Servomotorintegration?
Tilføj endelig servomotoren til dette projekt. Servomotor er GPIO pin 17 på Raspberry Pi, som har PWM -funktionen til at styre rotationsvinklen.
Servomotoren, der bruges i dette projekt, er SG-90. Det kan dreje med uret og mod uret op til 180 °
Forbindelserne er givet som følger.
Servomotor - Raspberry Pi
Vcc - +5V
GND - GND
Signal - GPIO17
Bibliotekerne såsom RPi. GPIO og tid bruges i dette projekt.
importer RPi. GPIO som GPIO
importtid
GPIO -stiften konfigureres derefter til PWM ved hjælp af følgende linjer
servoPIN = 17
GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)
GPIO Pin 17 er konfigureret til brug som PWM ved frekvensen 50Hz. Servomotorens vinkel opnås ved at indstille driftscyklussen (Ton & Toff) for PWM
pligt = vinkel/18 + 2
GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)
Dette vil producere den ønskede trinvinkel for hver puls, hvilket ville give den ønskede rotationsvinkel.
Nu har jeg taget diagrammet og skåret det i tre sektioner, til sten, papir og saks. Servomotoren er fastgjort til midten af diagrammet. Markøren/flappen er forbundet til servomotorens aksel. Dette skaft peger på computerens bevægelse i henhold til logikken beregnet i scriptet.
Trin 10: Arbejde med projektet?
Og nu er det spilletid. Lad os se, hvordan projektet fungerer.
Spørg mig, hvis du har haft problemer med at bygge dette projekt. Foreslå venligst nye projekter, som du vil have mig til at lave næste gang.
Giv tommelfinger op, hvis det virkelig hjalp dig, og følg min kanal for interessante projekter.:)
Del denne video, hvis du vil.
Glad for at have dig tilmeldt:
Tak fordi du læste!
Trin 11: Kode - Project Repo
Koden tilføjes til GitHub -depotet, som findes i kodesektionen.
Rahul24-06/Rock-Paper-Sakse-https://github.com/Rahul24-06/Rock-Paper-Scissors
Anbefalede:
Lav dit eget Rock Band Ekit Adapter (uden Legacy Adapter), ikke -destruktivt !: 10 trin
Lav din egen Rock Band Ekit Adapter (uden Legacy Adapter), ikke -destruktivt !: Efter at have hørt en populær podcast -vært nævne sin bekymring for, at hans kabelforbundne USB -adapter dør, søgte jeg efter en DIY -løsning til at tilslutte en bedre/tilpasset eKit til RB . Tak til hr. DONINATOR på Youtube, der lavede en video med detaljer om hans lignende side
Stone Paper Scissor Game: 6 trin
Stone Paper Scissor Game: Dette er min første instruerbare. Jeg ville skrive et i lang tid, men jeg havde ikke noget projekt ved hånden, som jeg kunne offentliggøre her. Så da jeg kom på ideen om dette projekt, besluttede jeg, at dette var det ene. Så jeg kiggede på tensorflow.js 'websted, det jeg
Håndholdt Arduino Paper Rock -saksespil ved hjælp af 20x4 LCD -display med I2C: 7 trin
Håndholdt Arduino Paper Rock -saksespil ved hjælp af 20x4 LCD -skærm med I2C: Hej alle sammen eller måske skal jeg sige "Hej verden!" Det ville være en stor fornøjelse at dele et projekt med dig, der har været min indgang til mange ting Arduino. Dette er et håndholdt Arduino Paper Rock -saksespil, der bruger et I2C 20x4 LCD -display. JEG
Scissor Drive Servo Hat: 4 trin (med billeder)
Scissor Drive Servo Hat: Dette enkle 3D-print og servomotorprojekt er et godt humør for Simone Giertz, en fantastisk maker, der lige har foretaget hjernetumoroperation. Saksenheden drives af en mikroservomotor og Trinket -mikrokontroller, der kører lidt Ard
Vend X-box Rock Band trommer til en Midi Stand Alone elektroniske trommer: 4 trin (med billeder)
Vend X-box Rock Band-trommer til en Midi Stand Alone elektroniske trommer .: Jeg var heldig at få et brugt x-box-trommesæt, det er i en lidt grov form og ingen padle, men intet der ikke kan rettes. gør det til et selvstændigt elektrisk trommesæt. Læser den analoge værdi fra piezosensoren og gør den til MIDI -kommando