Sisällysluettelo:
- Vaihe 1: Syventäminen: Kuinka esineiden liike voidaan havaita kuvavirrassa?
- Vaihe 2: Binarisointi
- Vaihe 3: Laajenna
- Vaihe 4: Muotojen (ja niiden keskikohtien) etsiminen
- Vaihe 5: Centoridin liike ja esineiden laskeminen
Video: Raspberry Pi -objektien laskenta: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Tietokonenäkö on epäilemättä fantastinen asia! Tämän avulla tietokone saa kyvyn "nähdä" ja tunnistaa paremmin ympäröivän ympäristön, mikä mahdollistaa monimutkaisten, hyödyllisten ja viileiden sovellusten kehittämisen. Sovellukset, kuten kasvojentunnistus ja tunnistaminen, esineiden seuranta ja esineiden tunnistus, ovat yhä enemmän läsnä päivittäisessä toiminnassamme tietokonenäkymän ansiosta.
Kun otetaan huomioon, kuinka kehittyneet ja helppokäyttöiset ovat tietokonenäkökehykset ja -työkalut, tässä artikkelissa kuvattu sovellus sopii hyvin: yksinkertaisen Raspberry PI: n ja maksuttoman ja avoimen lähdekoodin tietokonenäkökehyksen käyttäminen OpenCV: nä liikkuvien esineiden laskemiseen, tarkemmin esineet menevät tietylle valvotulle alueelle ja poistuvat siitä.
Vaihe 1: Syventäminen: Kuinka esineiden liike voidaan havaita kuvavirrassa?
Nyt on aika syventyä kuvankäsittelyyn:
kuinka saada verkkokameran stream -kuvia ja havaita, että jotain on siirtynyt sinne
Se koostuu viidestä vaiheesta:
Vaihe 1: Korosta liikkeessä oleva esine
Kuten klassisessa fysiikassa määritellään, viittaus on välttämätön havaitakseen, että jokin liikkuu tai seisoo paikallaan. Täällä sen määrittämiseksi, onko jotain muuttunut, se on melko sama: jokaista verkkokameran stream -kaapattua kehystä verrataan viitekehykseen. Jos jokin on toisin, jotain on siirretty. Se on yksinkertaista, miltä se kuulostaa.
Tämä vertailukehys on otettava täydellisimmissä olosuhteissa (esimerkiksi mikään ei liiku). Kuvankäsittelyn maailmassa tämä vertailu kaapatun kehyksen ja viitekehyksen välillä koostuu tekniikasta, jota kutsutaan taustavähennykseksi. Taustamääritys koostuu kirjaimellisesti vähentämällä pikselien välistä väritietoa kaapatusta kehyksestä ja viitekehyksestä. Joten tämän prosessin tuloksena oleva kuva korostaa / näyttää yksityiskohtaisemmin vain sen, mikä eroaa näiden kahden kehyksen välillä (tai mikä on siirtynyt / saanut liikkeen), ja kaikki muu on kuvassa mustaa (harmaalla nolla -arvon väri -skaalauspikseli). Tärkeää: valaistusolosuhteet ja otetun verkkokameran kuvan laatu (kuvausanturien laadun vuoksi) voivat vaihdella hieman kuvasta toiseen. Se tarkoittaa, että vertailukehyksen ja muiden kehysten "yhtä suuret osat" eivät ole täysin mustia taustan vähennyksen jälkeen. Tästä käyttäytymisestä huolimatta tämän projektin kuvankäsittelyssä ei ole vakavia seurauksia.
Kuvankäsittelyajan lyhentämiseksi kaapattu kehys ja vertailukehys muunnetaan harmaasävyiseksi kuvaksi ennen taustan subtratointia. Mutta miksi? Se on laskentatehokkuusongelma: kuvassa, jossa on useita värejä (värikuva), on kolme tietoa kuvapistettä kohti: punainen, sininen ja vihreä värikomponentit (vanha mutta kultainen RGB -standardi). Matemaattisesti jokainen pikseli voidaan määritellä kolmen arvon matriisiksi, joista jokainen edustaa värikomponenttia. Täten lopullinen kuva, joka ulottuu koko kuvaan, on itse asiassa kolmen kuvan komponentin sekoitus: punainen, sininen ja vihreä kuvan osat.
Sen käsittely vaatii paljon työtä! Harmaasävyisissä kuvissa jokaisella pikselillä on kuitenkin vain yksi väritieto. Värikuvan käsittely on siis kolme kertaa hitaampaa kuin harmaasävykuvassa (vähintään kolme kertaa, riippuen tekniikasta). Ja on muutakin: joissain tarkoituksissa (kuten tässä projektissa) kaikkien värien käsittely ei ole välttämätöntä tai tärkeää ollenkaan. Siksi tulimme siihen johtopäätökseen: harmaasävyisten kuvien käyttöä suositellaan kuvankäsittelyyn. Taustamäärityksen jälkeen on tarpeen käyttää Gaussian Blur -suodatinta.
Taustasta vähennetyn kuvan päälle levitetty Gaussin sumennus -suodatin tasoittaa liikkuvan havaitun kohteen kaikki muodot. Se on varmasti avuksi kuvankäsittelyn seuraavissa vaiheissa.
Vaihe 2: Binarisointi
Useimmissa kuvankäsittelytapauksissa binääritys on melkein pakollinen vaihe korostettaessa objektin / hahmon ominaisuuksia kuvassa. Syy: binäärikuvassa jokainen pikseliväri voi ottaa vain kaksi arvoa: 0x00 (musta) tai 0xFF (valkoinen). Tämä auttaa paljon kuvankäsittelyssä, jotta kuvankäsittelytekniikoiden käyttäminen seuraavissa vaiheissa vaatii vielä vähemmän "laskentatehoa". Binarisointi voidaan tehdä vertaamalla harmaasävyisen kuvan kutakin pikseliväriä tiettyyn kynnykseen. Jos pikselin värin arvo on suurempi kuin kynnys, tämä pikseliväri ottaa valkoisen arvon (0xFF), ja jos pikselin värin arvo on pienempi kuin kynnys, tämä pikselin väri olettaa mustan arvon (0x00). Valitettavasti kynnysarvon valinta ei ole niin helppoa. Se riippuu ympäristötekijöistä, kuten valaistusolosuhteista. Kynnysarvon väärä valinta voi pilata kaikki vaiheet edelleen. Joten suosittelen vahvasti, että säädät projektisi kynnystä manuaalisesti tapauksellesi ennen muita toimenpiteitä. Tämän kynnysarvon on varmistettava, että liikkuva kohde näkyy binäärikuvassa. Minun tapauksessani kynnyksen riittävän valinnan jälkeen tuloksena on se, mitä näet kuvassa 5.
Kuva 5 - binäärikuva
Vaihe 3: Laajenna
Tähän asti oli mahdollista havaita liikkuvia kohteita, korostaa niitä ja soveltaa binaarisointia, mikä johtaa melko selkeään kuvaan liikkuvasta kohteesta (= melko selkeä kuva objektista kuvankäsittelyä varten). Esineiden laskemisen valmistelu on melkein valmis. "Lähes" tarkoittaa tässä sitä, että joitakin hienosäätöjä on tehtävä ennen siirtymistä. Tässä vaiheessa on todellisia mahdollisuuksia esiintyä "reikiä" esineissä (mustia pikselimassoja valkoiseen korostettuun kohteeseen). Nämä reiät voivat olla mitä tahansa, erityisistä valaistusolosuhteista johonkin esineen muodon osaan. Kun reiät voivat "tuottaa" vääriä esineitä todellisten esineiden sisällä (riippuen siitä, kuinka suuria ja missä ne sijaitsevat), kuvassa olevien reikien seuraukset voivat olla katastrofaalisia esineiden laskemiselle. Yksi tapa poistaa nämä reiät on käyttää kuvankäsittelytekniikkaa Dilate. Käytä tätä ja reiät poistuvat.
Vaihe 4: Muotojen (ja niiden keskikohtien) etsiminen
Tässä vaiheessa meillä on korostetut kohteet, ilman reikiä sen sisällä ja valmiina seuraavaan: ääriviivojen (ja sen keskipisteiden) etsimiseen. OpenCV: ssä on resursseja havaita ääriviivat automaattisesti, mutta havaitut muodot on valittava viisaasti (vain todellisen objektin tai kohteiden valitsemiseksi). Joten ääriviivojen havaitsemisen kriteerit ovat kohteen pinta -ala pikseleinä². Jos ääriviivan pinta -ala on suurempi kuin raja (määritetty ohjelmistossa), sitä on pidettävä laskettavana todellisena objektina. Tämän aluerajan/kriteerien valinta on erittäin tärkeää, ja huono valinta tarkoittaa väärää laskentaa. Sinun on kokeiltava joitakin aluearvojen raja -arvoja ja tarkistettava, mikä sopii paremmin käyttöösi. Älä huoli, näitä rajoja ei ole vaikea löytää / säätää. Kun kaikki kuvan objektit on valittu, seuraava vaihe on piirtää sille uudelleen (tämän uudelleenmuotoilun on sisällettävä koko havaittu objekti sen sisällä). Ja tämän suorakulmion keskipiste on…. esineen keskipiste! Ehkä ajattelet "Mikä on tämän centroidin iso juttu?", Eikö? Tässä on vastauksesi: ei ole väliä kuinka suuri tai miten esine on, sen liike on sama kuin keskipiste. Toisin sanoen: tämä yksinkertainen piste nimeltä centroid edustaa koko kohteen liikettä. Se tekee laskemisesta erittäin helppoa nyt, eikö niin? Katso alla oleva kuva (kuva 6), jossa kohteen keskipiste on musta piste.
Vaihe 5: Centoridin liike ja esineiden laskeminen
Suuri finaali: vertaa objektin keskikoordinaatteja sisään- ja poistumislinjojen koordinaatteihin ja käytä edellä kuvattua laskentaalgoritmia. Ja liikkuvia esineitä lasketaan!
Lopputulos Kuten tämän postauksen alussa näkyy, tässä on projekti toiminnassa:
Suositeltava:
Arduino -laskenta -ajastin ilmoitukselle: 5 vaihetta
Arduino -laskenta -ajastin ilmoitukselle: Tämä on ajastin, joka tekee Arduino UNO: n ja LCD -näytön avulla. Syy, miksi tein tämän projektin, koska koulussamme (KCIS) meidän on varattava lounas joka keskiviikko klo 21.30 verkossa. Kuitenkin tunnetuin ja ruoka, joka on g
Arduinolla tehty laskenta -asteikko: 6 vaihetta
Arduinolla tehty laskenta -asteikko: Tämä projekti on vielä jonkin verran kesken, mutta se on saavuttanut pisteensä, jossa on hyödyllistä jakaa yksityiskohdat, jotta muut voivat hyötyä siitä ja ideasta. Se on pohjimmiltaan mittakaava, joka on rakennettu käyttämällä Arduinoa mikrokontrollerina, yleinen lo
Valon voimakkuuden laskenta BH1715: n ja Arduino Nanon avulla: 5 vaihetta
Valon voimakkuuslaskenta BH1715: n ja Arduino Nanon avulla: Eilen työskentelimme LCD -näyttöjen parissa, ja kun käsittelimme niitä, ymmärsimme valon voimakkuuden laskennan tärkeyden. Valon voimakkuus ei ole tärkeä vain tämän maailman fyysisellä alueella, vaan sillä on hyvin sanottu rooli biologisessa
Raspbianin asentaminen Raspberry Pi 3 B: hen ilman HDMI: tä - Raspberry Pi 3B: n käytön aloittaminen - Raspberry Pi: n asentaminen 3: 6 vaihetta
Raspbianin asentaminen Raspberry Pi 3 B: hen ilman HDMI: tä | Raspberry Pi 3B: n käytön aloittaminen | Raspberry Pi 3: n asentaminen: Kuten jotkut teistä tietävät, Raspberry Pi -tietokoneet ovat aivan mahtavia ja saat koko tietokoneen vain yhdelle pienelle levylle. Raspberry Pi 3 Model B: ssä on neliytiminen 64-bittinen ARM Cortex A53 kellotaajuus 1,2 GHz. Tämä tekee Pi 3: sta noin 50
Hiekkalaatikkohanke: BAC -laskenta ja tulkinta: 6 vaihetta
Hiekkalaatikkoprojekti: BAC -laskenta ja tulkinta: Haarika Gogineni, Hana Schlosser ja Benedict Uiseco Tässä projektissa yritämme laskea veren alkoholipitoisuuden (BAC) aiheen juomien määrän, painon ja sukupuolen perusteella. Lasketun BAC -arvon antamisen jälkeen ilmoitamme