Innholdsfortegnelse:

Rock Paper Scissor AI: 11 trinn
Rock Paper Scissor AI: 11 trinn

Video: Rock Paper Scissor AI: 11 trinn

Video: Rock Paper Scissor AI: 11 trinn
Video: ANIME ROCK, PAPER, SCISSORS 2024, November
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Har du noen gang kjørt deg alene? La oss spille rock, papir og saks mot et interaktivt system drevet med intelligens.

Trinn 1: Ting som brukes i dette prosjektet

Maskinvarekomponenter

  • Raspberry Pi 3 Model B+ × 1
  • Raspberry Pi -kameramodul V2 × 1
  • SG90 Mikroservomotor × 1

Programvare -apper

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Trinn 2: Idé?

Image
Image

Etter å ha jobbet med forskjellige prosjekter på forskjellige domener, planla jeg å lage et morsomt prosjekt, og jeg bestemte meg for å lage et stein-papir-saks-spill:)

I dette prosjektet vil vi lage et interaktivt spill og spille mot datamaskinen som er drevet av AI for å ta avgjørelser. AI bruker kameraet som er koblet til Raspberry Pi for å gjenkjenne hva som beveger brukeren med hånden, klassifisere dem i den beste kategorien (etikett) stein, papir eller saks. Når datamaskinen beveger seg, peker trinnmotoren som er koblet til Raspberry Pi mot retningen basert på bevegelsen.

Regler som må vurderes for dette spillet:

  • Rocken stusser saksen
  • Papir dekker berget
  • Saks kutter papir

Vinneren avgjøres basert på de tre betingelsene ovenfor. La oss se en rask demonstrasjon av prosjektet her.

Trinn 3: Komme i gang?

Starter ?
Starter ?
Starter ?
Starter ?

Bringebær Pi

Jeg har brukt en Raspberry Pi 3 Model B+ som har flotte forbedringer og er kraftigere enn den tidligere Raspberry Pi 3 Model B.

Raspberry Pi 3 B+ er integrert med 1,4 GHz 64-biters firekjerners prosessor, trådløst LAN med to bånd, Bluetooth 4.2/BLE, raskere Ethernet og Power-over-Ethernet-støtte (med separat PoE HAT).

Spesifikasjoner: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-biters SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz og 5 GHz IEEE 802.11.b/g/n/ac trådløst LAN, Bluetooth 4.2, BLE, Gigabit Ethernet over USB 2.0 (maksimal gjennomstrømning på 300 Mbps), Den utvidede 40-pinners GPIO-overskriften, HDMI4 USB 2.0-porter i full størrelse, CSI-kameraport for tilkobling av et Raspberry Pi-kamera, DSI-skjermport for tilkobling av en Raspberry Pi berøringsskjerm 4-polet stereoutgang og kompositt videoport, Micro SD-port for lasting av operativsystemet og lagring av data 5V/2,5A DC-inngang, Power-over-Ethernet (PoE) støtte (krever separat PoE HAT).

Servo motor

Vi bruker en SG-90 servomotor, en motor med høyt dreiemoment som tåler belastningen opptil 2,5 kg (1 cm).

USB -kamera

Et USB -kamera for å gjøre spillet interaktivt med bildebehandling

Noen hopperkabler brukes til å koble steppermotoren og Raspberry Pi.

Trinn 4: Brenne Raspbian til SD -kortet?

Brenne Raspbian til SD -kortet?
Brenne Raspbian til SD -kortet?
Brenne Raspbian til SD -kortet?
Brenne Raspbian til SD -kortet?
Brenne Raspbian til SD -kortet?
Brenne Raspbian til SD -kortet?

Raspbian er valgfri Linux -distribusjon som kjører på Raspberry Pi. I denne veiledningen bruker vi Lite -versjonen, men skrivebordsversjonen (som kommer med et grafisk miljø) kan også brukes.

  • Last ned Etcher og installer den.
  • Koble til en SD -kortleser med SD -kortet inne.
  • Åpne Etcher og velg Raspberry Pi.img- eller.zip -filen fra harddisken du vil skrive til SD -kortet.
  • Velg SD -kortet du vil skrive bildet til.
  • Gjennomgå valgene dine og klikk "Flash!" for å begynne å skrive data til SD -kortet.

Koble enheten til nettverket ditt

  • Aktiver SSH -tilgang ved å legge til tom fil ssh, igjen plassert ved roten av oppstartsvolumet på SD -kortet.
  • Sett inn SD -kortet i Raspberry Pi. Den starter opp på omtrent 20 sekunder. Du bør nå ha SSH -tilgang til din Raspberry Pi. Som standard vil vertsnavnet være raspberrypi.local. Åpne et terminalvindu på datamaskinen og skriv inn følgende:

ssh [email protected]

Standardpassordet er bringebær

Her har jeg brukt en egen skjerm for å koble til Raspberry Pi.

Trinn 5: Samle datasettet? ️

Samle datasettet? ️
Samle datasettet? ️
Samle datasettet? ️
Samle datasettet? ️

Det første trinnet i dette prosjektet er datainnsamling. Systemet må identifisere håndbevegelsen og gjenkjenne handlingen og bevege seg deretter.

Vi installerer flere biblioteker til Raspberry Pi ved hjelp av pip -installasjon

kommando.

sudo apt-get update && sudo apt-get upgrades sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev pip installer opencv pip install numpy pip install scikit-lær pip installer scikit-image pip installer h5py pip installer Keras pip installer 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 seks

Hvis du får problemer med OpenCVpackage, anbefaler jeg på det sterkeste å installere disse pakkene.

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 installert alle nødvendige avhengigheter for dette prosjektet. Datasettet er laget av samlinger og ordninger av bildene under passende etikett.

Her lager vi datasettbildene for etiketten stein, papir og saks ved hjelp av følgende kodebit.

roi = ramme [100: 500, 100: 500]

save_path = os.path.join (img_class_path, '{}.jpg'.format (count + 1)) cv2.imwrite (save_path, roi)

Bildet er tatt for hver etikett (stein, papir, saks og Ingen).

Trinn 6: Utforming av et NN og opplæring av modellen ⚒️⚙️

Design en NN og opplær modellen ⚒️⚙️
Design en NN og opplær modellen ⚒️⚙️

Kjernen i dette prosjektet er en bildeklassifisering som klassifiserer en av tre kategorier. For å lage denne klassifisereren bruker vi det forhåndsutdannede CNN (Convolutional Network) kalt SqueezeNet.

Her bruker vi Keras og TensorFlow til å generere SqueezeNet -modellen som kan identifisere gesten. Bildene som vi genererte i forrige trinn, brukes til å trene modellen. Modellen er trent ved hjelp av datasettet generert for ingen av epoker (sykluser) nevnt.

Modellen er konfigurert med hyperparameterne som vist nedenfor.

modell = Sekvensiell ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Frafall (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivering ('relu'), GlobalAveragePooling2D (), Aktivering ('softmax')])

Mens modellen trener, kan du finne tapet og nøyaktigheten til modellen for hver epoke, og nøyaktigheten øker på et tidspunkt etter noen epoker.

Det tok omtrent 2 timer å generere modellen med den høyeste nøyaktigheten etter 10 epoker. Hvis du står overfor eventuelle minnetildelingsfeil, gjør du følgende trinn (Takk til Adrian)

For å øke bytteplassen din, åpne /etc /dphys-swapfile og rediger deretter CONF_SWAPSIZE-variabelen:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Legg merke til at jeg øker byttet fra 100MB til 1024MB. Derfra starter du bytte -tjenesten:

$ sudo /etc/init.d/dphys-swapfile stop

$ sudo /etc/init.d/dphys-swapfile start

Merk:

Å øke byttestørrelsen er en fin måte å brenne ut minnekortet på, så sørg for å tilbakestille denne endringen og starte byttetjenesten på nytt når du er ferdig. Du kan lese mer om store størrelser som ødelegger minnekort her.

Trinn 7: Testing av modellen ✅

Testing av modellen ✅
Testing av modellen ✅
Testing av modellen ✅
Testing av modellen ✅
Testing av modellen ✅
Testing av modellen ✅

Når modellen er generert, produserer den utdatafilen "rock-paper-scissors-model.h5". Denne filen brukes som kilde for å teste om systemet kan identifisere forskjellige håndbevegelser og kunne differensiere handlingene.

Modellen lastes inn i python -skriptet som følger

modell = load_model ("stein-papir-saks-modell.h5")

Kameraet leser testbildet og transformerer den nødvendige fargemodellen, og endrer deretter størrelsen på bildet til 227 x 227 piksler (samme størrelse som brukes for modellgenerering). Bildene som ble brukt til opplæring av modellen kan brukes til å teste den genererte modellen.

img = cv2.imread (filbane)

img = cv2.cvtColor (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Når modellen er lastet inn og bildet er hentet av kameraet, forutsier modellen det fangede bildet ved hjelp av SqueezeNet -modellen lastet inn, og gjør forutsigelsen for brukerens bevegelser.

pred = model.predict (np.array ())

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Forutsagt: {}". format (move_name))

Kjør test.py -skriptet for å teste modellen med forskjellige testbilder.

python3 test.py

Nå er modellen klar til å oppdage og forstå håndbevegelsene.

Trinn 8: Rock-Paper-Scissors Game

Rock-Paper-Scissors Game
Rock-Paper-Scissors Game

Spillet bruker en tilfeldig tallgenereringsfunksjon for å bestemme datamaskinens bevegelse. Den følger reglene ovenfor for å bestemme vinneren. Spillet er designet med to moduser: Normal modus og Intelligent modus, hvor intelligent modus motangriper brukerens bevegelse, dvs. Computer vinner alle trekkene mot brukeren.

cap = cv2. VideoCapture (0) # For å ta bilde fra kameraet

La oss nå lage spillet i normal modus der systemet/ Raspberry Pi tar bildet av hånden og analyserer og identifiserer håndbevegelsen. Ved å bruke en tilfeldig tallgenerator spilles datamaskinbevegelsen. Vinneren velges ut fra reglene og vises deretter på skjermen. Start spillet med følgende kommando.

python3 play.py

Trinn 9: Servomotorintegrasjon?

Til slutt, legg til servomotoren i dette prosjektet. Servomotor er GPIO pin 17 på Raspberry Pi, som har PWM -funksjonen for å kontrollere rotasjonsvinkelen.

Servomotoren som ble brukt i dette prosjektet er SG-90. Den kan rotere med klokken og mot klokken opptil 180 °

Tilkoblingene er gitt som følger.

Servomotor - Bringebær Pi

Vcc - +5V

GND - GND

Signal - GPIO17

Bibliotekene som RPi. GPIO og tid brukes i dette prosjektet.

importer RPi. GPIO som GPIO

importtid

GPIO -pinnen blir deretter konfigurert til PWM ved hjelp av følgende linjer

servoPIN = 17

GPIO.setmode (GPIO. BCM) GPIO.setup (servoPIN, GPIO. OUT)

GPIO Pin 17 er konfigurert til bruk som PWM med frekvensen 50Hz. Servomotorens vinkel oppnås ved å stille driftssyklusen (Ton & Toff) til PWM

plikt = vinkel/18 + 2

GPIO.output (servoPIN, True) p. ChangeDutyCycle (duty) time.sleep (1) GPIO.output (servoPIN, False) p. ChangeDutyCycle (0)

Dette vil produsere ønsket trinnvinkel for hver puls, noe som vil gi ønsket rotasjonsvinkel.

Nå har jeg tatt diagrammet og skåret det i tre seksjoner, for stein, papir og saks. Servomotoren er festet til midten av diagrammet. Pekeren/klaffen er koblet til akselen på servomotoren. Denne akselen peker på datamaskinens bevegelse i henhold til logikken som er beregnet i skriptet.

Trinn 10: Arbeid med prosjektet?

Image
Image

Og nå er det spilletid. La oss se hvordan prosjektet fungerer.

Hvis du møtte noen problemer med å bygge dette prosjektet, kan du spørre meg. Vennligst foreslå nye prosjekter du vil at jeg skal gjøre neste gang.

Tommel opp hvis det virkelig hjalp deg, og følg kanalen min for interessante prosjekter.:)

Del denne videoen hvis du vil.

Glad for at du abonnerer:

Takk for at du leste!

Trinn 11: Kode - Project Repo

Koden legges til GitHub -depotet som du finner i kodeseksjonen.

Rahul24-06/Rock-Paper-Scissors-https://github.com/Rahul24-06/Rock-Paper-Scissors

Anbefalt: