Sisukord:

Vaarika Pi objektide loendamine: 5 sammu
Vaarika Pi objektide loendamine: 5 sammu

Video: Vaarika Pi objektide loendamine: 5 sammu

Video: Vaarika Pi objektide loendamine: 5 sammu
Video: SCP-261 Пан-мерное Торговый и эксперимент Войти 261 объявление Де + полный + 2024, Juuli
Anonim
Vaarika Pi objektide loendamine
Vaarika Pi objektide loendamine

Arvutinägemine on kahtlemata fantastiline asi! Seda kasutades saab arvuti võime ümbritsevat keskkonda paremini näha ja tajuda, mis võimaldab arendada keerukaid, kasulikke ja lahedaid rakendusi. Sellised rakendused nagu näotuvastus ja äratundmine, objektide jälgimine ja objektide tuvastamine on tänu arvutinägemise edusammudele meie igapäevases tegevuses üha enam olemas.

Arvestades, kui arenenud ja ligipääsetavad on arvutinägemise raamistikud ja tööriistad, sobib käesolevas artiklis kirjeldatud rakendus hästi: kasutades lihtsat Raspberry PI-d ning tasuta ja avatud lähtekoodiga arvuti nägemisraamistikku nimega OpenCV liikuvate objektide loendamiseks, täpsemalt kui palju objektid lähevad teatud jälgitavasse tsooni sisse ja sealt välja.

Samm: süvenege: kuidas saab objekti liikumist pildivoos tuvastada?

Süvenemine: kuidas saab objekti liikumist pildivoos tuvastada?
Süvenemine: kuidas saab objekti liikumist pildivoos tuvastada?

Nüüd on aeg süveneda pilditöötlusse:

kuidas saada veebikaamera voogesituse pilte ja tuvastada, et midagi on sinna kolinud

See koosneb viiest etapist:

Samm: liigutatava objekti esiletõstmiseks

Nagu klassikalises füüsikas määratletud, on vaja viidet, et näha, kas midagi liigub või seisab. Siin, et teha kindlaks, kas midagi on liikunud, on see peaaegu sama: iga veebikaamera voo jäädvustatud kaadrit võrreldakse võrdlusraamiga. Kui midagi on teisiti, on midagi teisaldatud. See on lihtne, nagu see kõlab.

See võrdlusraam tuleb jäädvustada kõige täiuslikemates tingimustes (näiteks ei liigu midagi). Pilditöötluse maailmas koosneb see jäädvustatud kaadri ja võrdlusraami võrdlus tehnikast, mida nimetatakse tausta lahutamiseks. Taustalahendus seisneb pildistatud kaadrist ja võrdlusraamist lahutamast sõna otseses mõttes pikslitevahelise värviteabe lahutamises. Niisiis, selle protsessi tulemusel saadud pilt tõstab esile / näitab üksikasjalikumalt ainult seda, mis on nende kahe kaadri vahel erinev (või mis on liikunud / saanud liikumise), ja kõik muu on pildil must (halli värvi väärtus on null) -skaala piksel). Tähtis: valgustingimused ja jäädvustatud veebikaamera pildi kvaliteet (jäädvustusandurite kvaliteedi tõttu) võivad kaadrite kaupa veidi erineda. See tähendab, et võrdlusraami ja teiste kaadrite võrdsed osad ei ole pärast tausta lahutamist täiesti mustad. Sellest käitumisest hoolimata ei ole selle projekti pilditöötluse järgmistes etappides tõsiseid tagajärgi.

Kujutiste töötlemise aja minimeerimiseks teisendatakse jäädvustatud kaader ja võrdlusraam enne tausta subtreerimist halltooniks. Aga miks? See on andmetöötluse tõhususe probleem: mitut värvi (värviline pilt) esitaval pildil on piksli kohta kolm teavet: punane, sinine ja roheline värvikomponendid (vana, kuid kuldne RGB -standard). Niisiis, matemaatiliselt saab iga piksli määratleda kolme väärtusega massiivina, millest igaüks tähistab värvikomponenti. Seega, laiendades seda kogu pildile, on lõplik pilt tegelikult segu kolmest pildikomponendist: punane, sinine ja roheline.

Selle töötlemiseks on vaja palju tööd! Hallaskaalas piltidel on aga igal pikslil ainult üks värviteave. Seega on värvipildi töötlemine kolm korda aeglasem kui halltoonides (vähemalt kolm korda, olenevalt sellest, millist tehnikat kasutatakse). Ja on veel: mõnel eesmärgil (nagu see projekt) pole kõigi värvide töötlemine üldse vajalik ega oluline. Seetõttu jõudsime järeldusele: halltoonides piltide kasutamine on pilditöötluse eesmärgil väga soovitatav. Pärast tausta subtreerimist on vaja rakendada Gaussi hägususe filtrit.

Taustast lahutatud pildi peale rakendatud Gaussi hägususe filter silub liikuva tuvastatud objekti kõik kontuurid. Kindlasti on see abiks pilditöötluse järgmistes etappides.

2. etapp: binariseerimine

Binariseerimine
Binariseerimine

Enamikul piltide töötlemise juhtudel on binaarimine peaaegu kohustuslik samm pärast pildi esiletõstetud objekte / iseloomujooni. Põhjus: binaarsel pildil võib iga pikslivärv eeldada ainult kahte väärtust: 0x00 (must) või 0xFF (valge). See aitab palju pilditöötlusel, et järgmistes etappides pilditöötlusmeetodite rakendamiseks nõuda veelgi vähem "arvutusvõimsust". Binaarimist saab teha, kui võrrelda halli skaala kujutise iga pikslivärvi teatud lävega. Kui pikslivärvi väärtus on suurem kui lävi, eeldab see pikslivärv valget väärtust (0xFF) ja kui pikslivärvi väärtus on künnisest madalam, siis see pikslivärv musta väärtust (0x00). Kahjuks pole läviväärtuse valimine nii lihtne. See sõltub keskkonnateguritest, näiteks valgustingimustest. Läveväärtuse vale valik võib kõik sammud veelgi rikkuda. Niisiis, soovitan tungivalt enne edasisi toiminguid käsitsi projekti läve kohandada. See läviväärtus peab tagama, et liikuv objekt kuvatakse kahendkujutisena. Minu puhul annab pärast künnise piisavat valikut see, mida näete joonisel 5.

Joonis 5 - kahendkujutis

3. samm: laiendage

Siiani oli võimalik tuvastada liikuvaid objekte, neid esile tõsta ja rakendada binariseerimist, mille tulemuseks on liikuva objekti päris selge pilt (= objekti päris selge pilt pilditöötluse eesmärgil). Objektide loendamise ettevalmistamine on peaaegu tehtud. "Peaaegu" tähendab siin, et enne edasiliikumist tuleb teha mõned täpsed kohandused. Sel hetkel on reaalsed võimalused objektides esineda auke (mustad pikslimassid valge esiletõstetud objekti sisse). Need augud võivad olla kõik, alates konkreetsetest valgustingimustest kuni mõne objekti kuju osani. Kui augud võivad reaalsete objektide sees "toota" valeobjekte (sõltuvalt sellest, kui suured ja kus need asuvad), võivad aukude esinemise tagajärjed pildil olla objektide loendamisele katastroofilised. Üks võimalus nende aukude kõrvaldamiseks on pilditöötlus Technic nimega Dilate. Kasutage seda ja augud kaovad.

4. samm: kontuuride (ja nende tsentroidide) otsimine

Kontuuride (ja nende tsentroidide) otsing
Kontuuride (ja nende tsentroidide) otsing

Sel hetkel on meil esiletõstetud objektid, selle sees pole auke ja oleme valmis järgmiseks: kontuuride (ja nende tsentroidide) otsimiseks. OpenCV -s on ressursse kontuuride automaatseks tuvastamiseks, kuid tuvastatud kontuurid tuleb targalt valida (ainult reaalse objekti või objektide valimiseks). Seega on kontuuride tuvastamise kriteeriumiks objekti pindala, mõõdetuna pikslites². Kui kontuuril on piirist suurem ala (konfigureeritud tarkvaras), siis tuleb seda lugeda tegelikuks loendatavaks objektiks. Selle ala piirangu/kriteeriumide valik on väga oluline ja halb valik tähendab siin valesid loendeid. Peate proovima mõningaid piirkonna väärtuse piirväärtusi ja kontrollima, mis sobib teie kasutusega paremini. Ärge muretsege, neid piiranguid pole raske leida / kohandada. Kui kõik pildil olevad objektid on valitud, tuleb järgmine samm sellele ümber joonistada (see ümbermõõt peab sisaldama tervet tuvastatud objekti selle sees). Ja selle ristküliku keskpunkt on…. objekti keskpunkt! Võib -olla mõtlete: "Mis on selle tsentroidiga suur asi?", Eks? Siin on teie vastus: pole tähtis, kui suur või milline on objekti kuju, selle liikumine on sama kui tsentroidil. Teisisõnu: see lihtne punkt, mida nimetatakse tsentroidiks, tähistab kogu objekti liikumist. See teeb loendamise nüüd väga lihtsaks, kas pole? Vaadake allolevat pilti (joonis 6), kus objekti tsentroid on kujutatud musta punktina.

5. samm: Centoriidi liikumine ja objektide loendamine

Suur finaal: võrrelge objekti keskkoordinaate sisenemis- ja väljumisjoonte koordinaatidega ning rakendage eelnevalt kirjeldatud loendusalgoritmi. Ja seal loetakse liikuvaid objekte!

Lõpptulemus Nagu näidatud selle postituse alguses, on siin projekt tegevuses:

Soovitan: