Indholdsfortegnelse:

Raspberry Pi Object Counting: 5 trin
Raspberry Pi Object Counting: 5 trin

Video: Raspberry Pi Object Counting: 5 trin

Video: Raspberry Pi Object Counting: 5 trin
Video: Raspberry Pi LESSON 63: Object Detection on Raspberry Pi Using Tensorflow Lite 2024, November
Anonim
Raspberry Pi Object Counting
Raspberry Pi Object Counting

Computersyn er uden tvivl en fantastisk ting! Ved hjælp af dette får en computer evnen til at "se" og fornemme miljøet omkring, hvad der gør det muligt at udvikle komplekse, nyttige og fede applikationer. Applikationer som ansigtsregistrering og genkendelse, objektsporing og genkendelse er mere og mere til stede i vores daglige aktiviteter takket være fremskridt inden for computersyn.

I betragtning af hvor avancerede og tilgængelige computervisionrammer og -værktøjer passer applikationen, der er beskrevet i denne artikel, godt: ved hjælp af en simpel Raspberry PI og en omkostningsfri og open-source computer vision-ramme kaldet OpenCV til at tælle objekter i bevægelse, mere præcist hvor meget genstande går ind og ud af en bestemt overvåget zone.

Trin 1: Bliv dybere: Hvordan kan objektbevægelse registreres i en billedstrøm?

Bliver dybere: Hvordan kan objektbevægelse registreres i en billedstrøm?
Bliver dybere: Hvordan kan objektbevægelse registreres i en billedstrøm?

Nu er det tid til at blive dybere i billedbehandlingsmateriale:

hvordan man får nogle webcam stream -billeder og opdager, at noget er flyttet dertil

Det består af fem trin:

Trin 1: For at markere objektet i bevægelse

Som defineret i klassisk fysik er en reference nødvendig for at se, at noget bevæger sig, eller hvis det står stille. Her for at afgøre, om noget er flyttet, er det stort set det samme: hver enkelt webcam -stream fanget ramme vil blive sammenlignet med en referenceramme. Hvis noget er anderledes, er noget blevet flyttet. Det er simpelt, som det lyder.

Denne referenceramme skal optages under de mest perfekte forhold (intet bevæger sig f.eks.). I billedbehandlingsverdenen består denne sammenligning mellem en fanget ramme og en referenceramme i en teknik, der kaldes baggrundsubtraktion. Baggrundsubtration består i, at bogstaveligt talt trækker pixel-til-pixel farveinformation fra den fangede ramme og referencerammen. Så det resulterende billede fra denne proces vil kun fremhæve / vise med flere detaljer, hvad der er forskelligt mellem disse to rammer (eller, hvad der har flyttet / fik bevægelse) og alt andet vil være sort i billedet (farven på nulværdi på en grå -skala pixel). Vigtigt: belysningsforholdene og kvaliteten af det webcam -billede, der er taget (på grund af kvaliteten af capture -sensorer), kan variere lidt fra ramme til billede. Det indebærer, at de "lige dele" fra referenceramme og andre rammer ikke vil være totalt sorte efter baggrundssubtraktion. På trods af denne adfærd er der ingen alvorlige konsekvenser i de næste trin billedbehandling i dette projekt.

For at minimere billedbehandlingstiden, før en baggrundsubtration foretages, konverteres fanget ramme og referenceramme til et gråtonebillede. Men hvorfor? Det er et computereffektivitetsproblem: et billede, der præsenterer flere farver (farvebillede), har tre oplysninger pr. Pixel: Rød, blå og grøn farvekomponenter (den gamle, men guld RGB -standard). Så matematisk kan hver pixel defineres som et array med tre værdier, som hver repræsenterer en farvekomponent. Derfor udvides det til hele billedet, og det endelige billede vil faktisk være en blanding af tre billedkomponenter: Røde, blå og grønne billedkomponenter.

For at behandle det kræves der meget arbejde! Men i gråtonebilleder har hver pixel kun én farveinformation. Så behandlingen af et farvebillede er tre gange langsommere end i gråskalebilleder (mindst tre gange, afhængigt af hvilken teknik der er involveret). Og der er mere: til nogle formål (som dette projekt) er alle farver ikke nødvendige eller vigtige overhovedet. Derfor kom vi til konklusionen: Brug af gråtonebilleder anbefales stærkt til billedbehandlingsformål. Efter subtration i baggrunden er det nødvendigt at anvende Gaussian Blur -filter.

Filteret Gaussian Blur, der anvendes over et substraheret baggrundsbillede, udglatter alle konturer af det bevægede detekterede objekt. Det vil helt sikkert være en hjælp i de næste trin i billedbehandling.

Trin 2: Binærisering

Binærisering
Binærisering

I de fleste tilfælde af billedbehandling er binarisering næsten et obligatorisk trin efter fremhævning af objekter / karakteristika i et billede. Årsag: i et binært billede kan hver pixelfarve kun antage to værdier: 0x00 (sort) eller 0xFF (hvid). Dette hjælper meget på billedbehandlingen for at kræve endnu mindre "computerkraft" til at anvende billedbehandlingsteknikker i de næste trin. Binarisering kan udføres ved at sammenligne hver pixelfarve i gråtonebilledet med en bestemt tærskel. Hvis værdien af pixelfarven er større end tærsklen, antager denne pixelfarve hvid værdi (0xFF), og hvis værdien af pixelfarven er lavere end tærsklen, vil denne pixelfarve antage sort værdi (0x00). Desværre er tærskelværdiens valg ikke så let at foretage. Det afhænger af miljøfaktorer, såsom lysforhold. Et forkert valg af en tærskelværdi kan ødelægge alle trin yderligere. Så jeg anbefaler på det kraftigste, at du manuelt justerer en tærskel i projektet for din sag inden yderligere handlinger. Denne tærskelværdi skal sikre, at det bevægelige objekt vises i binært billede. I mit tilfælde resulterer det, efter en tærskel er tilstrækkeligt valg, i det, du ser i figur 5.

Figur 5 - binært billede

Trin 3: Fortynd

Indtil nu var det muligt at opdage bevægelige objekter, fremhæve dem og anvende binærisering, hvilket resulterer i et ret klart billede af objekt i bevægelse (= temmelig klart billede af objektet til billedbehandlingsformål). Forberedelsen til objekttælling er NÆSTEN udført. "NÆSTEN" her betyder, at der er nogle fine justeringer, der skal foretages, inden vi går videre. På dette tidspunkt er der reelle chancer for tilstedeværelse af "huller" i objekterne (sorte masser af pixels i det hvide fremhævede objekt). Disse huller kan være alt fra særlige lysforhold til en del af objektformen. Når huller først kan "producere" falske genstande inde i virkelige objekter (afhængigt af hvor store og hvor de er placeret), kan konsekvenserne af hullers tilstedeværelse i et billede være katastrofale for objekternes optælling. En måde at fjerne disse huller på er ved hjælp af en billedbehandlingsteknik kaldet Dilate. Brug dette, og huller forsvinder.

Trin 4: Søgningen efter konturerne (og dens centroider)

Søgningen efter konturerne (og dens centroider)
Søgningen efter konturerne (og dens centroider)

På dette tidspunkt har vi de fremhævede objekter, ingen huller inde i det og klar til det næste: søgningen efter konturerne (og dens centroider). Der er ressourcer i OpenCV til automatisk at registrere konturer, men de registrerede målinger skal vælges klogt (kun for at vælge det eller de rigtige objekter). Så kriterierne for at detektere konturerne er objektets areal målt i pixels². Hvis en kontur har et højere område end en grænse (konfigureret i software), skal den betragtes som et reelt objekt, der skal tælles. Valget af denne områdegrænse/kriterier er meget vigtigt, og et dårligt valg betyder her forkerte optællinger. Du skal prøve nogle værdier for grænseværdier for områdeværdi og kontrollere, hvad der passer bedre til din brug. Bare rolig, disse grænser er ikke så svære at finde / justere. Når alle objekterne i billedet er valgt, er det næste trin at tegne et retangle på det (dette retangle skal indeholde et helt registreret objekt inde i det). Og midten af dette rektangel er…. objektet centroid! Du tænker måske "Hvad er den store ting med denne centroid?", Ikke? Her er dit svar: uanset hvor stor eller hvordan formen på objektet er, er dens bevægelse den samme som centroid. Med andre ord: dette enkle punkt kaldet centroid repræsenterer al objektets bevægelse. Det gør tællingen meget enkel nu, ikke sandt? Se billedet herunder (figur 6), hvor objektets centroid er repræsenteret som et sort punkt.

Trin 5: Centorids bevægelse og objekttælling

Den store finale: sammenlign objektets centroid -koordinater med indgangs- og udgangslinjekoordinater og anvend tællalgoritmen beskrevet før. Og der bliver talt med objekter i bevægelse!

Slutresultat Som vist i begyndelsen af dette indlæg er her projektet i aktion:

Anbefalede: