Obsah:

Robot na rozpoznávanie dopravných značiek Raspberry Pi 4: 6 krokov
Robot na rozpoznávanie dopravných značiek Raspberry Pi 4: 6 krokov

Video: Robot na rozpoznávanie dopravných značiek Raspberry Pi 4: 6 krokov

Video: Robot na rozpoznávanie dopravných značiek Raspberry Pi 4: 6 krokov
Video: Высокая плотность 2022 2024, November
Anonim
Robot na rozpoznávanie dopravných značiek Raspberry Pi 4
Robot na rozpoznávanie dopravných značiek Raspberry Pi 4

Tento pokyn vychádza z môjho univerzitného projektu. Cieľom bolo vytvoriť systém, kde neurónová sieť analyzuje obraz a potom na základe rozpoznania povie robotovi arduino, aby sa pohyboval cez Ros.

Napríklad, ak je rozpoznaná značka odbočenia doprava, robot zabočí doprava, ak je rozpoznaná značka odbočenia doľava, robot zabočí doľava, ak nie sú rozpoznaní žiadni, robot bude pokračovať vpred. Súbor údajov, ktorý sa použije, je oficiálne rozpoznanie dopravných značiek od INI (2019) (Institut Fur Neuroinformatik), tento súbor údajov má 43 tried, sú však potrebné iba dve; Priečinky 00033 a 00034 v množine údajov sú značky odbočenia vľavo a vpravo.

Krok 1: Požiadavky

Požiadavky
Požiadavky
Požiadavky
Požiadavky
Požiadavky
Požiadavky

Požiadavky na tento projekt sú nasledujúce:

Arduino robot. (v zásade arduino uno, ovládač motora a motory) (nie je potrebné, ak nepoužívate robota)

Malinová pi 4.

Pi kamera.

Potrebný softvér:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (nie je potrebné, ak nepoužívate robota)

Ros (nie je potrebné, ak nepoužívate robota)

Nech je váš obľúbený ideál pythonu akýkoľvek (Na malinovom pi používam Thonny).

Pri nastavovaní OpenCV a Tensorflow postupujte podľa pokynov Adriana. Odkaz:

Odporúčam pozrieť si čo najviac jeho návodov, sú skutočne zaujímavé a sú užitočné ako pre začiatočníkov, tak aj pre mierne pokročilých.

Krok 2: Školenie údajov

Vlakový skript je navrhnutý tak, aby mal prístup k množine údajov, ktorá obsahuje asi 50 000 obrázkov zo 43 tried. Skript je napísaný v pythone pomocou rôznych knižníc: os - slúži na prepojenie skriptu python so správnym adresárom, v ktorom sa nachádza množina údajov. Matplotlib - slúži na zobrazenie údajov z tréningového modelu. Tensorflow a keras - to sú knižnice používané na vytvorenie modelu umelej neurónovej siete, slúžia na návrh modelu. Numpy - táto knižnica slúži na premenu obrázkov na pole, ktoré je potom možné vložiť do modelu na získanie predpovede.

Pripojený skript je kód pythonu na vytvorenie modelu z množiny údajov. Toto pozostáva z konvolučného 2D so vstupom (5, 5) a aktiváciou relu a potom združovaním, akonáhle sa to stane, vstup prejde ďalšou konvolúciou so vstupom (3, 3) s rovnakou aktiváciou a združovaním. To sa stane poslednýkrát pred sploštením a potom sa hustota aplikuje na počet tried, v tomto prípade 43.

Ďalším krokom bolo zostavenie modelu. Toto je časť, ktorá nastavuje optimalizátor, a sgd bol najvhodnejší, pretože bol podobný optimalizátoru použitému v úlohe 1. Sgd znamená Stochastický gradientový zostup. Tiež v kompilátore je potrebné nastaviť stratu, pričom voľba sparse_categorical_crossentropy je najvhodnejšia, pretože kategórie sú celé čísla a model vydá predikciu pre každú triedu ako float medzi 0 a 1,1 so 100% presnosťou.

Hneď ako je kompilátor dokončený, je potrebné použiť generátor, aby model mohol začať spracovávať obrazové vstupy. Generátor sa skladá z niekoľkých častí: training_set - toto je odkaz na množinu údajov používanú na školenie, steps_per_epoch - to je počet požadovaných krokov za epochu, epochy - to sú koľkokrát program bude iterovať prostredníctvom celého súboru údajov., validation_data - toto je odkaz na množinu údajov použitú na validáciu, validation_steps - počet krokov použitých na validáciu, k validácii dochádza na konci každej epochy.

Spravidla je potrebné úplné vymazanie celého súboru údajov za epochu. Preto napríklad súbor údajov s 1 024 obrázkami bude vyžadovať: Veľkosť dávky = 32, počet krokov na epochu = 32, epochy = 1. Každý krok zahŕňa celú veľkosť dávky, takže pri veľkosti dávky 32 bude krokov 32. Na druhej strane Je lepšie mať väčšiu dávku ako počet tried, pretože ak je veľkosť dávky menšia, nemôže každý krok obsahovať obrázok z každej triedy.

Akonáhle model dokončí tréning, pomocou programu matplotlib program vytvorí graf výstupov, ktorý ukazuje históriu školenia od začiatku do konca. Graf pozostáva z presnosti, presnosti validácie, straty a straty validácie, ktoré sú rozdelené podľa epochy a ukazujú, ako tréning prebiehal. Poslednou fázou je uloženie modelu ako súboru.h5, ku ktorému je možné neskôr pristupovať v procese predikcie. Uloženie modelu znamená, že pri každom spustení predikčného programu nie je potrebné znova spustiť tréningový program. Tréningový program môže na malinovom pi trvať každú epochu až 10 minút.

V prílohe je školiaci skript:

Krok 3: Implementácia predpovedí kamery Pi

Ďalším programom je predikcia a skript vydavateľa.

Prvou fázou je načítanie modelu pomocou modelu.load (). Druhou fázou je iterácia rámcov z pi kamery pomocou opencv a potom zmena veľkosti rámca na rovnakú veľkosť ako vstupné veľkosti použité v tréningovej fáze, 32 x 32 pixelov. Akonáhle je to hotové, nový rámec so zmenenou veľkosťou sa vloží do modelu pomocou modelu.predict (), ktorý vydáva maticu, každý prvok matice je pohyblivý od 0 do 1, index prvku je rovnaký ako trieda, ktorú predstavuje, a preto prvý prvok je trieda jedna a číslo je predpoveďou istoty obrazu, ktorý je z tejto triedy. Napr.

POZNÁMKA: Ak nepoužívate stranu robota. Stačí odstrániť riadky:

„import rospy“

def talker (smer):

message = String ()

pub = rospy. Publisher ('robot', reťazec, veľkosť_fronty = 10)

rospy.init_node ('talker', anonymous = True)

správa = smer

rospy.loginfo (správa)

pub.publish (správa)"

„hovorca (smer)“

V prílohe je skript kamery Pi.

Krok 4: Robot Arduino

Posledným krokom je skript programu robota.

Toto je napísané v C ++ a je to súbor.ino pre arduino uno. Program vyžaduje knižnicu ros, ktorú nájdete v správcovi knižníc v rámci ide. Akonáhle je tento importovaný, existujú ukážkové súbory, rozhodol som sa rozšíriť na blink súbor LED, pretože by to robilo podobný cieľ ako to, čo som potreboval. Program pokračuje v cykle, kým nie je odpojené napájanie, najskôr počúva tematického robota, keď zachytí príkaz z tejto témy, bude mať príkaz if, aby zistil, čo príkaz hovorí. Ak je príkaz ponechaný, skript spustí metódu odbočenia vľavo, ak je príkaz správny, potom spustí metódu odbočenia doprava a inak spustí metódu preposlania. Tieto tri metódy sú navzájom veľmi podobné. Hovoria, že digitálne kolíky sú buď NÍZKE (uzemnené) alebo 100 (PWM), aby robot nebol príliš rýchly tým, že povie vodičovi motora, aby nechal len trochu napätie von. Poradie týchto výstupov je to, čo spôsobuje, že sa robot otáča vľavo a vpravo alebo ide dopredu, je to kvôli orientácii napätia prechádzajúceho do motorov.

V prílohe je skript.ino pre arduino.

Krok 5: Testovanie

Testovanie
Testovanie
Testovanie
Testovanie
Testovanie
Testovanie

Obrázky sú priložené, takže projekt od začiatku do konca. Prvý obrázok ukazuje prebiehajúci tréning. Akonáhle je to dokončené, zobrazí sa vytlačený model. Tretí obrázok zobrazuje predpoveď z cvičného skriptu. toto je posledná fáza školiaceho scenára. Ak sa pozriete do priečinka, v ktorom sa nachádza školiaci skript, bol vytvorený graf a model. Tu by mal graf vyzerať ako na obrázku 4, ktorý ukazuje históriu školenia od začiatku do konca.

Konečný obrázok je pri spustení skriptu pí kamery, je to priamy prenos z pi kamery. na každom rámci sa vykoná predpoveď a predpoveď sa vytlačí v termináli. Rámček ukazuje, čo kamera vidí.

V prílohe je moja univerzitná správa o tomto projekte. Prečítajte si podrobnejšie informácie o projekte.

Krok 6: Všetky ďalšie súbory

Všetky ďalšie súbory
Všetky ďalšie súbory

Niektoré z nich boli testovacie súbory, ktoré som vytvoril po ceste.

Odporúča: