Sisällysluettelo:

Kalliopaperin sakset AI: 11 vaihetta
Kalliopaperin sakset AI: 11 vaihetta

Video: Kalliopaperin sakset AI: 11 vaihetta

Video: Kalliopaperin sakset AI: 11 vaihetta
Video: Part 2 - Uncle Tom's Cabin Audiobook by Harriet Beecher Stowe (Chs 8-11) 2024, Marraskuu
Anonim
Rock Paper Scissor AI
Rock Paper Scissor AI

Oletko koskaan kyllästynyt yksin? Pelataan rockia, paperia ja saksia interaktiivista järjestelmää vastaan, jossa on älykkyyttä.

Vaihe 1: Tässä projektissa käytetyt asiat

Laitteiston osat

  • Raspberry Pi 3 Malli B+ × 1
  • Raspberry Pi -kameramoduuli V2 × 1
  • SG90 Mikroservomoottori × 1

Ohjelmistosovellukset

  • Raspberry Pi Raspbian
  • OpenCV
  • TensorFlow

Vaihe 2: Idea?

Image
Image

Työskenneltyäni eri projekteilla eri aloilla, aioin tehdä hauskan projektin ja päätin tehdä kivi-paperi-sakset-pelin:)

Tässä projektissa teemme interaktiivisen pelin ja pelaamme tietokonetta vastaan, joka on tekoälyn avulla päätösten tekemiseen. Tekoäly käyttää Raspberry Pi -laitteeseen yhdistettyä kameraa tunnistaakseen, mitä käyttäjä liikuttaa kädellä, luokitellakseen heidät parhaaseen luokkaan (etiketti), kiviin, paperiin tai saksiin. Kun tietokone on siirtynyt, Raspberry Pi -laitteeseen kytketty askelmoottori osoittaa sen liikkeen perusteella.

Säännöt, jotka on otettava huomioon tässä pelissä:

  • Rock tylsistää saksia
  • Paperi peittää kiven
  • Sakset leikkaa paperia

Voittaja ratkaistaan yllä olevien kolmen ehdon perusteella. Katsotaanpa projektin nopea esittely täältä.

Vaihe 3: Aloittaminen?

Päästä alkuun ?
Päästä alkuun ?
Päästä alkuun ?
Päästä alkuun ?

Raspberry Pi

Olen käyttänyt Raspberry Pi 3 -mallia B+, jossa on suuria parannuksia ja joka on tehokkaampi kuin aikaisempi Raspberry Pi 3 -malli B.

Raspberry Pi 3 B+ on integroitu 1,4 GHz 64-bittiseen nelisydinprosessoriin, kaksikaistaiseen langattomaan lähiverkkoon, Bluetooth 4.2/BLE -yhteyteen, nopeampaan Ethernetiin ja Power-over-Ethernet-tukeen (erillisellä PoE HAT -tuella).

Tekniset tiedot: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bittinen SoC @ 1,4 GHz, 1 Gt LPDDR2 SDRAM, 2,4 GHz ja 5 GHz IEEE 802.11.b/g/n/ac langaton lähiverkko, Bluetooth 4.2, BLE, Gigabit Ethernet over USB 2.0 (maksiminopeus 300 Mbps), laajennettu 40-nastainen GPIO-otsikko, täysikokoinen HDMI4 USB 2.0 -portti, CSI-kameraportti Raspberry Pi -kameran liittämistä varten, DSI-näyttöportti Raspberry Pi -kosketusnäytön liittämiseen 4-napainen stereolähtö ja komposiitti videoportti, Micro SD -portti käyttöjärjestelmän lataamiseen ja tietojen tallentamiseen 5 V/2,5 A DC-virtatulo, Power-over-Ethernet (PoE) -tuki (vaatii erillisen PoE HAT -yhteyden).

Servo moottori

Käytämme SG-90-servomoottoria, suuren vääntömomentin moottoria, joka kestää jopa 2,5 kg: n (1 cm) kuorman.

USB -kamera

USB -kamera, joka tekee pelistä vuorovaikutteisen kuvankäsittelyn kanssa

Joitakin hyppykaapeleita käytetään askelmoottorin ja Raspberry Pi: n johtamiseen.

Vaihe 4: Polta Raspbian SD -kortille?

Polta Raspbian SD -kortille?
Polta Raspbian SD -kortille?
Polta Raspbian SD -kortille?
Polta Raspbian SD -kortille?
Polta Raspbian SD -kortille?
Polta Raspbian SD -kortille?

Raspbian on suosituin Linux -jakelu, joka toimii Raspberry Pi: llä. Tässä oppaassa käytämme yksinkertaistettua versiota, mutta myös työpöytäversiota (jossa on graafinen ympäristö) voidaan käyttää.

  • Lataa Etcher ja asenna se.
  • Liitä SD -kortinlukija siten, että SD -kortti on sisällä.
  • Avaa Etcher ja valitse kiintolevyltä Raspberry Pi.img- tai.zip -tiedosto, jonka haluat kirjoittaa SD -kortille.
  • Valitse SD -kortti, jolle haluat kirjoittaa kuvan.
  • Tarkista valintasi ja napsauta Flash! aloittaaksesi tietojen kirjoittamisen SD -kortille.

Yhdistä laite verkkoon

  • Ota SSH -käyttöoikeus käyttöön lisäämällä tyhjä tiedosto ssh, joka on jälleen sijoitettu SD -kortin käynnistyslevyn juureen.
  • Aseta SD -kortti Raspberry Pi -laitteeseen. Se käynnistyy noin 20 sekunnissa. Sinulla pitäisi nyt olla SSH -yhteys Raspberry Pi -laitteeseesi. Sen isäntänimi on oletuksena raspberrypi.local. Avaa tietokoneessa pääteikkuna ja kirjoita seuraava:

ssh [email protected]

Oletussalasana on vadelma

Tässä olen käyttänyt erillistä näyttöä Raspberry Pi: n kanssa.

Vaihe 5: Tietojoukon kerääminen? ️

Kerätäänkö tietojoukkoa? ️
Kerätäänkö tietojoukkoa? ️
Kerätäänkö tietojoukkoa? ️
Kerätäänkö tietojoukkoa? ️

Ensimmäinen vaihe tässä projektissa on tietojen kerääminen. Järjestelmän on tunnistettava ele ja tunnistettava toiminto ja liikuttava sen mukaisesti.

Asennamme useita kirjastoja Raspberry Pi -sovellukseen pip install -ohjelmalla

komento.

sudo apt-get update && sudo apt-get upgrades sud apt asenna tensorflow pip asenna Werkzeug pip install Keras-Applications pip install Keras-Preprocessing pip install keras-squeezenet pip install astor pip asenna tensorboard pip asenna tensorflow-arvioija pip asenna pilkkaa pip asenna grpcio pip asenna absl-pypip asenna gast pip asenna joblib pip install Markdown pip install protobuf pip install PyYAML pip install six

Jos sinulla on ongelmia OpenCVpackagen kanssa, suosittelen voimakkaasti näiden pakettien asentamista.

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

Olemme asentaneet kaikki tarvittavat riippuvuudet tähän projektiin. Tietojoukko koostuu kuvien kokoelmista ja järjestelyistä sopivan tarran alla.

Tässä luomme tietojoukon kuvat tarrakalliolle, paperille ja saksille seuraavan katkelman avulla.

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

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

Kuva otetaan jokaisesta tarrasta (kivi, paperi, sakset ja ei mitään).

Vaihe 6: NN: n suunnittelu ja mallin kouluttaminen ⚒️⚙️

NN: n suunnittelu ja mallin koulutus ⚒️⚙️
NN: n suunnittelu ja mallin koulutus ⚒️⚙️

Tämän projektin ydin on kuvien luokittelija, joka luokittelee yhden kolmesta luokasta. Tämän luokittelijan valmistuksessa käytämme esikoulutettua CNN: ää (Convolutional Network) nimeltä SqueezeNet.

Täällä käytämme Kerasia ja TensorFlowia luomaan SqueezeNet -malli, joka voi tunnistaa eleen. Edellisessä vaiheessa luomiamme kuvia käytetään mallin kouluttamiseen. Malli on koulutettu käyttämällä tietojoukkoa, joka on luotu mainituille aikakausille (syklit).

Malli on määritetty hyperparametreilla alla esitetyllä tavalla.

malli = peräkkäinen ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Keskeytys (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktivointi ('relu'), GlobalAveragePooling2D (), Aktivointi (softmax)])

Mallin harjoittelun aikana löydät mallin menetyksen ja tarkkuuden kullekin aikakaudelle ja tarkkuus kasvaa jossain vaiheessa muutaman aikakauden jälkeen.

Mallin luominen korkeimmalla tarkkuudella kesti noin 2 tuntia 10 aikakauden jälkeen. Jos kohtaat muistinvarausvirheitä, toimi seuraavasti (kiitos Adrianille)

Jos haluat lisätä vaihtotilaa, avaa /etc /dphys-swapfile ja muokkaa CONF_SWAPSIZE-muuttujaa:

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Huomaa, että vaihdan swapia 100 megatavusta 1024 megatavuun. Käynnistä sitten vaihtopalvelu uudelleen:

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

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

Huomautus:

Vaihtokoon lisääminen on hyvä tapa polttaa muistikortti, joten muista palauttaa tämä muutos ja käynnistää vaihtopalvelu uudelleen, kun olet valmis. Voit lukea lisää suurikokoisista korruptoivista muistikorteista täältä.

Vaihe 7: Mallin testaaminen ✅

Mallin testaaminen ✅
Mallin testaaminen ✅
Mallin testaaminen ✅
Mallin testaaminen ✅
Mallin testaaminen ✅
Mallin testaaminen ✅

Kun malli on luotu, se tuottaa tulostiedoston "rock-paper-scissors-model.h5". Tätä tiedostoa käytetään lähteenä testatakseen, pystyykö järjestelmä tunnistamaan erilaisia eleitä ja kykeneekö erottamaan toiminnot.

Malli ladataan python -skriptiin seuraavasti

malli = kuormitusmalli ("rock-paper-scissors-model.h5")

Kamera lukee testikuvan ja muuttaa vaaditun värimallin ja muuttaa sitten kuvan kokoa 227 x 227 pikseliin (sama koko, jota käytettiin mallin luomisessa). Mallin kouluttamiseen käytettyjä kuvia voidaan käyttää luodun mallin testaamiseen.

img = cv2.imread (tiedostopolku)

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

Kun malli on ladattu ja kamera on ottanut kuvan, malli ennustaa otetun kuvan ladatun SqueezeNet -mallin avulla ja ennustaa käyttäjän liikkeet.

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

move_code = np.argmax (pred [0]) move_name = mapper (move_code) print ("Ennustettu: {}". muoto (siirron_nimi))

Testaa malli eri testikuvilla suorittamalla test.py -komentosarja.

python3 test.py

Nyt malli on valmis havaitsemaan ja ymmärtämään käsieleitä.

Vaihe 8: Kivi-paperi-sakset-peli

Kivi-paperi-sakset-peli
Kivi-paperi-sakset-peli

Peli käyttää satunnaislukujen muodostustoimintoa päättääkseen tietokoneen siirron. Voittaja määritetään edellä mainittujen sääntöjen mukaisesti. Peli on suunniteltu kahdella tavalla: Normaalitila ja Älykäs tila, jossa älykäs tila vastustaa käyttäjän liikettä, eli tietokone voittaa kaikki liikkeet käyttäjää vastaan.

cap = cv2. VideoCapture (0) # Kuvan ottaminen kamerasta

Tehdään nyt peli normaalitilaan, jossa järjestelmä/ Raspberry Pi ottaa kuvan kädestä ja analysoi ja tunnistaa eleen. Sitten tietokone liikkuu satunnaislukugeneraattorin avulla. Voittaja valitaan sääntöjen perusteella ja näytetään sitten näytöllä. Aloita peli seuraavalla komennolla.

python3 play.py

Vaihe 9: Servomoottorin integrointi?

Lisää lopuksi servomoottori tähän projektiin. Servomoottori on Raspberry Pi: n GPIO -nasta 17, jossa on PWM -toiminto pyörimiskulman säätämiseksi.

Tässä projektissa käytetty servomoottori on SG-90. Se voi kiertää myötäpäivään ja vastapäivään jopa 180 °

Liitännät on annettu seuraavasti.

Servomoottori - Raspberry Pi

Vcc - +5V

GND - GND

Signaali - GPIO17

Tässä projektissa käytetään kirjastoja, kuten RPi. GPIO ja aikaa.

Tuo RPi. GPIO GPIO: ksi

tuonnin aika

GPIO -nasta konfiguroidaan sitten PWM -muotoon seuraavien rivien avulla

servoPIN = 17

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

GPIO Pin 17 on määritetty käytettäväksi PWM: nä 50 Hz: n taajuudella. Servomoottorin kulma saavutetaan asettamalla PWM: n käyttöjakso (Ton & Toff)

käyttö = kulma/18 + 2

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

Tämä tuottaa halutun askelkulman jokaiselle pulssille, joka antaisi halutun kiertokulman.

Nyt olen ottanut kaavion ja viipaloinut sen kolmeen osaan, rockille, paperille ja saksille. Servomoottori on kiinnitetty kartan keskelle. Osoitin/läppä on kytketty servomoottorin akseliin. Tämä akseli osoittaa tietokoneen liikkeen komentosarjassa lasketun logiikan mukaisesti.

Vaihe 10: Projektin työ?

Image
Image

Ja nyt on peliaika. Katsotaan projektin toimintaa.

Jos sinulla oli ongelmia tämän projektin rakentamisessa, kysy rohkeasti. Ehdottakaa uusia projekteja, joiden haluatte tekevän seuraavaksi.

Nosta peukkua, jos se todella auttoi sinua, ja seuraa kanavaani mielenkiintoisiin projekteihin.:)

Jaa tämä video, jos haluat.

Kiva, että tilasit:

Kiitos lukemisesta!

Vaihe 11: Koodi - Project Repo

Koodi lisätään GitHub -arkistoon, joka löytyy koodiosasta.

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

Suositeltava: