Përmbajtje:
- Hapi 1: Kërkesat
- Hapi 2: Trajnimi i të dhënave
- Hapi 3: Zbatimi i Parashikimeve të Kamerave Pi
- Hapi 4: Roboti Arduino
- Hapi 5: Testimi
- Hapi 6: Të gjithë skedarët shtesë
Video: Robot Raspberry Pi 4 Njohja e Shenjave të Trafikut: 6 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:16
Ky udhëzues bazohet në projektin tim universitar. Qëllimi ishte krijimi i një sistemi ku një rrjet nervor analizon një imazh dhe më pas bazuar në njohjen do t'i thotë një roboti arduino të lëvizë përmes Ros.
Për shembull nëse njihet shenja e kthesës në të djathtë atëherë roboti do të kthehet djathtas, nëse njihet shenja e kthesës majtas atëherë roboti do të kthehet majtas, nëse asnjëra nuk njihet atëherë roboti do të vazhdojë përpara. Baza e të dhënave që do të përdoret është njohja zyrtare e shenjave të trafikut nga INI (2019) (Institut Fur Neuroinformatik), kjo grup i të dhënave ka 43 klasa megjithatë nevojiten vetëm dy; 00033 dhe 00034 dosje në grupin e të dhënave janë shenja të kthesës majtas dhe djathtas.
Hapi 1: Kërkesat
Kërkesat për këtë projekt janë si më poshtë:
Një robot arduino. (në thelb një arduino uno, një shofer motori dhe motorë) (nuk nevojitet nëse nuk përdorni një robot)
Një mjedër pi 4.
Një kamerë pi.
Softueri i kërkuar:
Python 3.
CV e hapur 4.
Rrjedha e tensionit
arduino IDE (nuk nevojitet nëse nuk përdorni robot)
Ros (nuk nevojitet nëse nuk përdorni robot)
Cilado qoftë ideja juaj e preferuar e pitonit (Për mjedrën pi, unë përdor Thonny).
Për të konfiguruar OpenCV dhe Tensorflow, ndiqni udhëzimet e Adrianit. Lidhja:
Unë rekomandoj të shikoni sa më shumë mësime të tij, ato janë vërtet interesante dhe janë të dobishme si për fillestarët ashtu edhe për ndërmjetësit.
Hapi 2: Trajnimi i të dhënave
Skenari i trenit është krijuar për të hyrë në grupin e të dhënave i cili përpilon rreth 50, 000 imazhe nga 43 klasa. Skenari është shkruar në python, duke përdorur një sërë bibliotekash: os - kjo është për lidhjen e shkrimit python me drejtorinë e duhur ku ndodhet grupi i të dhënave. Matplotlib - kjo është për shfaqjen e të dhënave nga modeli i trajnimit. Tensorflow dhe keras - këto janë bibliotekat e përdorura për të krijuar modelin e rrjetit nervor artificial, ato përdoren për të hartuar modelin. Numpy - kjo bibliotekë është për shndërrimin e imazheve në një grup i cili më pas mund të vendoset përmes modelit për të marrë një parashikim.
Skripti i bashkangjitur është kodi piton për të bërë një model nga grupi i të dhënave. Kjo konsiston në 2D konvolucionale me një hyrje (5, 5) dhe një aktivizim të refuzimit pastaj bashkimit, pasi kjo të bëhet hyrja kalon përmes një konvolucioni tjetër me një hyrje (3, 3) me të njëjtin aktivizim dhe bashkim. Kjo ndodh për herë të fundit para se të rrafshohet dhe pastaj dendësia aplikohet në sasinë e klasave që ka, në këtë rast 43.
Hapi tjetër ishte përpilimi i modelit. Kjo është pjesa që vendos optimizuesin, një sgd ishte më e përshtatshme pasi që kjo ishte e ngjashme me optimizuesin e përdorur në detyrën 1. Sgd qëndron për zbritjen e gradientit stokastik. Gjithashtu brenda përpiluesit humbja duhet të vendoset, zgjedhja e një humbje të rrallë_kategorike_krosentropike është përshtatja më e mirë meqenëse kategoritë janë të plota dhe modeli do të nxjerrë një parashikim për secilën klasë si një notim midis 0 dhe 1. 1 duke qenë 100% saktësi.
Pasi përpiluesi të jetë i plotë, një gjenerator duhet të aplikohet që modeli të fillojë përpunimin e hyrjeve të imazhit. Gjeneratori përbëhet nga pjesë të shumta: seti i trajnimit - kjo është lidhja me grupin e të dhënave të përdorur për trajnim, hapat_per_epoch - ky është numri i hapave për epokë që kërkohen, epoka - këto janë sa herë programi do të përsëritet përmes një grupi të plotë të të dhënave, validation_data - kjo është lidhja me grupin e të dhënave të përdorur për vlefshmëri, hapat e validimit - numri i hapave të përdorur për validim, validimi ndodh në fund të çdo epoke.
Në përgjithësi, një fshirje e plotë e të gjithë grupit të të dhënave duhet të jetë e plotë për një epokë. Prandaj, për shembull, një grup i të dhënave prej 1024 imazhe do të kërkojë: Madhësia e serisë = 32, Hapat për epokë = 32, epokat = 1. Çdo hap përfshin të gjithë madhësinë e serisë, kështu që me një madhësi të serisë prej 32 hapat do të jenë 32. Nga ana tjetër është mirë që të keni një madhësi më të madhe të serisë sesa numri i klasave, kjo ndodh sepse nëse madhësia e serisë është më e vogël atëherë secili hap nuk mund të përfshijë një imazh nga secila klasë.
Pasi modeli të ketë përfunduar trajnimin, duke përdorur matplotlib programi do të bëjë një grafik të rezultateve, kjo tregon historinë e trajnimit nga fillimi në fund. Grafiku përbëhet nga saktësia, saktësia e vlefshmërisë, humbja dhe humbja e vlefshmërisë, kjo është e ndarë në epokë për të treguar sesi përparoi trajnimi. Faza përfundimtare është të ruani modelin si një skedar.h5 i cili mund të arrihet më vonë për procesin e parashikimit. Ruajtja e modelit do të thotë që çdo herë që programi i parashikimit të ekzekutohet programi i trajnimit nuk ka nevojë të ekzekutohet përsëri. Programi i trajnimit mund të zgjasë deri në 10 minuta për një epokë në një pi mjedër.
Bashkangjitur është skenari i Trajnimit:
Hapi 3: Zbatimi i Parashikimeve të Kamerave Pi
Programi tjetër është skenari i parashikimit dhe botuesit.
Faza e parë është ngarkimi i modelit duke përdorur model.load (). Faza e dytë është përsëritja përmes kornizave nga kamera pi duke përdorur opencv dhe më pas ndryshimi i madhësisë së kornizës në të njëjtën madhësi me madhësitë e dhëna të përdorura në fazën e trajnimit, 32 x 32 piksele. Pasi të bëhet kjo, korniza e re e ndryshuar vendoset përmes modelit duke përdorur model.predict () e cila nxjerr një matricë, secili element i matricës është një notim nga 0 në 1, indeksi i elementit është i njëjtë me klasën që përfaqëson, prandaj elementi i parë është klasa një dhe numri është parashikimi i sigurisë së imazhit që është nga ajo klasë. P.sh.
SHENIM: Nëse nuk përdorni anën e robotit. Thjesht hiqni rreshtat:
"importo rospy"
def folës (drejtim):
mesazh = String ()
pub = rospy. Publisher ('robot', String, queue_size = 10)
rospy.init_node ('folës', anonim = E vërtetë)
mesazh = drejtim
rospy.loginfo (mesazh)
pub.publish (mesazh)"
"folës (drejtim)"
Bashkangjitur është skenari i kamerës Pi.
Hapi 4: Roboti Arduino
Hapi i fundit është skripti i programit robot.
Kjo është shkruar në C ++ dhe është një skedar.ino për arduino uno. Programi kërkon bibliotekën ros e cila mund të gjendet në menaxherin e bibliotekave brenda ide. Pasi të jetë importuar, ka skedarë shembull, kam zgjedhur të zgjeroj skedarin led blink pasi kjo do të bënte një objektiv të ngjashëm me atë që më duhej. Programi vazhdon të lakojë derisa fuqia të shkëputet, së pari dëgjon robotin e temës, kur kap një komandë nga ajo temë do të ketë një deklaratë if për të parë atë që thotë komanda. Nëse komanda lihet atëherë skripti përdor metodën e kthesës majtas, nëse komanda është e djathtë atëherë do të ekzekutojë metodën e kthesës djathtas dhe përndryshe do të ekzekutojë metodën përpara. Këto tri metoda janë shumë të ngjashme me njëra -tjetrën, ato thonë që kunjat dixhitale të jenë LOW (tokë) ose 100 (PWM) kjo është për të bërë që roboti të mos jetë shumë i shpejtë duke i thënë shoferit të motorit që të lejojë vetëm pak tensioni jashtë. Rendi i këtyre daljeve është ajo që e bën robotin të kthehet majtas dhe djathtas ose të shkojë përpara, kjo është për shkak të orientimit të tensionit që shkon te motorët.
Bashkangjitur është shkrimi.ino për arduino.
Hapi 5: Testimi
Imazhet janë bashkangjitur kështu që projekti nga fillimi në fund. Imazhi i parë tregon trajnimin në proces. Pasi të ketë përfunduar, shfaqet një printim nga modeli i bërë. Imazhi i tretë tregon një parashikim nga skenari i trajnimit. kjo është faza e fundit e skenarit të trajnimit. Nëse shikoni në dosjen ku është skripti i trajnimit, është bërë një grafik dhe një model. Grafiku duhet të duket si imazhi 4 këtu, kjo tregon historinë e trajnimit nga fillimi në fund.
Imazhi përfundimtar është gjatë ekzekutimit të skriptit të kamerës pi, është një transmetim i drejtpërdrejtë nga kamera pi. bëhet një parashikim në secilën kornizë dhe parashikimi printohet në terminal. Korniza tregon atë që kamera po sheh.
Bashkangjitur është raporti im i Universitetit për këtë projekt. Ju lutemi lexoni për më shumë detaje të projektit.
Hapi 6: Të gjithë skedarët shtesë
Disa nga këto ishin testimi i skedarëve që bëra gjatë rrugës.
Recommended:
Asambleja e shenjave LED RGB në miniaturë (Ngjyra e ngurtë): 4 hapa
Asamble Miniaturë e Shenjës LED (Ngjyra e Ngurtë): Në këtë Udhëzues do të doja të tregoja se si e ndërtova këtë shenjë LED për përdorim në ngjarje të ndryshme. Më pëlqejnë projektet që ndriçojnë dhe kam një interes të fundit për të bërë shenja ndriçimi për konventat dhe panairet ku ne kemi një qëndrim për të demonstruar disa
Një server i shenjave dixhitale në një mjedër Pi: 8 hapa
Një server i shenjave dixhitale në një Raspberry Pi: Një udhëzues absolut për fillestarët në Korsikë në një Ras Raspberry PI Shenjat dixhitale janë kudo. I shihni në aeroporte, qendra tregtare, dyqane dhe madje edhe në qoshet e rrugëve. Ju nuk keni nevojë për shumë pajisje të shtrenjta me porosi për të ndërtuar sistemin tuaj të shenjës dixhitale
Njohja e imazhit me TensorFlow në Raspberry Pi: 6 hapa
Njohja e imazhit me TensorFlow në Raspberry Pi: Google TensorFlow është një Bibliotekë e softuerit me burim të hapur për llogaritjen numerike duke përdorur grafikët e rrjedhës së të dhënave. Përdoret nga Google në fushat e ndryshme të të mësuarit të makinerisë dhe teknologjive të të mësuarit të thellë. TensorFlow u krijua fillimisht nga Google Brai
Tabela e Shenjave të Animuara LED pa Programim: 3 Hapa
Tabela e Shenjave të Animuara LED Pa Programim: shtë një projekt elektronik pa programim ose ndonjë mikrokontrollues që ju mund të bëni bordin tuaj të personalizuar të fjalës tuaj të personalizuar duke përdorur këtë qark në këtë projekt unë kam përdorur rezistencë ndërrimi IC 74ls164 dhe IC 555 për animacion. ju mund të bëni bordin led me
Si të bëni qarqe me një prestar të shenjave Roland CAMM: 6 hapa
Si të bëni qarqe me një prestar Roland CAMM: Gdhendja e PCB -ve në shtëpi krijon shumë mbeturina kimike toksike, por mund të jetë mirë të mos duhet të dërgoni për një PCB. Ky udhëzues ka të bëjë me mënyrën e përdorimit të një prestar vinyl Roland për të bërë një qark të prerë vinyl. Materialet e nevojshme: CAMM-1 Servo GX