Obsah:

Počítanie objektov Raspberry Pi: 5 krokov
Počítanie objektov Raspberry Pi: 5 krokov

Video: Počítanie objektov Raspberry Pi: 5 krokov

Video: Počítanie objektov Raspberry Pi: 5 krokov
Video: Удивительные самоделки на Raspberry PI, 11 интересных проектов на малине. 2024, November
Anonim
Počítanie objektov Raspberry Pi
Počítanie objektov Raspberry Pi

Počítačové videnie je nepochybne fantastická vec! Vďaka tomu počítač získa schopnosť „vidieť“a lepšie vnímať okolie, čo umožňuje vývoj komplexných, užitočných a skvelých aplikácií. Vďaka pokroku v oblasti počítačového videnia sú aplikácie, ako je rozpoznávanie a rozpoznávanie tváre, sledovanie objektov a detekcia objektov, stále viac prítomné v našich každodenných činnostiach.

Vzhľadom na to, aké pokročilé a prístupné sú rámce a nástroje počítačového videnia, aplikácia popísaná v tomto článku sa dobre hodí: použitie jednoduchého Raspberry PI a bezplatného a open-source rámca počítačového videnia s názvom OpenCV na počítanie pohybujúcich sa predmetov, presnejšie toho, koľko predmety vstupujú a vystupujú z určitej monitorovanej zóny.

Krok 1: Hĺbka: Ako je možné v prúde obrazu rozpoznať pohyb objektu?

Hĺbka: Ako je možné v prúde obrazu rozpoznať pohyb objektu?
Hĺbka: Ako je možné v prúde obrazu rozpoznať pohyb objektu?

Teraz je načase sa hlbšie zoznámiť so spracovaním obrazu:

ako získať nejaké obrázky z webovej kamery a zistiť, že sa tam niečo pohlo

Pozostáva z piatich krokov:

Krok 1: Na zvýraznenie objektu v pohybe

Podľa definície v klasickej fyzike je potrebná referencia, aby sme zistili, že sa niečo pohybuje alebo ak stojí. Na to, aby sme určili, že sa niečo pohlo, je to skoro rovnaké: každý zachytený rámec streamu webovej kamery sa porovná s referenčným rámcom. Ak je niečo iné, niečo bolo presunuté. Je to jednoduché, ako to znie.

Tento referenčný rámec musí byť zachytený v tých najdokonalejších podmienkach (napríklad nič sa nehýbe). Vo svete spracovania obrazu spočíva toto porovnanie zachyteného rámca s referenčným rámcom v technike nazývanej odčítanie pozadia. Subtration pozadia pozostáva z doslovného odčítania farebných informácií pixel-to-pixel od zachyteného rámca a referenčného rámca. Výsledný obrázok z tohto postupu teda zvýrazní / zobrazí s podrobnosťami iba to, čo sa medzi týmito dvoma snímkami líši (alebo čo sa pohlo / pohlo) a všetko ostatné bude na obrázku čierne (farba nulovej hodnoty na sivej -mierka pixelov). Dôležité: svetelné podmienky a kvalita nasnímaného obrazu z webovej kamery (vzhľadom na kvalitu snímačov) sa môžu medzi jednotlivými snímkami líšiť. Znamená to, že „rovnaké časti“z referenčného rámca a iných rámcov nebudú po odčítaní pozadia úplne čierne. Napriek tomuto správaniu neexistujú žiadne vážne dôsledky v ďalších krokoch spracovania obrazu v tomto projekte.

Aby sa minimalizoval čas spracovania obrazu, pred vykonaním substitúcie na pozadí sa zachytený rámec a referenčný rámec prevedú na obrázok v odtieňoch sivej. Ale prečo? Je to problém s výpočtovou účinnosťou: obrázok, ktorý predstavuje viac farieb (farebný obrázok), má tri informácie na pixel: červené, modré a zelené farebné komponenty (starý, ale zlatý štandard RGB). Matematicky je teda každý pixel možné definovať ako pole s tromi hodnotami, z ktorých každý predstavuje farebnú zložku. Preto pri rozšírení na celý obrázok bude konečný obrázok vlastne kombináciou troch komponentov obrazu: červených, modrých a zelených komponentov obrazu.

Na jeho spracovanie je potrebné veľa práce! Na obrázkoch v odtieňoch šedej má však každý pixel iba jednu farebnú informáciu. Spracovanie farebného obrázku je teda trikrát pomalšie ako v prípade obrázka v odtieňoch sivej (najmenej trikrát, v závislosti od použitej techniky). A je tu toho viac: na niektoré účely (ako napríklad tento projekt) nie je spracovanie všetkých farieb potrebné ani dôležité. Preto sme dospeli k záveru: Použitie obrázkov v šedej škále sa dôrazne odporúča na účely spracovania obrázkov. Po subtrácii na pozadí je potrebné použiť filter Gaussian Blur.

Gaussovský filter rozmazania aplikovaný na obrázok odčítaný na pozadí vyhladí všetky obrysy pohybujúceho sa detegovaného objektu. Určite to pomôže v ďalších krokoch spracovania obrazu.

Krok 2: Binarizácia

Binarizácia
Binarizácia

Vo väčšine prípadov spracovania obrazu je binarizácia takmer povinným krokom po zvýraznení objektov / znakov na obrázku. Dôvod: na binárnom obrázku môže každá farba pixelu nadobúdať iba dve hodnoty: 0x00 (čierna) alebo 0xFF (biela). To veľmi pomáha pri spracovaní obrazu, aby v ďalších krokoch bol pri použití techník spracovania obrazu potrebný ešte menší „výpočtový výkon“. Binarizáciu je možné vykonať porovnaním každej farby pixelu obrázku v odtieňoch sivej s určitým prahom. Ak je hodnota farby pixelu väčšia ako prahová hodnota, táto farba pixelov bude mať bielu hodnotu (0xFF) a ak je hodnota farby pixelu nižšia ako prahová hodnota, táto farba pixelov bude mať čiernu hodnotu (0x00). Voľba prahovej hodnoty nie je bohužiaľ taká jednoduchá. Závisí to od faktorov prostredia, napríklad od svetelných podmienok. Nesprávny výber prahovej hodnoty môže zničiť všetky ďalšie kroky. Preto dôrazne odporúčam, aby ste pred ďalšími krokmi manuálne nastavili prahovú hodnotu v projekte pre váš prípad. Táto prahová hodnota musí zaistiť, aby sa pohybujúci sa objekt zobrazoval na binárnom obrázku. V mojom prípade po adekvátnom výbere prahu dôjde k tomu, čo vidíte na obrázku 5.

Obrázok 5 - binárny obrázok

Krok 3: Rozšírte

Doteraz bolo možné detegovať pohybujúce sa objekty, zvýrazňovať ich a používať binarizáciu, čo má za následok celkom jasný obraz pohybujúceho sa objektu (= celkom jasný obraz objektu na účely spracovania obrazu). Príprava na počítanie objektov sa TAKMER vykonáva. „SKORO“tu znamená, že je potrebné vykonať niekoľko jemných úprav, než sa pohnete ďalej. V tomto mieste sú reálne šance na prítomnosť „dier“v objektoch (čierne masy pixelov do bieleho zvýrazneného objektu). Tieto otvory môžu byť čokoľvek, od konkrétnych svetelných podmienok po niektorú časť tvaru objektu. Akonáhle diery môžu "produkovať" falošné objekty vo vnútri skutočných predmetov (v závislosti od toho, ako veľké a kde sa nachádzajú), dôsledky prítomnosti dier na obrázku môžu byť pre počítanie objektov katastrofálne. Spôsob, ako odstrániť tieto diery, je použiť techniku na spracovanie obrazu s názvom Dilate. Použite to a diery zmiznú.

Krok 4: Hľadanie obrysov (a jeho centroidov)

Hľadanie obrysov (a jeho centroidov)
Hľadanie obrysov (a jeho centroidov)

V tomto mieste máme zvýraznené objekty, vnútri žiadne diery a sme pripravení na to, čo bude nasledovať: hľadanie obrysov (a jeho centroidov). V OpenCV existujú zdroje na automatickú detekciu obrysov, ale rozpoznané obrysy je potrebné zvoliť múdro (aby ste vybrali iba skutočný objekt alebo objekty). Kritériom na detekciu obrysov je teda plocha objektu meraná v pixeloch². Ak má obrys väčšiu plochu ako limit (konfigurovaný v softvéri), musí sa považovať za skutočný objekt, ktorý sa má započítať. Výber tohto limitu/kritérií tejto oblasti je veľmi dôležitý a zlá voľba tu znamená nesprávne počítanie. Musíte vyskúšať niektoré hodnoty medzných hodnôt oblastí a skontrolovať, čo lepšie vyhovuje vášmu použitiu. Nebojte sa, tieto limity nie je ťažké nájsť / upraviť. Akonáhle sú vybraté všetky objekty na obrázku, ďalším krokom je nakresliť na neho retangle (tento retangle musí obsahovať celý detegovaný objekt vo vnútri). A stred tohto obdĺžnika je …. ťažisko objektu! Možno si hovoríte „Čo je to za ťažisko tohto ťažiska?“, Však? Tu je vaša odpoveď: nezáleží na tom, aký veľký alebo aký je tvar predmetu, jeho pohyb je rovnaký ako ťažisko. Inými slovami: tento jednoduchý bod nazývaný ťažisko predstavuje všetok pohyb objektu. Teraz je počítanie veľmi jednoduché, však? Pozrite si obrázok nižšie (obrázok 6), kde je ťažisko objektu znázornené ako čierny bod.

Krok 5: Centoridov pohyb a počítanie predmetov

Veľké finále: Porovnajte ťažnice objektu s koordinátami vstupných a výstupných čiar a aplikujte algoritmus počítania opísaný vyššie. A bude sa počítať pohybujúce sa objekty!

Konečný výsledok Ako je uvedené na úplnom začiatku tohto príspevku, tu je projekt v prevádzke:

Odporúča: