Sadržaj:

Brojanje objekata u Raspberry Pi: 5 koraka
Brojanje objekata u Raspberry Pi: 5 koraka

Video: Brojanje objekata u Raspberry Pi: 5 koraka

Video: Brojanje objekata u Raspberry Pi: 5 koraka
Video: Я ОДЕРЖИМЫЙ ДЕМОНАМИ 2024, Juli
Anonim
Brojanje objekata Raspberry Pi
Brojanje objekata Raspberry Pi

Kompjuterski vid je, nesumnjivo, fantastična stvar! Koristeći ovo, računar stječe sposobnost da "vidi" i bolje osjeti okruženje, što omogućava razvoj složenih, korisnih i cool aplikacija. Aplikacije poput otkrivanja i prepoznavanja lica, praćenja objekata i otkrivanja objekata sve su prisutnije u našim svakodnevnim aktivnostima, zahvaljujući napretku računarskog vida.

S obzirom na to koliko su napredni i pristupačni okviri i alati za računarski vid, aplikacija opisana u ovom članku dobro se uklapa: upotreba jednostavnog Raspberry PI-ja i besplatnog i otvorenog okvira za računarski vid pod nazivom OpenCV za brojanje objekata u pokretu, tačnije koliko objekti ulaze i izlaze iz određene nadzirane zone.

Korak 1: Postanite dublji: Kako se može otkriti kretanje objekta u nizu slika?

Sve dublje: Kako se može otkriti kretanje objekta u nizu slika?
Sve dublje: Kako se može otkriti kretanje objekta u nizu slika?

Sada je vrijeme da se dublje pozabavite obradama slika:

kako nabaviti neke slike sa web kamere i otkriti da se tu nešto premjestilo

Sastoji se od pet koraka:

Korak 1: Za isticanje objekta u pokretu

Kako je definirano u klasičnoj fizici, referenca je neophodna da bi se zaključilo da se nešto kreće ili stoji. Ovdje je za utvrđivanje da li se nešto pomjerilo približno isto: svaki pojedinačni kadar snimljenog toka web kamere bit će upoređen s referentnim okvirom. Ako je nešto drugačije, nešto je pomaknuto. Jednostavno je kako zvuči.

Ovaj referentni okvir mora biti snimljen u najsavršenijim uslovima (na primjer, ništa se ne miče). U svijetu za obradu slika, ovo poređenje snimljenog kadra i referentnog okvira sastoji se od tehnike koja se naziva oduzimanje pozadine. Oduzimanje pozadine sastoji se od doslovnog oduzimanja informacija o boji piksela po piksel iz snimljenog kadra i referentnog okvira. Dakle, rezultirajuća slika iz ovog procesa istaknut će / prikazati s više detalja samo ono što se razlikuje između ova dva kadra (ili ono što se pomaknulo / pokrenulo), a sve ostalo bit će crno na slici (boja nulte vrijednosti na sivoj boji) -skalirani piksel). Važno: uvjeti osvjetljenja i kvaliteta snimljene slike web kamere (zbog kvalitete senzora za snimanje) mogu se neznatno razlikovati od kadra do kadra. To implicira da "jednaki dijelovi" iz referentnog okvira i drugih okvira neće biti potpuno crni nakon oduzimanja pozadine. Uprkos ovakvom ponašanju, nema ozbiljnih posljedica u sljedećim koracima obrade slike u ovom projektu.

Kako bi se smanjilo vrijeme obrade slike, prije nego što se oduzme pozadina, snimljeni okvir i referentni okvir se pretvaraju u sliku u sivoj skali. Ali zašto? To je problem računalne efikasnosti: slika koja prikazuje više boja (slika u boji) ima tri informacije po pikselu: komponente crvene, plave i zelene boje (stari, ali zlatni RGB standard). Dakle, matematički, svaki piksel se može definirati kao niz od tri vrijednosti, od kojih svaki predstavlja komponentu boje. Stoga će, proširivši je na cijelu sliku, konačna slika zapravo biti mješavina tri komponente slike: crvene, plave i zelene komponente slike.

Za njegovu obradu potrebno je mnogo rada! Međutim, na slikama sive boje svaki piksel ima samo jednu informaciju o boji. Dakle, obrada slike u boji je tri puta sporija nego u slučaju sive slike (najmanje tri puta, ovisno o tome koja je tehnika u pitanju). I još mnogo toga: u neke svrhe (poput ovog projekta), obrada svih boja nije potrebna ili uopće nije važna. Stoga smo došli do zaključka: upotreba slika u sivim tonovima je visoko preporučena za obradu slika. Nakon oduzimanja pozadine, potrebno je primijeniti Gaussian Blur filter.

Gaussov filter za zamućenje primijenjen na oduzetu sliku u pozadini zaglađuje sve konture pokretnog otkrivenog objekta. Sigurno će biti od pomoći u sljedećim koracima obrade slike.

Korak 2: Binarizacija

Binarizacija
Binarizacija

U većini slučajeva obrade slike, binarizacija je gotovo obavezan korak nakon isticanja objekata / karaktera na slici. Razlog: na binarnoj slici svaka boja piksela može poprimiti samo dvije vrijednosti: 0x00 (crno) ili 0xFF (bijelo). Ovo uvelike pomaže u obradi slike kako bi se zahtijevala još manja "računalna snaga" za primjenu tehnika obrade slike u sljedećim koracima. Binarizacija se može izvršiti upoređivanjem svake boje piksela slike sive skale sa određenim pragom. Ako je vrijednost boje piksela veća od praga, ta boja piksela će poprimiti bijelu vrijednost (0xFF), a ako je vrijednost boje piksela niža od praga, ta boja piksela će poprimiti crnu vrijednost (0x00). Nažalost, izbor vrijednosti praga nije tako lako napraviti. Zavisi od faktora okoline, poput uslova osvetljenja. Pogrešan izbor granične vrijednosti može dodatno pokvariti sve korake. Stoga vam toplo preporučujem da ručno prilagodite prag u projektu za vaš slučaj prije bilo kakvih daljih radnji. Ova vrijednost praga mora osigurati da se pokretni objekt prikazuje u binarnoj slici. U mom slučaju, nakon odgovarajućeg izbora praga, rezultat je ono što vidite na slici 5.

Slika 5 - binarna slika

Korak 3: Proširite

Do sada je bilo moguće detektovati pokretne objekte, označiti ih i primijeniti binarnost, što rezultira prilično jasnom slikom objekta u pokretu (= prilično jasna slika objekta u svrhu obrade slike). PRIPREMA za brojanje objekata je SKORO obavljena. "SKORO" ovdje znači da morate napraviti neke fine prilagodbe prije nego nastavite. U ovom trenutku postoje realne šanse za prisutnost "rupa" u objektima (crne mase piksela u bijelom istaknutom objektu). Ove rupe mogu biti bilo što, od posebnih uvjeta osvjetljenja do nekog dijela oblika objekta. Nakon što rupe mogu "proizvesti" lažne objekte unutar stvarnih objekata (ovisno o tome koliko su velike i gdje se nalaze), posljedice prisutnosti rupa na slici mogu biti katastrofalne za brojanje objekata. Način za uklanjanje ovih rupa je upotreba tehnike obrade slike koja se zove Dilate. Upotrijebite ovo i rupe nestaju.

Korak 4: Potraga za konturama (i njenim centroidima)

Potraga za konturama (i njenim centroidima)
Potraga za konturama (i njenim centroidima)

U ovom trenutku imamo istaknute objekte, bez rupa u njemu i spremni za ono što slijedi: traženje kontura (i njegovih centroida). U OpenCV -u postoje resursi za automatsko otkrivanje kontura, ali otkrivene konture moraju biti mudro odabrane (za odabir pravog objekta ili samo objekata). Dakle, kriterij za otkrivanje kontura je površina objekta, mjerena u pikselima². Ako kontura ima veću površinu od granice (konfigurirano u softveru), mora se smatrati stvarnim objektom za brojanje. Izbor ove granice/kriterija područja je vrlo važan, a loš izbor ovdje znači pogrešno brojanje. Morate isprobati neke granične vrijednosti područja i provjeriti što vam više odgovara. Ne brinite, ovo ograničenje nije teško pronaći / prilagoditi. Nakon što se izaberu svi objekti na slici, sljedeći korak je nacrtati preslikač (na njemu mora biti cijeli otkriveni objekt). I središte ovog pravokutnika je…. centroid objekta! Možda razmišljate "U čemu je problem sa ovim centroidom?", Zar ne? Evo vašeg odgovora: nije važno koliko je velik ili kakav je oblik objekta, njegovo kretanje je isto kao u središtu. Drugim riječima: ova jednostavna tačka zvana centroid predstavlja cijelo kretanje objekta. To sada čini prebrojavanje vrlo jednostavnim, zar ne? Pogledajte donju sliku (slika 6), gdje je težište objekta predstavljeno kao crna tačka.

Korak 5: Centoridovo kretanje i brojanje objekata

Veliko finale: usporedite koordinate centroida objekta s koordinatama ulaznih i izlaznih linija i primijenite prethodno opisanu algoritmu brojanja. I doći će do brojanja pokretnih objekata!

Konačni rezultatKao što je prikazano na samom početku ovog posta, evo projekta na djelu:

Preporučuje se: