Sadržaj:
- Korak 1: Postanite dublji: Kako se može otkriti kretanje objekta u nizu slika?
- Korak 2: Binarizacija
- Korak 3: Proširite
- Korak 4: Potraga za konturama (i njenim centroidima)
- Korak 5: Centoridovo kretanje i brojanje objekata
Video: Brojanje objekata u Raspberry Pi: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
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?
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
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)
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:
AccuRep: uređaj za brojanje sklekova: 8 koraka (sa slikama)
AccuRep: uređaj za brojanje sklekova: Poznajem mnoge ljude koji su počeli raditi na ovoj karanteni. Problem kod kućnih vježbi je nedostatak opreme za teretanu. Moji treninzi uglavnom sadrže sklekove. Da bih se zaista potrudio, tokom vježbanja slušam rock muziku. Problem je broj ponavljanja
Brojanje od 0 do 9999 sa 8051 pomoću 7 -segmentnog ekrana: 5 koraka
Brojanje od 0 do 9999 sa 8051 korištenjem 7 -segmentnog zaslona: Pozdrav svima, U ovom tutorijalu ćemo vam reći kako brojati od 0 do 9999 koristeći četiri 7 -segmentna zaslona koristeći samo jedan port i 4 digitalna pina
BROJANJE SATNOG ZVONA: 5 koraka (sa slikama)
Odbrojavanje sata: Planirao sam kupiti Neopixel prsten 60 Led za izradu sata, ali nažalost nisam ga mogao kupiti. Konačno sam kupio Neopixel prsten 35 LED & smislio je jednostavan način da napravite internetski sat koji može prikazati sate, minute & drugi sa ovim
Vaga za brojanje napravljena s Arduinom: 6 koraka
Brojilo za brojanje napravljeno s Arduinom: Ovaj projekt je još uvijek u tijeku, no došao je do točke u kojoj je korisno podijeliti detalje kako bi drugi imali koristi od njega i ideje. To je u osnovi skala izgrađena korištenjem Arduina kao mikrokontrolera, općenito lo
Pametna košarkaška arkadna igra s obručima za brojanje bodova pomoću ugrađene platforme Evive- Arduino: 13 koraka
Pametna arkadna igra za košarku s obručima za brojanje bodova pomoću Evive-Arduino ugrađene platforme: Od svih igara koje postoje, najzabavnije su arkadne igre. Pa smo pomislili zašto to ne bismo sami napravili kod kuće! I evo nas, najzabavnije DIY igre koju ste do sada igrali - DIY Arcade Basketball Game! Ne samo da je