Sisukord:
- Samm: selles projektis kasutatud asjad
- 2. samm: idee?
- 3. samm: alustamine?
- Samm: kirjutage Raspbian SD -kaardile?
- 5. samm: andmekogumi kogumine? ️
- 6. samm: NN -i kavandamine ja mudeli koolitamine ⚒️⚙️
- 7. samm: mudeli testimine ✅
- 8. samm: kivipaberi-kääride mäng
- Samm: servomootori integreerimine?
- 10. samm: projekti töö?
- Samm 11: kood - projekti repo
Video: Kivipaberikäär AI: 11 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:47
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?
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?
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?
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:
Vaikimisi parool on vaarikas
Siin olen kasutanud Raspberry Pi -ga liidestamiseks eraldi monitori.
5. samm: 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 ⚒️⚙️
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 ✅
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
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öö?
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:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
4 sammu aku sisemise takistuse mõõtmiseks: 4 sammu
4 sammu aku sisemise takistuse mõõtmiseks: Siin on 4 lihtsat sammu, mis aitavad mõõta taigna sisemist takistust