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
a lze jej přizpůsobit pomocí dalších proměnných a metod specifických pro danou aplikaci.hailo_rpi_common::app_callback_class
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
. Aplikace mohou upravovat parametry sítě a potrubí přetížením funkce hailo_rpi_common::GStreamerApp
. Další podrobnosti o kanálech a prvcích TAPPAS naleznete v dokumentaci TAPPAS.get_pipeline_string
Příklad detekce
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
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
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