Sisällysluettelo:
- Vaihe 1: Tässä projektissa käytetyt asiat
- Vaihe 2: Idea?
- Vaihe 3: Aloittaminen?
- Vaihe 4: Polta Raspbian SD -kortille?
- Vaihe 5: Tietojoukon kerääminen? ️
- Vaihe 6: NN: n suunnittelu ja mallin kouluttaminen ⚒️⚙️
- Vaihe 7: Mallin testaaminen ✅
- Vaihe 8: Kivi-paperi-sakset-peli
- Vaihe 9: Servomoottorin integrointi?
- Vaihe 10: Projektin työ?
- Vaihe 11: Koodi - Project Repo
Video: Kalliopaperin sakset AI: 11 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
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?
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?
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?
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:
Oletussalasana on vadelma
Tässä olen käyttänyt erillistä näyttöä Raspberry Pi: n kanssa.
Vaihe 5: Tietojoukon kerääminen? ️
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 ⚒️⚙️
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 ✅
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
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ö?
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:
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Kalliopaperin sakset: 10 vaihetta
Kalliopaperin sakset: Tarkoitus: Kun olet suorittanut tämän, opit tekemään yksinkertaisen pelin Rock, Paper Scissors tyhjästä Code.org: n avulla. Tarvittavat materiaalit / vaatimukset: Perustiedot Javascript -syntaksista, tietokone, Code.org -tili
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
Raspberry Pi -ohjattu sakset: 17 vaihetta (kuvilla)
Raspberry Pi -ohjattu saksihissi: Miksi sakset? Miksi ei! Se on hieno ja hauska projekti rakentaa. Todellinen syy minulle on nostaa kameroita Great Mojave Rover -projektissani. Haluan, että kamerat nousevat roverin yläpuolelle ja ottavat kuvia ympäristöstä. Mutta tarvitsin