Základní pipeline Hailo RPi5

26.07.2024 Raspberry Pi #AI #hailo #rpi

Ukázka skriptu v Pythonu pro detekci objektů a jejich segmentaci s využitím procesoru Hailo AI na Raspberry Pi 5.a


Využijeme úložiště, které obsahuje příklady základních kanálů pro platformu RPi5 společnosti Hailo. Příklady demonstrují detekci objektů, odhad lidské pozice a segmentaci instancí. Je vytvořen tak, aby vám umožnil používat tyto aplikace jako základ pro vaše vlastní projekty.

Instalace

Klonujte úložiště

git clone https://github.com/hailo-ai/hailo-rpi5-examples.git

Zadejte adresář úložiště:

cd hailo-rpi5-examples

Konfigurace prostředí

Chcete-li spustit příklady, měli byste se ujistit, že je vaše prostředí správně nastaveno. K získání závislostí Hailo používáme soubor hailo-tappas-core pkgconfig.

Vše můžete nastavit pomocí následujícího skriptu. Tento skript nastaví požadované proměnné prostředí a aktivuje virtuální prostředí Hailo (pokud neexistuje, vytvoří je).

source setup_env.sh

Požadavky Instalace

Ujistěte se, že jste ve virtuálním prostředí a spusťte následující příkaz:

pip install -r requirements.txt

Zdroje ke stažení

./download_resources.sh

Kompilace po zpracování

Chcete-li podporovat používání přeškolených modelů, musíte zkompilovat postproces lokálně. Tento post proces bude sloučen s Hailo TAPPAS v příštím vydání. Pro kompilaci post procesu spusťte následující skript:

./compile_postprocess.sh

Struktura aplikace

Uživatelem definovaná datová třída (user_app_callback_class)

Tato uživatelsky definovaná třída je předána jako vstup do funkce zpětného volání, která běží na výstupu kanálu. Slouží pro komunikaci mezi hlavní aplikací a funkcí zpětného volání. Rozšiřuje se hailo_rpi_common::app_callback_classa lze jej přizpůsobit pomocí dalších proměnných a metod specifických pro danou aplikaci.

Funkce zpětného volání aplikace (app_callback)

Zde byste měli přidat svůj kód. Uživatelem definovaná funkce, která zpracovává každý snímek v kanálu. Volá se z prvku „identity_callback“ v kanálu, který je umístěn po odvození sítě a následném zpracování. Vyrovnávací paměť GStreamer předaná jako vstup do této funkce zahrnuje síťový výstup jako Hailo Metadata a samotný rámec. Každý příklad ukazuje, jak analyzovat konkrétní metadata pro daný úkol. Další informace o objektech Hailo Metadata naleznete v Hailo Objects API v dokumentaci TAPPAS.

Třída aplikací GStreamer (GStreamerApp)

Pro použití základních potrubí nejsou potřeba žádné změny. Tato třída nastavuje kanál GStreamer a zpracovává události a zpětná volání, rozšiřuje hailo_rpi_common::GStreamerApp. Aplikace mohou upravovat parametry sítě a potrubí přetížením funkce get_pipeline_string. Další podrobnosti o kanálech a prvcích TAPPAS naleznete v dokumentaci TAPPAS.

Příklad detekce

detection 

Tento příklad ukazuje detekci objektů. Jako výchozí používá model YOLOv6n. Podporuje také modely yolov8s a yolox_s_leaky. Používá vrstvu NMS (Non-Maximum Suppression) Hailo jako součást souboru HEF, takže všechny detekční sítě, které jsou kompilovány s NMS, lze použít se stejným kódem.

Ke spuštění příkladu použijte:

python basic_pipelines/detection.py --input resources/detection0.mp4

Pro ukončení aplikace stiskněte 'Ctrl+C'.

Pro další možnosti spusťte:

python basic_pipelines/detection.py --help

Příklad odhadu pozice

pose_estimation 

Tento příklad ukazuje odhad lidské pozice. Používá model yolov8s_pose.

Ke spuštění příkladu použijte:

python basic_pipelines/pose_estimation.py --input resources/detection0.mp4

Pro ukončení aplikace stiskněte 'Ctrl+C'.

Pro další možnosti spusťte:

python basic_pipelines/pose_estimation.py --help

Příklad segmentace instance

instance_segmentation 

Tento příklad ukazuje segmentaci instance. Používá model yolov5n_seg.

Ke spuštění příkladu použijte:

python basic_pipelines/instance_segmentation.py --input resources/detection0.mp4

Pro ukončení aplikace stiskněte 'Ctrl+C'.

Pro další možnosti spusťte:

python basic_pipelines/instance_segmentation.py --help

Běh s různými vstupními parametry

Tyto příklady běží standardně s USB kamerou (/dev/video0). Vstupní zdroj můžete změnit pomocí parametru --input. Chcete-li spustit s kamerou Raspberry Pi, použijte --input rpi. Zde je několik příkladů:

python basic_pipelines/detection.py --input /dev/video2
python basic_pipelines/detection.py --input rpi
python basic_pipelines/detection.py --input resources/detection0.mp4

Poznámka: U USB kamery není zaručeno, že je /dev/video0. Můžete zkontrolovat, která video zařízení jsou k dispozici spuštěním:

ls /dev/video*

Funkčnost kamery můžete otestovat spuštěním:

ffplay -f v4l2 /dev/video0

Pokud se zobrazí chyba, zkuste jiné zařízení, např. /dev/video2. (Pravděpodobně to bude sudé číslo.)

Použití vyrovnávací paměti snímků:

Pro příklad použití vyrovnávací paměti snímků přidejte --use-framepříznak. Upozorňujeme, že vyjmutí snímku videa a jeho zobrazení může zpomalit aplikaci. Způsob implementace není optimalizován a je uveden jako jednoduchý příklad. Existuje možnost zapisovat do vyrovnávací paměti a nahradit starou vyrovnávací paměť v potrubí, ale to není efektivní.

Tisk snímkové frekvence:

Chcete-li vytisknout snímkovou frekvenci, přidejte --print-fpspříznak. Tím se vytiskne snímková frekvence na terminál a do okna výstupu videa.

Vyprázdnění grafu pipline:

To je užitečné pro ladění a pochopení potrubí. Chcete-li vypsat graf potrubí do tečkového souboru, přidejte --dump-dot příznak. Tím se vytvoří soubor s názvem pipeline.dot v adresáři basic_pipelines. Potrubí pak můžete vizualizovat pomocí nástroje jako je Graphviz. Chcete-li jej nainstalovat, spusťte:

sudo apt install graphviz

Zde je úplný příklad spuštění příkladu detekce s --dump-dot příznakem:

python basic_pipelines/detection.py --dump-dot
# To visulaize the pipeline run:
dot -Tx11 basic_pipelines/pipeline.dot &
# To save the pipeline as a png run:
dot -Tpng basic_pipelines/pipeline.dot -o pipeline.png

Zdroj:

https://github.com/hailo-ai/hailo-rpi5-examples/blob/main/doc/basic-pipelines.md#running-with-different-input-sources