Sisällysluettelo:
- Vaihe 1: Vaatimukset
- Vaihe 2: Tietojen koulutus
- Vaihe 3: Pi -kameran ennusteiden toteuttaminen
- Vaihe 4: Arduino -robotti
- Vaihe 5: Testaus
- Vaihe 6: Kaikki lisätiedostot
Video: Raspberry Pi 4 -liikennemerkkien tunnistusrobotti: 6 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Tämä ohje perustuu yliopistoprojektiini. Tavoitteena oli luoda järjestelmä, jossa hermoverkko analysoi kuvan ja tunnistuksen perusteella käskee arduino -robotin siirtymään Rosin kautta.
Jos esimerkiksi tunnistetaan käännös oikealle -merkki, robotti kääntyy oikealle, jos käännös vasemmalle -merkki tunnistetaan, robotti kääntyy vasemmalle, jos kumpikaan ei tunnista, robotti jatkaa eteenpäin. Käytettävä tietojoukko on INI: n (2019) (Institut Fur Neuroinformatik) virallinen liikennemerkkitunnistus, tässä aineistossa on 43 luokkaa, mutta tarvitaan vain kaksi; 00033 ja 00034 kansioita tietojoukossa ovat vasen ja oikea käännösmerkki.
Vaihe 1: Vaatimukset
Tämän projektin vaatimukset ovat seuraavat:
Arduino -robotti. (pohjimmiltaan arduino uno, moottoriajuri ja moottorit) (ei tarvita, jos et käytä robottia)
Vadelma pi 4.
Pi kamera.
Tarvittava ohjelmisto:
Python 3.
OpenCV 4.
Tensorflow.
arduino IDE (ei tarvita, jos et käytä robottia)
Ros (ei tarvita, jos et käytä robottia)
Mikä tahansa suosikki python -ideasi on (vadelma pi, käytän Thonnyä).
Määritä OpenCV ja Tensorflow noudattamalla Adrianin ohjeita. Linkki:
Suosittelen katsomaan mahdollisimman monia hänen opetusohjelmiaan, ne ovat todella mielenkiintoisia ja ovat hyödyllisiä sekä aloittelijoille että välituotteille.
Vaihe 2: Tietojen koulutus
Junan käsikirjoitus on suunniteltu pääsemään tietojoukkoon, joka sisältää noin 50 000 kuvaa 43 luokasta. Skripti on kirjoitettu pythonilla käyttäen erilaisia kirjastoja: os - tämä on python -komentosarjan linkittäminen oikeaan hakemistoon, jossa tietojoukko sijaitsee. Matplotlib - tämä on tarkoitettu harjoitusmallin tietojen näyttämiseen. Tensorflow ja kerat - nämä ovat kirjastoja, joita käytetään keinotekoisen hermoverkkomallin luomiseen, ja niitä käytetään mallin suunnitteluun. Numpy - tämä kirjasto on tarkoitettu kuvien muuttamiseksi matriisiksi, joka voidaan sitten viedä mallin läpi ennusteen noutamiseksi.
Liitteenä oleva komentosarja on python -koodi mallin tekemiseksi tietojoukosta. Tämä koostuu konvoluutiomuotoisesta 2D: stä (5, 5) -tulolla ja relu -aktivoinnista ja sitten yhdistämisestä. Tämä tapahtuu viimeisen kerran ennen tasoitusta ja sitten tiheys kohdistetaan luokkien määrään, tässä tapauksessa 43.
Seuraava vaihe oli mallin kokoaminen. Tämä on osa, joka asettaa optimoijan, sgd oli sopivin, koska tämä oli samanlainen kuin tehtävässä 1 käytetty optimoija. Sgd tarkoittaa stokastista gradientin laskeutumista. Myös kääntäjän sisällä häviö on asetettava, harvinaisen_luokan_risteyshäviön valitseminen on paras sovitus, koska luokat ovat kokonaislukuja ja malli antaa ennusteen jokaiselle luokalle kelluvana arvona välillä 0 ja 1. 1 on 100%: n tarkkuus.
Kun kääntäjä on valmis, mallille on käytettävä generaattoria, joka aloittaa kuvasyötteiden käsittelyn. Generaattori koostuu useista osista: training_set - tämä on linkki koulutukseen käytettävään tietojoukkoon, steps_per_epoch - tämä on tarvittavien vaiheiden lukumäärä aikakautta kohti, epochs - nämä ovat kuinka monta kertaa ohjelma toistaa koko tietosarjan, validation_data - tämä on linkki validointiin käytettyyn tietojoukkoon, validation_steps - validointiin käytettyjen vaiheiden lukumäärä, validointi tapahtuu kunkin aikakauden lopussa.
Yleensä koko tietojoukon täydellinen pyyhintä on suoritettava aikakautta kohden. Näin ollen esimerkiksi 1024 kuvan tietojoukko vaatii: Erän koko = 32, Vaiheet epookkia kohden = 32, aikakaudet = 1. Jokainen vaihe sisältää koko erän koon, joten 32 erän koolla vaiheet ovat 32. On parasta, että erän koko on suurempi kuin luokkien lukumäärä, koska jos erän koko on pienempi, jokainen vaihe ei voi sisältää kuvaa jokaisesta luokasta.
Kun malli on suorittanut koulutuksen, ohjelma tekee matplotlib -ohjelmalla tulosten kaavion, joka näyttää harjoituksen historian alusta loppuun. Kaavio koostuu tarkkuudesta, validointitarkkuudesta, menetyksestä ja validoinnin menetyksestä. Se on jaettu jaksoittain, jotta voidaan näyttää, miten koulutus edistyi. Viimeinen vaihe on tallentaa malli.h5 -tiedostona, jota voidaan käyttää myöhemmin ennakointiprosessia varten. Mallin tallentaminen tarkoittaa, että joka kerta kun ennustusohjelma suoritetaan, koulutusohjelmaa ei tarvitse suorittaa uudelleen. Koulutusohjelma voi kestää jopa 10 minuuttia / aikakausi vadelmapi.
Liitteenä on koulutusskripti:
Vaihe 3: Pi -kameran ennusteiden toteuttaminen
Seuraava ohjelma on ennuste ja julkaisijan käsikirjoitus.
Ensimmäinen vaihe on ladata malli käyttämällä mallia.load (). Toinen vaihe on iteroida pi -kameran kehykset opencv: n avulla ja muuttaa sitten kehyksen kokoa samaan kokoon kuin harjoitusvaiheessa käytetyt syöttökoot, 32 x 32 pikseliä. Kun tämä on tehty, uusi koon muuttanut kehys viedään mallin läpi käyttäen mallia.predict (), joka tuottaa matriisin, jokainen matriisin elementti on kelluva 0-1, alkuindeksi on sama kuin sen edustama luokka ensimmäinen elementti on luokka yksi ja numero on ennuste varmuudesta siitä, että kuva on tästä luokasta. Esim.
HUOMAUTUS: Jos et käytä robotin puolta. Poista vain rivit:
"tuoda rospy"
def talker (suunta):
message = Merkkijono ()
pub = rospy. Publisher ('robotti', Jono, jonon_koko = 10)
rospy.init_node ('puhuja', anonyymi = totta)
viesti = suunta
rospy.loginfo (viesti)
pub.publish (viesti)"
"puhuja (suunta)"
Liitteenä on Pi -kameran käsikirjoitus.
Vaihe 4: Arduino -robotti
Viimeinen vaihe on robottiohjelman komentosarja.
Tämä on kirjoitettu C ++: lla ja on.ino -tiedosto arduino uno: lle. Ohjelma vaatii ros -kirjaston, joka löytyy kirjastojen hallinnasta ide. Kun tämä on tuotu, on esimerkkitiedostoja, päätin laajentaa led -vilkkutiedostoa, koska tämä tekisi samanlaisen tavoitteen kuin mitä tarvitsin. Ohjelma jatkaa silmukkaa, kunnes virta katkaistaan. Ensinnäkin se kuuntelee aiherobottia, kun se saa komennon kyseisestä aiheesta, sillä on if -lause nähdäkseen mitä komento sanoo. Jos komento jätetään vasemmalle, komentosarja suorittaa käännöksen vasemmalle -menetelmän, jos komento on oikea, se suorittaa käännöksen oikealle -menetelmän ja muuten se suorittaa eteenpäin -menetelmän. Nämä kolme menetelmää ovat hyvin samankaltaisia toistensa kanssa, ne kertovat, että digitaaliset nastat ovat joko LOW (maa) tai 100 (PWM) tätä varten, jotta robotti ei ole liian nopea kertomalla moottorin kuljettajalle, että se antaa vain vähän jännite pois. Näiden lähtöjen järjestys saa robotin kääntymään vasemmalle ja oikealle tai eteenpäin, tämä johtuu moottoreihin menevän jännitteen suunnasta.
Liitteenä on arinoon.ino -komentosarja.
Vaihe 5: Testaus
Kuvat liitteenä, joten projekti alusta loppuun. Ensimmäinen kuva näyttää harjoittelun. Kun tämä on valmis, tulostettu malli näytetään. Kolmas kuva näyttää harjoituskirjoituksen ennusteen. tämä on koulutuksen viimeinen vaihe. Jos katsot kansiota, jossa harjoitusskripti on, kaavio ja malli on tehty. Kaavion pitäisi näyttää kuvalta 4, joka näyttää harjoituksen historian alusta loppuun.
Lopullinen kuva on pi -kameran komentosarjan suorittamisen aikana, ja se on suoravirtaus pi -kamerasta. jokaiselle kehykselle tehdään ennuste ja ennuste tulostetaan päätelaitteeseen. Kehys näyttää, mitä kamera näkee.
Liitteenä yliopiston raporttini tästä hankkeesta. Lue lisätietoja projektista.
Vaihe 6: Kaikki lisätiedostot
Jotkut näistä olivat testattavia tiedostoja, joita tein matkan varrella.
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
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
LED vilkkuu Raspberry Pi: n kanssa GPIO -nastojen käyttäminen Raspberry Pi: ssä: 4 vaihetta
LED vilkkuu Raspberry Pi: n kanssa GPIO -nastojen käyttäminen Raspberry Pi: ssä: Hei kaverit tässä ohjeessa opimme käyttämään Raspberry pi: n GPIO: ta. Jos olet koskaan käyttänyt Arduinoa, luultavasti tiedät, että voimme liittää LED -kytkimen jne. Sen nastoihin ja saada sen toimimaan. anna LED -valon vilkkua tai syötä kytkintä, joten
Raspbianin asentaminen Raspberry Pi 3 B: hen ilman HDMI: tä - Raspberry Pi 3B: n käytön aloittaminen - Raspberry Pi: n asentaminen 3: 6 vaihetta
Raspbianin asentaminen Raspberry Pi 3 B: hen ilman HDMI: tä | Raspberry Pi 3B: n käytön aloittaminen | Raspberry Pi 3: n asentaminen: Kuten jotkut teistä tietävät, Raspberry Pi -tietokoneet ovat aivan mahtavia ja saat koko tietokoneen vain yhdelle pienelle levylle. Raspberry Pi 3 Model B: ssä on neliytiminen 64-bittinen ARM Cortex A53 kellotaajuus 1,2 GHz. Tämä tekee Pi 3: sta noin 50