Sisukord:

Kivipaberikäär AI: 11 sammu
Kivipaberikäär AI: 11 sammu

Video: Kivipaberikäär AI: 11 sammu

Video: Kivipaberikäär AI: 11 sammu
Video: Kuhu Huggy Wuggy kadus? Kes leiab esimesena Huggy Wuggy Poppy Playtime Factoryst? 2024, November
Anonim
Kivipaberi käär AI
Kivipaberi käär AI

Kas olete kunagi tundnud üksi igavust? Mängime kivi, paberit ja kääre interaktiivse süsteemi vastu, millel on intelligentsus.

Samm: selles projektis kasutatud asjad

Riistvara komponendid

  • Vaarika Pi 3 Mudel B+ × 1
  • Vaarika Pi kaamera moodul V2 × 1
  • SG90 Mikroservomootor × 1

Tarkvararakendused

  • Vaarikas Pi Raspbian
  • OpenCV
  • TensorFlow

2. samm: idee?

Image
Image

Pärast erinevate projektide kallal töötamist erinevates valdkondades plaanisin teha lõbusa projekti ja otsustasin teha kivipaberi-kääride mängu:)

Selles projektis teeme interaktiivse mängu ja mängime arvuti vastu, mis on otsuste tegemiseks AI toitega. Tehisintellekt kasutab Raspberry Pi -ga ühendatud kaamerat, et ära tunda, mis kasutaja käega liigutab, liigitada need parimasse kategooriasse (etikett), kivisse, paberisse või kääridesse. Kui arvuti on oma käigu teinud, osutab Raspberry Pi -ga ühendatud samm -mootor selle käigu suunas.

Reeglid, mida tuleb selle mängu puhul arvesse võtta:

  • Rock nüristab käärid
  • Paber katab kivi
  • Käärid lõikavad paberit

Võitja otsustatakse ülaltoodud kolme tingimuse alusel. Vaatame siin projekti kiiret demo.

3. samm: alustamine?

Alustamine?
Alustamine?
Alustamine?
Alustamine?

Vaarika Pi

Olen kasutanud Raspberry Pi 3 mudelit B+, millel on suurepärased täiustused ja mis on võimsam kui varasem Raspberry Pi 3 mudel B.

Raspberry Pi 3 B+ on integreeritud 1,4 GHz 64-bitise neljatuumalise protsessoriga, kahesagedusliku traadita kohtvõrgu, Bluetooth 4.2/BLE, kiirema Etherneti ja Power-over-Ethernet toega (eraldi PoE HAT).

Tehnilised andmed: Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bitine SoC @ 1,4 GHz, 1 GB LPDDR2 SDRAM, 2,4 GHz ja 5 GHz IEEE 802.11.b/g/n/ac traadita kohtvõrk, Bluetooth 4.2, BLE, Gigabit Etherneti kaudu USB 2.0 (maksimaalne läbilaskevõime 300 Mbps), laiendatud 40-pin GPIO päis, täismõõdus HDMI4 USB 2.0 pordid, CSI kaamera port Raspberry Pi kaamera ühendamiseks, DSI kuvari port Raspberry Pi puutetundliku ekraani ühendamiseks 4-pooluseline stereoväljund ja komposiit videoport, Micro SD port operatsioonisüsteemi laadimiseks ja andmete salvestamiseks 5V/2,5A alalisvoolu sisend, Power-over-Ethernet (PoE) tugi (nõuab eraldi PoE HAT).

Servomootor

Kasutame SG-90 servomootorit, suure pöördemomendiga mootorit, mis talub koormust kuni 2,5 kg (1 cm).

USB kaamera

USB -kaamera, mis muudab mängu pilditöötlusega interaktiivseks

Sammumootori ja Raspberry Pi ühendamiseks kasutatakse mõningaid hüppajakaableid.

Samm: kirjutage Raspbian SD -kaardile?

Kas põletada Raspbian SD -kaardile?
Kas põletada Raspbian SD -kaardile?
Kas põletada Raspbian SD -kaardile?
Kas põletada Raspbian SD -kaardile?
Kas põletada Raspbian SD -kaardile?
Kas põletada Raspbian SD -kaardile?

Raspbian on Linuxi valikuvõimalus, mis töötab Raspberry Pi -l. Selles juhendis kasutame lihtsat versiooni, kuid saab kasutada ka töölaua versiooni (mis on varustatud graafilise keskkonnaga).

  • Laadige alla Etcher ja installige see.
  • Ühendage SD -kaardi lugeja nii, et SD -kaart oleks sees.
  • Avage Etcher ja valige kõvakettalt Raspberry Pi.img või.zip fail, mille soovite SD -kaardile kirjutada.
  • Valige SD -kaart, kuhu soovite oma pildi kirjutada.
  • Vaadake oma valikud üle ja klõpsake "Flash!" alustada andmete kirjutamist SD -kaardile.

Ühendage seade võrguga

  • Luba SSH -juurdepääs, lisades tühja faili ssh, mis asetatakse uuesti teie SD -kaardi alglaadimismahu juure.
  • Sisestage SD -kaart Raspberry Pi -sse. See käivitub umbes 20 sekundiga. Nüüd peaks teil olema Raspberry Pi -le SSH -juurdepääs. Vaikimisi on selle hostinimi raspberrypi.local. Avage arvutis terminaliaken ja tippige järgmine tekst:

ssh [email protected]

Vaikimisi parool on vaarikas

Siin olen kasutanud Raspberry Pi -ga liidestamiseks eraldi monitori.

5. samm: andmekogumi kogumine? ️

Andmekogumi kogumine? ️
Andmekogumi kogumine? ️
Andmekogumi kogumine? ️
Andmekogumi kogumine? ️

Selle projekti esimene samm on andmete kogumine. Süsteem peab käeliigutuse tuvastama ja toimingu ära tundma ning vastavalt sellele edasi liikuma.

Paigaldame Raspberry Pi -sse mitu teeki, kasutades pip install

käsk.

sudo apt-get update && sudo apt-get upgrades sud apt install 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-arvioator 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 kuus

Kui teil on OpenCVpackage'iga probleeme, soovitan tungivalt need paketid installida.

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

Oleme selle projekti jaoks installinud kõik vajalikud sõltuvused. Andmekogum on loodud piltide kogumike ja paigutuste abil vastava sildi all.

Siin loome andmekogumi kujutised sildi kivi, paberi ja kääride jaoks, kasutades järgmist katkendit.

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

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

Pilt salvestatakse iga sildi jaoks (kivi, paber, käärid ja puudub).

6. samm: NN -i kavandamine ja mudeli koolitamine ⚒️⚙️

NN -i kujundamine ja mudeli koolitamine ⚒️⚙️
NN -i kujundamine ja mudeli koolitamine ⚒️⚙️

Selle projekti tuum on pildiklassifikaator, mis klassifitseerib ühe kolmest kategooriast. Selle klassifikaatori valmistamiseks kasutame eelnevalt koolitatud CNN-i (Convolutional Network) nimega SqueezeNet.

Siin kasutame Keras ja TensorFlow SqueezeNeti mudeli loomiseks, mis suudab žesti tuvastada. Eelmises etapis loodud pilte kasutatakse mudeli koolitamiseks. Mudel on koolitatud, kasutades andmekogumit, mis on loodud ühegi nimetatud ajajärgu (tsükli) jaoks.

Mudel on konfigureeritud hüperparameetritega, nagu allpool näidatud.

mudel = järjestikune ([SqueezeNet (input_shape = (227, 227, 3), include_top = False), Väljalangemine (0,5), Convolution2D (NUM_CLASSES, (1, 1), padding = 'valid'), Aktiveerimine ('relu'), GlobalAveragePooling2D (), Aktiveerimine (softmax)])

Kui mudel treenib, leiate mudeli kadumise ja täpsuse iga ajastu kohta ning täpsus suureneb mingil ajahetkel pärast mõnda ajajärku.

Suurima täpsusega mudeli genereerimiseks kulus umbes 10 tundi pärast umbes 2 tundi. Kui teil esineb mälu eraldamise vigu, tehke järgmist (tänu Adrianile)

Vahetusruumi suurendamiseks avage /etc /dphys-swapfile ja muutke muutujat CONF_SWAPSIZE.

# CONF_SWAPSIZE = 100

CONF_SWAPSIZE = 1024

Pange tähele, et suurendan vahetust 100 MB -lt 1024 MB -ni. Sealt taaskäivitage vahetusteenus:

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

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

Märge:

Vahetusmahu suurendamine on suurepärane viis mälukaardi põletamiseks, nii et pöörake kindlasti see muudatus tagasi ja taaskäivitage vahetusteenus, kui olete lõpetanud. Siit saate lugeda mälukaartide riknemise suurte mõõtmete kohta.

7. samm: mudeli testimine ✅

Mudeli testimine ✅
Mudeli testimine ✅
Mudeli testimine ✅
Mudeli testimine ✅
Mudeli testimine ✅
Mudeli testimine ✅

Kui mudel on loodud, toodab see väljundfaili "rock-paper-scissors-model.h5". Seda faili kasutatakse allikana, et testida, kas süsteem suudab tuvastada erinevaid käeliigutusi ja kas on võimalik toiminguid eristada.

Mudel laaditakse pythoni skripti järgmiselt

mudel = load_model ("kivipaber-käärid-mudel.h5")

Kaamera loeb testkujutist ja muudab vajaliku värvimudeli ning muudab seejärel pildi suurust 227 x 227 pikslile (sama suurus, mida kasutati mudelite genereerimisel). Mudeli koolitamiseks kasutatud pilte saab kasutada loodud mudeli testimiseks.

img = cv2.imread (failitee)

img = cv2.cvtVärv (img, cv2. COLOR_BGR2RGB) img = cv2.resize (img, (227, 227))

Kui mudel on laaditud ja kaamera on pildi omandanud, prognoosib mudel tehtud pildi SqueezeNet laaditud mudeli abil ja ennustab kasutaja liikumist.

pred = mudel.prognoos (np.array ())

move_code = np.argmax (pred [0]) move_name = kaardistaja (move_code) print ("Prognoositud: {}". vorming (move_name))

Käivitage test.py skript, et katsetada mudelit erinevate testpiltidega.

python3 test.py

Nüüd on mudel valmis käeliigutusi tuvastama ja mõistma.

8. samm: kivipaberi-kääride mäng

Kivipaberi-kääride mäng
Kivipaberi-kääride mäng

Mäng kasutab arvuti käigu otsustamiseks juhusliku arvu genereerimise funktsiooni. Võitja selgitamiseks järgitakse ülaltoodud reegleid. Mäng on kavandatud kahe režiimiga: tavarežiim ja intelligentne režiim, kus arukas režiim annab kasutaja liikumisele vasturünnaku, st arvuti võidab kõik käigud kasutaja vastu.

cap = cv2. VideoCapture (0) # Kaamerast pildi jäädvustamiseks

Nüüd teeme mängu tavarežiimis, kus süsteem/ Raspberry Pi teeb käest pildi ning analüüsib ja tuvastab käeliigutuse. Seejärel mängitakse juhusliku arvu generaatori abil arvuti käik. Võitja valitakse reeglite alusel ja kuvatakse seejärel ekraanile. Alustage mängu järgmise käsuga.

python3 play.py

Samm: servomootori integreerimine?

Lõpuks lisage sellele projektile servomootor. Servomootor on Raspberry Pi GPIO tihvt 17, millel on PWM -funktsioon pöörlemisnurga juhtimiseks.

Selles projektis kasutatav servomootor on SG-90. See võib teha pöördeid päripäeva ja vastupäeva kuni 180 °

Ühendused on esitatud järgmiselt.

Servomootor - Raspberry Pi

Vcc - +5V

GND - GND

Signaal - GPIO17

Selles projektis kasutatakse selliseid raamatukogusid nagu RPi. GPIO ja aeg.

RPi. GPIO importimine GPIO -na

impordi aeg

Seejärel konfigureeritakse GPIO tihvt PWM -i abil, kasutades järgmisi ridu

servoPIN = 17

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

GPIO Pin 17 on konfigureeritud kasutama PWM -i sagedusel 50Hz. Servomootori nurk saavutatakse PWM -i töötsükli (Ton & Toff) seadistamisega

kohustus = nurk/18 + 2

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

See annab iga impulsi jaoks soovitud sammunurga, mis annaks soovitud pöördenurga.

Nüüd võtsin graafiku ja lõikasin selle kolmeks osaks, kiviks, paberiks ja käärideks. Servomootor on fikseeritud diagrammi keskele. Osuti/klapp on ühendatud servomootori võlliga. See võll osutab arvuti käigule vastavalt skriptis arvutatud loogikale.

10. samm: projekti töö?

Image
Image

Ja nüüd on mänguaeg. Vaatame projekti toimimist.

Kui teil tekkis selle projekti ehitamisel probleeme, küsige julgelt minult. Palun soovitage uusi projekte, mida soovite, et ma järgmisena teeksin.

Tõstke pöialt, kui see teid tõesti aitas, ja jälgige minu kanalit huvitavate projektide jaoks.:)

Kui soovite, jagage seda videot.

Hea meel, et tellisite:

Täname lugemise eest!

Samm 11: kood - projekti repo

Kood lisatakse GitHubi hoidlasse, mille leiate koodijaotisest.

Rahul24-06/Kivipaberi käärid-https://github.com/Rahul24-06/Rock-Paper-Scissors

Soovitan: