Kazalo:

Štetje predmetov Raspberry Pi: 5 korakov
Štetje predmetov Raspberry Pi: 5 korakov

Video: Štetje predmetov Raspberry Pi: 5 korakov

Video: Štetje predmetov Raspberry Pi: 5 korakov
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Julij
Anonim
Štetje predmetov Raspberry Pi
Štetje predmetov Raspberry Pi

Računalniški vid je nedvomno fantastična stvar! Z uporabo tega računalnik pridobi sposobnost "videti" in bolje zaznati okolje okoli sebe, kar omogoča razvoj kompleksnih, uporabnih in kul aplikacij. Aplikacije, kot so zaznavanje in prepoznavanje obrazov, sledenje objektom in zaznavanje predmetov, so vse bolj prisotne v naših vsakodnevnih dejavnostih, zahvaljujoč napredku računalniškega vida.

Glede na to, kako napredni in dostopni so okviri in orodja za računalniški vid, se aplikacija, opisana v tem članku, dobro ujema: z uporabo preprostega Raspberry PI in brezplačnega odprtokodnega okvirja za računalniški vid, imenovanega OpenCV, za štetje predmetov v gibanju, natančneje, koliko predmeti vstopajo in izstopajo iz določenega nadzorovanega območja.

1. korak: Poglabljanje: Kako lahko zaznamo gibanje predmeta v slikovnem toku?

Vse globlje: Kako lahko zaznamo gibanje predmeta v slikovnem toku?
Vse globlje: Kako lahko zaznamo gibanje predmeta v slikovnem toku?

Zdaj je čas, da se poglobimo v obdelavo slik:

kako priti do nekaj pretočnih slik s spletne kamere in zaznati, da se je kaj premaknilo tja

Sestavljen je v petih korakih:

1. korak: Označite predmet v gibanju

Kot je opredeljeno v klasični fiziki, je treba sklicevati, da se nekaj premika ali če miruje. Če želite ugotoviti, ali se je kaj premaknilo, je to skoraj enako: vsak posneti okvir toka spletne kamere bo primerjan z referenčnim okvirjem. Če je kaj drugače, se je nekaj premaknilo. Preprosto je, kot se sliši.

Ta referenčni okvir mora biti posnet v najbolj popolnih pogojih (na primer nič se ne premika). V svetu obdelave slik je ta primerjava med posnetim okvirjem in referenčnim okvirjem sestavljena iz tehnike, imenovane odštevanje ozadja. Odštevanje ozadja je sestavljeno iz literarnega odštevanja barvnih informacij med slikovnimi pikami in slikovnega okvirja iz referenčnega okvirja. Tako bo nastala slika iz tega postopka označila / pokazala z več podrobnostmi le tisto, kar se razlikuje med tema dvema okvirjema (ali, kar se je premaknilo / premaknilo), vse drugo pa bo na sliki črno (barva ničelne vrednosti na sivi barvi) merilna piksla). Pomembno: svetlobne razmere in kakovost posnete slike spletne kamere (zaradi kakovosti senzorjev zajema) se lahko od okvirja do okvirja nekoliko razlikujejo. To pomeni, da "enaki deli" iz referenčnega okvirja in drugih okvirjev po odštevanju ozadja ne bodo popolnoma črni. Kljub temu vedenju pri naslednjih korakih obdelave slik v tem projektu ni resnih posledic.

Da bi skrajšali čas obdelave slike, se pred odštevanjem ozadja zajeti okvir in referenčni okvir pretvorijo v sivo sliko. Ampak zakaj? Gre za vprašanje računalniške učinkovitosti: slika, ki predstavlja več barv (barvna slika), ima tri informacije na slikovno piko: rdeče, modre in zelene barvne komponente (stari, a zlati standard RGB). Matematično je torej mogoče vsak piksel definirati kot matriko s tremi vrednostmi, od katerih vsaka predstavlja barvno komponento. Zato bo končna slika, ki jo razširimo na celotno sliko, pravzaprav mešanica treh komponent slike: rdeče, modre in zelene komponente slike.

Za obdelavo je potrebno veliko dela! Vendar pa ima pri slikah v sivi lestvici vsak piksel le eno barvno informacijo. Tako je obdelava barvne slike trikrat počasnejša kot v primeru sive lestvice (vsaj trikrat, odvisno od tega, za katero tehniko gre). In še več: za nekatere namene (na primer ta projekt) obdelajte vse barve, ki niso potrebne ali sploh pomembne. Zato smo prišli do zaključka: uporaba sive slike je zelo priporočljiva za namene obdelave slik. Po odštevanju ozadja je treba uporabiti filter Gaussian Blur.

