Obsah:

Robot pro rozpoznávání dopravních značek Raspberry Pi 4: 6 kroků
Robot pro rozpoznávání dopravních značek Raspberry Pi 4: 6 kroků

Video: Robot pro rozpoznávání dopravních značek Raspberry Pi 4: 6 kroků

Video: Robot pro rozpoznávání dopravních značek Raspberry Pi 4: 6 kroků
Video: 02 - Programování pro Google Glass (David Vávra, Inmite) 2024, Listopad
Anonim
Robot pro rozpoznávání dopravních značek Raspberry Pi 4
Robot pro rozpoznávání dopravních značek Raspberry Pi 4

Tento instruktáž vychází z mého univerzitního projektu. Cílem bylo vytvořit systém, kde neurální síť analyzuje obraz a poté na základě rozpoznání řekne robotovi arduino, aby se pohyboval přes Ros.

Pokud je například rozpoznána značka odbočení vpravo, robot se otočí doprava, pokud je rozpoznána značka odbočení vlevo, robot se otočí doleva, pokud není rozpoznán žádný, robot bude pokračovat vpřed. Datová sada, která bude použita, je oficiální rozpoznávání dopravních značek z INI (2019) (Institut Fur Neuroinformatik), tato datová sada má 43 tříd, jsou však zapotřebí pouze dvě; Složky 00033 a 00034 v datové sadě jsou odbočovací značky vlevo a vpravo.

Krok 1: Požadavky

Požadavky
Požadavky
Požadavky
Požadavky
Požadavky
Požadavky

Požadavky pro tento projekt jsou následující:

Arduino robot. (v podstatě arduino uno, ovladač motoru a motory) (není potřeba, pokud nepoužíváte robota)

Malinová pi 4.

Pi kamera.

Potřebný software:

Python 3.

OpenCV 4.

Tensorflow.

arduino IDE (není nutné, pokud nepoužíváte robota)

Ros (není potřeba, pokud nepoužíváte robota)

Ať už je váš oblíbený ideál pythonu jakýkoli (Na malinovém pi používám Thonny).

Chcete -li nastavit OpenCV a Tensorflow, postupujte podle pokynů Adriana. Odkaz:

Doporučuji podívat se na co nejvíce jeho tutoriálů, jsou opravdu zajímavé a oba jsou užitečné pro začátečníky i mírně pokročilé.

Krok 2: Školení dat

Vlakový skript je navržen tak, aby měl přístup k datové sadě, která sestavuje přibližně 50 000 obrázků ze 43 tříd. Skript je napsán v pythonu pomocí různých knihoven: os - slouží k propojení skriptu python se správným adresářem, kde se nachází datová sada. Matplotlib - slouží k zobrazení dat z tréninkového modelu. Tensorflow a keras - to jsou knihovny používané k vytvoření modelu umělé neuronové sítě, slouží k návrhu modelu. Numpy - tato knihovna slouží k přeměně obrazů na pole, které lze poté vložit do modelu a získat tak předpověď.

Přiložený skript je kód pythonu pro vytvoření modelu z datové sady. To se skládá z konvolučního 2D se vstupem (5, 5) a aktivací relu a poté sdružováním, jakmile je toto provedeno, vstup prochází jinou konvolucí se vstupem (3, 3) se stejnou aktivací a sdružováním. K tomu dochází naposledy, než se zploští a poté se hustota aplikuje na počet tříd, v tomto případě 43.

Dalším krokem bylo sestavení modelu. Toto je část, která nastavuje optimalizátor, a sgd byl nejvhodnější, protože to bylo podobné optimalizátoru použitému v úkolu 1. Sgd znamená Stochastický gradientový sestup. Také v kompilátoru je třeba nastavit ztrátu, přičemž volba sparse_categorical_crossentropy loss je nejvhodnější, protože kategorie jsou celá čísla a model bude vydávat předpověď pro každou třídu jako float mezi 0 a 1. 1 se 100% přesností.

Jakmile je kompilátor dokončen, je třeba použít generátor, aby model mohl začít zpracovávat obrazové vstupy. Generátor se skládá z několika částí: training_set - toto je odkaz na datovou sadu používanou pro trénink, steps_per_epoch - počet požadovaných kroků za epochu, epochy - kolikrát bude program iterovat prostřednictvím celé sady dat, validation_data - toto je odkaz na datovou sadu použitou pro validaci, validation_steps - počet kroků použitých pro validaci, validace probíhá na konci každé epochy.

Obecně platí, že úplné vymazání celé datové sady musí být dokončeno za epochu. Proto například datová sada 1024 obrázků bude vyžadovat: Velikost dávky = 32, Kroky na epochu = 32, epochy = 1. Každý krok zahrnuje celou velikost dávky, takže při velikosti dávky 32 bude kroků 32. Na druhé straně ruka, je nejlepší mít větší velikost dávky než počet tříd, je to proto, že pokud je velikost dávky menší, pak každý krok nemůže obsahovat obrázek z každé třídy.

Jakmile model dokončí trénink, pomocí programu matplotlib program vytvoří graf výstupů, který ukazuje historii školení od začátku do konce. Graf se skládá z přesnosti, přesnosti validace, ztráty a ztráty validace, která je rozdělena podle epochy, aby ukázala, jak trénink postupoval. Poslední fází je uložení modelu jako souboru.h5, ke kterému lze později v procesu predikce přistupovat. Uložení modelu znamená, že při každém spuštění predikčního programu nemusí být tréninkový program znovu spuštěn. Tréninkový program může trvat až 10 minut za epochu na malinovém pi.

V příloze je školicí skript:

Krok 3: Implementace předpovědí Pi kamery

Dalším programem je skript predikce a vydavatele.

První fází je načtení modelu pomocí model.load (). Druhou fází je iterace snímků z pi kamery pomocí opencv a poté změna velikosti rámečku na stejnou velikost jako vstupní velikosti použité ve fázi tréninku, 32 x 32 pixelů. Jakmile je toto provedeno, nový rámeček se změněnou velikostí je vložen do modelu pomocí modelu.predict (), který vydává matici, každý prvek matice je plovoucí od 0 do 1, index prvku je stejný jako třída, kterou představuje, proto první prvek je třída jedna a číslo je předpověď jistoty obrazu, který je z této třídy. Např.

POZNÁMKA: Pokud nepoužíváte stranu robota. Stačí odstranit řádky:

"import rospy"

def talker (směr):

message = String ()

pub = rospy. Publisher ('robot', String, queue_size = 10)

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

zpráva = směr

rospy.loginfo (zpráva)

pub.publish (zpráva)"

"mluvčí (směr)"

V příloze je skript kamery Pi.

Krok 4: Robot Arduino

Posledním krokem je skript programu robota.

Toto je napsáno v C ++ a je to soubor.ino pro arduino uno. Program vyžaduje knihovnu ros, kterou najdete ve správci knihoven v rámci ide. Jakmile je toto importováno, existují ukázkové soubory, rozhodl jsem se rozšířit soubor blinků LED, protože by to mělo podobný cíl, jaký jsem potřeboval. Program pokračuje ve smyčce, dokud není odpojeno napájení, nejprve poslouchá tematického robota, když zachytí příkaz z tohoto tématu, bude mít příkaz if, aby viděl, co příkaz říká. Pokud je příkaz vlevo, skript spustí metodu odbočení doleva, pokud je příkaz správný, spustí metodu odbočení vpravo a jinak spustí metodu předávání. Tyto tři metody jsou si navzájem velmi podobné, říkají, že digitální piny jsou buď NÍZKÉ (pozemní) nebo 100 (PWM), aby robot nebyl příliš rychlý tím, že řekne řidiči motoru, aby nechal jen trochu napětí. Pořadí těchto výstupů je to, co přiměje robota otočit se doleva a doprava nebo jít dopředu, je to kvůli orientaci napětí procházejícího do motorů.

V příloze je skript.ino pro arduino.

Krok 5: Testování

Testování
Testování
Testování
Testování
Testování
Testování

Obrázky připojené, takže projekt od začátku do konce. První obrázek ukazuje probíhající školení. Po dokončení se zobrazí vytištěný model. Třetí obrázek ukazuje předpověď z tréninkového skriptu. toto je poslední fáze tréninkového skriptu. Pokud se podíváte do složky, ve které je tréninkový skript, byl vytvořen graf a model. Graf by zde měl vypadat jako obrázek 4, který ukazuje historii tréninku od začátku do konce.

Konečný obrázek je při spuštění skriptu pi kamery, je to živý přenos z pi kamery. na každém snímku se provede predikce a předpověď se vytiskne v terminálu. Rámeček ukazuje, co kamera vidí.

V příloze je moje univerzitní zpráva k tomuto projektu. Přečtěte si prosím další podrobnosti o projektu.

Krok 6: Všechny další soubory

Všechny další soubory
Všechny další soubory

Některé z nich byly testovací soubory, které jsem vytvořil po cestě.

Doporučuje: