Obsah:

Počítání objektů Raspberry Pi: 5 kroků
Počítání objektů Raspberry Pi: 5 kroků

Video: Počítání objektů Raspberry Pi: 5 kroků

Video: Počítání objektů Raspberry Pi: 5 kroků
Video: Arduino návody | Raspberry Pi: Úvod a výběr desky 2024, Listopad
Anonim
Počítání objektů Raspberry Pi
Počítání objektů Raspberry Pi

Počítačové vidění je bezpochyby fantastická věc! Díky tomu počítač získává schopnost „vidět“a lépe vnímat okolí, což umožňuje vývoj komplexních, užitečných a skvělých aplikací. Díky vývoji počítačového vidění jsou aplikace, jako je detekce a rozpoznávání obličejů, sledování objektů a detekce objektů, stále častěji součástí našich každodenních činností.

Vzhledem k tomu, jak pokročilé a dostupné jsou rámce a nástroje počítačového vidění, aplikace popsaná v tomto článku se dobře hodí: použití jednoduchého Raspberry PI a bezplatného a open-source rámce počítačového vidění s názvem OpenCV pro počítání objektů v pohybu, přesněji kolik objekty vstupují a vystupují z určité sledované zóny.

Krok 1: Zesílení: Jak lze v toku obrázků detekovat pohyb objektu?

Čím hlouběji: Jak lze v toku obrázků detekovat pohyb objektu?
Čím hlouběji: Jak lze v toku obrázků detekovat pohyb objektu?

Nyní je čas se hlouběji seznámit se zpracováním obrázků:

jak získat nějaké obrázky z webové kamery a zjistit, že se tam něco přesunulo

Skládá se z pěti kroků:

Krok 1: Chcete -li zvýraznit předmět v pohybu

Jak je definováno v klasické fyzice, je nutná reference, abychom zjistili, že se něco pohybuje nebo pokud stojí na místě. Tady, abychom určili, že se něco pohnulo, je to skoro stejné: každý jednotlivý zachycený snímek z webové kamery bude porovnán s referenčním rámcem. Pokud je něco jinak, něco bylo přesunuto. Je to jednoduché, jak to zní.

Tento referenční rámec musí být zachycen v nejdokonalejších podmínkách (například nic se nepohybuje). Ve světě zpracování obrazu toto srovnání mezi zachyceným rámcem a referenčním rámcem spočívá v technice zvané odečítání pozadí. Subtration na pozadí spočívá v doslovném odečtení barevných informací pixel-to-pixel od zachyceného rámce a referenčního rámce. Výsledný obrázek z tohoto postupu tedy zvýrazní / zobrazí podrobněji pouze to, co se mezi těmito dvěma snímky liší (nebo co se přesunulo / má pohyb) a vše ostatní bude na obrázku černé (barva nulové hodnoty na šedé -scale pixel). Důležité: podmínky osvětlení a kvalita zachyceného obrazu z webové kamery (kvůli kvalitě snímačů snímání) se mohou snímek od snímku lišit. Znamená to, že „stejné části“z referenčního rámce a dalších snímků nebudou po odečtení pozadí zcela černé. Navzdory tomuto chování neexistují žádné závažné důsledky v dalších krocích zpracování obrazu v tomto projektu.

Aby se minimalizoval čas zpracování obrazu, před provedením subtrace na pozadí se zachycený rámeček a referenční snímek převede na obrázek v šedé škále. Ale proč? Je to problém efektivity výpočetní techniky: obrázek, který představuje více barev (barevný obrázek), má tři informace na pixel: červené, modré a zelené barevné složky (starý, ale zlatý standard RGB). Matematicky tedy lze každý pixel definovat jako pole tří hodnot, z nichž každý představuje barevnou složku. Proto při jeho rozšíření na celý obrázek bude konečný obrázek ve skutečnosti kombinací tří komponent obrazu: červené, modré a zelené složky obrazu.

Na jeho zpracování je potřeba hodně práce! Na obrázcích v odstínech šedé má však každý pixel pouze jednu barevnou informaci. Zpracování barevného obrázku je tedy třikrát pomalejší než v případě obrázku v šedém měřítku (nejméně třikrát, v závislosti na tom, o jakou techniku jde). A je toho víc: pro některé účely (jako je tento projekt) není zpracování všech barev nutné ani důležité. Proto jsme došli k závěru: použití obrázků v šedém měřítku se pro účely zpracování obrazu velmi doporučuje. Po subtrraci na pozadí je nutné použít filtr Gaussian Blur.

Gaussovský filtr rozostření aplikovaný na odečtený obrázek na pozadí vyhladí všechny obrysy pohybujícího se detekovaného objektu. Určitě to bude nápomocné v dalších krocích zpracování obrazu.

Krok 2: Binarizace

Binarizace
Binarizace

Ve většině případů zpracování obrazu je binarizace téměř nezbytným krokem po zvýraznění objektů / charakteristik obrázku. Důvod: v binárním obrázku může každá barva pixelu nabývat pouze dvou hodnot: 0x00 (černá) nebo 0xFF (bílá). To velmi pomáhá zpracování obrazu, aby bylo v dalších krocích vyžadováno ještě menší „výpočetní výkon“k aplikaci technik zpracování obrazu. Binarizaci lze provést porovnáním každé barvy pixelu obrázku ve stupních šedi s určitou prahovou hodnotou. Pokud je hodnota barvy pixelu větší než prahová hodnota, tato barva pixelu převezme bílou hodnotu (0xFF) a pokud je hodnota barvy pixelu nižší než prahová hodnota, tato barva pixelu převezme černou hodnotu (0x00). Bohužel, výběr prahové hodnoty není tak snadné. Záleží na okolních faktorech, jako jsou světelné podmínky. Špatný výběr prahové hodnoty může zničit všechny další kroky. Proto důrazně doporučuji, abyste před dalšími akcemi ručně nastavili práh v projektu pro váš případ. Tato prahová hodnota musí zajistit, aby se pohybující se objekt zobrazoval v binárním obrazu. V mém případě po adekvátní volbě prahové hodnoty dojde k tomu, co vidíte na obrázku 5.

Obrázek 5 - binární obrázek

Krok 3: Dilatujte

Až dosud bylo možné detekovat pohybující se objekty, zvýrazňovat je a aplikovat binarizaci, což má za následek docela jasný obraz pohybujícího se objektu (= docela jasný obraz objektu pro účely zpracování obrazu). Příprava na počítání objektů se TÉMĚŘ provádí. „TÉMĚŘ“zde znamená, že před pokračováním je třeba provést několik jemných úprav. V tomto okamžiku existuje reálná šance na přítomnost „děr“v objektech (černé masy pixelů do bílého zvýrazněného objektu). Tyto otvory mohou být cokoli, od konkrétních světelných podmínek po některou část tvaru objektu. Jakmile díry mohou „produkovat“falešné objekty uvnitř skutečných objektů (v závislosti na tom, jak velké a kde se nacházejí), důsledky přítomnosti děr v obrázku mohou být pro počítání objektů katastrofální. Způsob, jak tyto díry odstranit, je použití techniky zpracování obrazu s názvem Dilate. Použijte to a díry zmizí.

Krok 4: Hledání obrysů (a jeho těžiště)

Hledání obrysů (a jeho těžiště)
Hledání obrysů (a jeho těžiště)

V tomto okamžiku máme zvýrazněné objekty, uvnitř žádné díry a jsme připraveni na to, co bude dál: hledání obrysů (a jeho těžiště). V OpenCV existují prostředky pro automatickou detekci obrysů, ale detekované obrysy musí být zvoleny moudře (pro výběr skutečného objektu nebo pouze objektů). Kritériem pro detekci obrysů je tedy plocha objektu měřená v pixelech². Pokud má kontura vyšší plochu než limit (konfigurovaná v softwaru), musí být považována za skutečný objekt, který se má započítat. Výběr tohoto limitu/kritérií této oblasti je velmi důležitý a špatná volba zde znamená špatné počítání. Musíte vyzkoušet některé hodnoty mezních hodnot oblastí a zkontrolovat, co lépe vyhovuje vašemu použití. Nebojte se, tyto limity nejsou tak těžké najít / upravit. Jakmile jsou vybrány všechny objekty na obrázku, dalším krokem je nakreslit na něj retangle (tento retangle musí obsahovat celý detekovaný objekt uvnitř). A střed tohoto obdélníku je…. těžiště objektu! Možná si říkáte: „Co je na tom těžiště za tohle?“, Že? Zde je vaše odpověď: nezáleží na tom, jak velký nebo jaký je tvar předmětu, jeho pohyb je stejný jako těžiště. Jinými slovy: tento jednoduchý bod zvaný těžiště představuje veškerý pohyb objektu. Nyní je počítání velmi jednoduché, že? Viz obrázek níže (obrázek 6), kde je těžiště objektu znázorněno jako černý bod.

Krok 5: Centoridův pohyb a počítání objektů

Velké finále: Porovnejte těžiště objektu se souřadnicemi vstupních a výstupních čar a použijte dříve popsaný algoritmus počítání. A bude se počítat pohybující se objekty!

Konečný výsledek Jak je ukázáno na úplném začátku tohoto příspěvku, zde je projekt v akci:

Doporučuje: