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, Srpanj
Anonim
Brojanje objekata Raspberry Pi
Brojanje objekata Raspberry Pi

Računalni vid, bez sumnje, fantastična je stvar! Koristeći ovo, računalo stječe sposobnost "gledanja" i boljeg osjećanja okoline, što omogućuje 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čunalnog vida.

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

Korak 1: Postanite dublji: Kako se može otkriti kretanje objekta u slikovnom toku?

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 tamo nešto preselilo

Sastoji se od pet koraka:

Korak 1: Za označavanje 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 pomaknulo približno isto: svaki pojedinačni snimljeni okvir web kamere usporedit će se 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 uvjetima (na primjer, ništa se ne pomiče). U svijetu obrade slika, ova usporedba između snimljenog okvira i referentnog okvira sastoji se od tehnike koja se naziva oduzimanje pozadine. Oduzimanje pozadine sastoji se u doslovnom oduzimanju informacija o boji piksela u piksel iz snimljenog okvira 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 okvira (ili ono što se pomaknulo / pokrenulo), a sve ostalo bit će crno na slici (boja nulte vrijednosti na sivoj boji) -mjerljivi 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 znači da "jednaki dijelovi" iz referentnog okvira i drugih okvira neće biti potpuno crni nakon oduzimanja pozadine. Unatoč takvom ponašanju, u sljedećim koracima obrade slike u ovom projektu nema ozbiljnih posljedica.

Kako bi se smanjilo vrijeme obrade slike, prije nego što se oduzme pozadina, snimljeni okvir i referentni okvir pretvaraju se u sliku u sivoj ljestvici. Ali zašto? To je problem računalne učinkovitosti: 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 se piksel može definirati kao niz s tri vrijednosti, od kojih svaki predstavlja komponentu boje. Stoga će, proširujuć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 u sivoj ljestvici svaki piksel ima samo jednu informaciju o boji. Dakle, obrada slike u boji je tri puta sporija nego u slučaju slike sive boje (najmanje tri puta, ovisno o kojoj se tehnici radi). I ima još nečega: u neke svrhe (poput ovog projekta), sve boje nisu potrebne ili uopće važne. Stoga smo došli do zaključka: upotreba slika u sivim tonovima jako se preporučuje za obradu slika. Nakon oduzimanja pozadine potrebno je primijeniti Gaussian filter za zamućenje.

Gaussov filter za zamućenje primijenjen na oduzetu sliku u pozadini zaglađuje sve konture pokretnog otkrivenog objekta. Sigurno će vam 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: u binarnoj slici svaka boja piksela može poprimiti samo dvije vrijednosti: 0x00 (crno) ili 0xFF (bijelo). To 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 napraviti usporedbom svake boje piksela slike sive ljestvice s 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, odabir praga nije tako jednostavan izbor. Ovisi o čimbenicima okoliša, poput uvjeta osvjetljenja. Pogrešan izbor vrijednosti praga može dodatno pokvariti sve korake. Stoga vam toplo preporučujem da prije bilo kakvih daljnjih radnji ručno prilagodite prag u projektu za svoj slučaj. 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 detektirati pokretne objekte, označiti ih i primijeniti binarizaciju, što rezultira prilično jasnom slikom objekta u pokretu (= prilično jasna slika objekta za potrebe obrade slike). PRIPREMA za brojanje objekata je SKORO gotova. "GOTOVO" ovdje znači da morate napraviti neke fine prilagodbe prije nego što krenete dalje. U ovom trenutku postoje stvarne šanse za prisutnost "rupa" u objektima (crne mase piksela u bijelom istaknutom objektu). Ove rupe mogu biti bilo što, od posebnih svjetlosnih uvjeta 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 uklanjanja ovih rupa je upotreba tehnike obrade slike koja se zove Dilate. Upotrijebite ovo i rupe nestaju.

Korak 4: Potraga za konturama (i njenim središnjicama)

Potraga za konturama (i njenim središnjicama)
Potraga za konturama (i njenim središnjicama)

U ovom trenutku imamo istaknute objekte, bez rupa u njemu i spremni za ono što slijedi: traženje kontura (i njegovih središnjica). 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će područje od ograničenja (konfigurirano u softveru), mora se smatrati stvarnim objektom za brojanje. Izbor ove granice/kriterija područja vrlo je važan, a loš izbor ovdje znači pogrešno brojanje. Morate isprobati neke vrijednosti ograničenja vrijednosti područja i provjeriti što vam bolje odgovara. Ne brinite, ovo ograničenje nije teško pronaći / prilagoditi. Nakon što se odaberu svi objekti na slici, sljedeći korak je nacrtati preslikač (ovaj preslikač mora sadržavati cijeli otkriveni objekt u sebi). I središte ovog pravokutnika je…. centroid objekta! Možda razmišljate "U čemu je problem s ovim centroidom?", Zar ne? Evo vašeg odgovora: nije važno koliko je velik ili kakav je oblik predmeta, njegovo kretanje je isto kao i središte. Drugim riječima: ova jednostavna točka zvana centroid predstavlja sve kretanje objekta. Brojanje sada čini vrlo jednostavnim, zar ne? Pogledajte donju sliku (slika 6), gdje je težište objekta predstavljeno kao crna točka.

Korak 5: Centoridovo kretanje i brojanje objekata

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

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

Preporučeni: