Obsah:
- Krok 1: Zesílení: Jak lze v toku obrázků detekovat pohyb objektu?
- Krok 2: Binarizace
- Krok 3: Dilatujte
- Krok 4: Hledání obrysů (a jeho těžiště)
- Krok 5: Centoridův pohyb a počítání objektů
Video: Počítání objektů Raspberry Pi: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
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?
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
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ě)
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:
AccuRep: zařízení pro počítání push-up: 8 kroků (s obrázky)
AccuRep: zařízení pro počítání push-up: Znám mnoho lidí, kteří začali pracovat na této karanténě. Problémem domácího tréninku je nedostatek vybavení tělocvičny. Moje cvičení většinou obsahují kliky. Abych se opravdu prosadil, poslouchám během tréninku rockovou hudbu. Problém je počet opakování
Počítání od 0 do 9999 s 8051 pomocí 7segmentového displeje: 5 kroků
Počítání od 0 do 9999 s 8051 pomocí 7segmentového displeje: Ahoj všichni, v tomto tutoriálu vám řekneme, jak počítat od 0 do 9999 pomocí čtyř 7segmentového displeje pomocí jediného portu a 4 digitálních pinů
Časovač počítání Arduino pro oznámení: 5 kroků
Arduino Counting Timer for Announcement: Toto je odpočítávací časovač, který se vyrábí pomocí Arduino UNO a LCD monitoru. Důvod, proč jsem vytvořil tento projekt, protože v naší škole (KCIS) si musíme rezervovat oběd každou středu ve 21:30 online. Nejslavnější a jídlo, které je v
Měřítko počítání vytvořené pomocí Arduina: 6 kroků
Počítání měřítka vytvořeného pomocí Arduina: Tento projekt je stále do určité míry rozpracován, nicméně dospěl do bodu, kdy je užitečné sdílet podrobnosti pro ostatní, aby z něj a z myšlenky měli užitek. Je to v podstatě měřítko postavené pomocí Arduina jako mikrokontroléru, generického lo
Chytrá basketbalová arkádová hra s obroučkami pro počítání skóre pomocí platformy Evive- integrovaná platforma Arduino: 13 kroků
Inteligentní basketbalová arkádová hra s obroučkami pro počítání skóre využívající integrovanou platformu Evive- Arduino: Ze všech her jsou nejzábavnější arkádové hry. A tak jsme si řekli, proč si jeden nevyrobit sami doma! A jsme tady, nejzábavnější kutilská hra, kterou jste dosud hráli - DIY Arcade Basketball Game! Nejen, že je