Gaussov filter za zameglitev, uporabljen na odšteti sliki v ozadju, zgladi vse konture premikajočega se zaznanega predmeta. Zagotovo bo v pomoč pri naslednjih korakih obdelave slik.

2. korak: Binarizacija

Binarizacija
Binarizacija

V večini primerov obdelave slik je binarnost skoraj obvezen korak po označevanju predmetov / značilnosti na sliki. Razlog: v binarni sliki lahko vsaka barva slikovnih pik prevzame samo dve vrednosti: 0x00 (črna) ali 0xFF (bela). To zelo pomaga pri obdelavi slik, da bi za uporabo tehnik obdelave slik v naslednjih korakih potrebovali še manj "računalniške moči". Binarizacijo lahko naredimo tako, da primerjamo vsako barvo slikovnih pik slike sive lestvice z določenim pragom. Če je vrednost barve slikovne pike večja od praga, bo ta barva slikovne pike prevzela belo vrednost (0xFF), če pa je vrednost barve slikovne pike nižja od praga, bo ta barva slikovne pike prevzela črno vrednost (0x00). Na žalost izbira mejne vrednosti ni tako enostavna. Odvisno je od okoljskih dejavnikov, kot so svetlobni pogoji. Napačna izbira mejne vrednosti lahko dodatno pokvari vse korake. Zato močno priporočam, da pred vsakim nadaljnjim dejanjem ročno prilagodite prag v projektu za svoj primer. Ta vrednost praga mora zagotoviti, da se premikajoči se objekt prikaže v binarni sliki. V mojem primeru po ustrezni izbiri praga dobimo tisto, kar vidite na sliki 5.

Slika 5 - binarna slika

3. korak: Razširite se

Doslej je bilo mogoče zaznati premikajoče se predmete, jih označiti in uporabiti binarnost, kar ima za posledico precej jasno podobo premikajočega se predmeta (= precej jasna slika predmeta za namene obdelave slik). Priprave na štetje predmetov so KOTAKO opravljene. "VSAKON" tukaj pomeni, da morate pred nadaljevanjem narediti nekaj drobnih prilagoditev. Na tej točki obstajajo resnične možnosti prisotnosti "lukenj" v predmetih (črne mase slikovnih pik v belem označenem predmetu). Te luknje so lahko karkoli, od posebnih svetlobnih pogojev do določenega dela oblike predmeta. Ko lahko luknje "ustvarijo" lažne predmete v resničnih predmetih (odvisno od tega, kako velike in kje se nahajajo), so lahko posledice prisotnosti lukenj na sliki katastrofalne za štetje predmetov. Način za odpravo teh lukenj je uporaba tehnike obdelave slik, imenovane Dilate. Uporabite to in luknje izginejo.

4. korak: Iskanje kontur (in njegovih centroidov)

Iskanje kontur (in njegovih centroidov)
Iskanje kontur (in njegovih centroidov)

Na tej točki imamo označene predmete, brez lukenj v njem in pripravljeni na naslednje: iskanje obrisov (in njegovih središčnic). V OpenCV obstajajo viri za samodejno zaznavanje kontur, vendar je treba odkrite števce pametno izbrati (samo za izbiro pravega predmeta ali predmetov). Merilo za zaznavanje kontur je torej površina predmeta, merjena v pikslih². Če ima kontura večjo površino kot mejo (konfigurirano v programski opremi), jo je treba obravnavati kot resnični predmet, ki ga je treba šteti. Izbira te omejitve/kriterija je zelo pomembna, slaba izbira pa pomeni napačno štetje. Preizkusiti morate nekatere mejne vrednosti območja in preveriti, kaj najbolje ustreza vaši uporabi. Ne skrbite, teh omejitev ni težko najti / prilagoditi. Ko so izbrani vsi predmeti na sliki, je naslednji korak, da nanjo narišemo pravokotnik (ta preslikava mora vsebovati celoten zaznani predmet v sebi). In središče tega pravokotnika je…. središče objekta! Morda razmišljate: "Kaj je hudega s tem centroidom?", Kajne? Tu je vaš odgovor: ni važno, kako velika ali kakšna je oblika predmeta, njegovo gibanje je enako središču. Z drugimi besedami: ta preprosta točka, imenovana centroid, predstavlja vse gibanje predmeta. Štetje je zdaj zelo preprosto, kajne? Oglejte si spodnjo sliko (slika 6), kjer je središče predmeta prikazano kot črna točka.

5. korak: Centoridovo gibanje in štetje predmetov

Veliki finale: primerjajte središčne koordinate objekta s koordinatami vhodne in izstopne črte ter uporabite prej opisano algoritem štetja. In štelo se bo premikajočih se predmetov!

Končni rezultat Kot je prikazano na začetku te objave, je projekt v akciji:

Priporočena: