INHOUDSOPGAWE:

Rock Paper Scissor AI: 11 stappe
Rock Paper Scissor AI: 11 stappe

Video: Rock Paper Scissor AI: 11 stappe

Video: Rock Paper Scissor AI: 11 stappe
Video: C# Rock Paper Scissors Game... #Csharp #GameDev 2024, November
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

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?

Image
Image

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?

Aan die gang kom ?
Aan die gang kom ?
Aan die gang kom ?
Aan die gang kom ?

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?

Brand Raspbian op die SD -kaart?
Brand Raspbian op die SD -kaart?
Brand Raspbian op die SD -kaart?
Brand Raspbian op die SD -kaart?
Brand Raspbian op die SD -kaart?
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:

ssh [email protected]

Die standaard wagwoord is framboos

Hier het ek 'n aparte monitor gebruik om met die Raspberry Pi te koppel.

Stap 5: Versamel die datastel? ️

Versamel die datastel? ️
Versamel die datastel? ️
Versamel die datastel? ️
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 ⚒️⚙️

Ontwerp 'n NN en lei die model op ⚒️⚙️
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 ✅

Toets die model ✅
Toets die model ✅
Toets die model ✅
Toets die model ✅
Toets die model ✅
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

Rock-Paper-Scissors Game
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?

Image
Image

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: