Innehållsförteckning:

Raspberry Pi -objekträkning: 5 steg
Raspberry Pi -objekträkning: 5 steg

Video: Raspberry Pi -objekträkning: 5 steg

Video: Raspberry Pi -objekträkning: 5 steg
Video: Fix Black screen on boot | No video output | Raspberry Pi Guide 2024, November
Anonim
Raspberry Pi -objekträkning
Raspberry Pi -objekträkning

Datorsyn är utan tvekan en fantastisk grej! Med hjälp av detta får en dator förmågan att "se" och avkänna omgivningen bättre, vilket möjliggör utveckling av komplexa, användbara och coola applikationer. Applikationer som ansiktsdetektering och igenkänning, spårning av objekt och objektdetektering är mer och mer närvarande i våra dagliga aktiviteter, tack vare framsteg i datorsyn.

Med tanke på hur avancerade och tillgängliga är datorsynsramar och verktyg passar applikationen som beskrivs i den här artikeln bra: med en enkel Raspberry PI och en kostnadsfri och öppen källkod för datorsyn kallad OpenCV för att räkna objekt i rörelse, mer exakt hur mycket objekt går in och ut ur en viss övervakad zon.

Steg 1: Att bli djupare: Hur kan objektrörelse detekteras i en bildström?

Att bli djupare: Hur kan objektrörelse detekteras i en bildström?
Att bli djupare: Hur kan objektrörelse detekteras i en bildström?

Nu är det dags att bli djupare i bildbehandlingssaker:

hur man får några webbkameraströmbilder och upptäcker att något har flyttat dit

Den består av fem steg:

Steg 1: För att markera objektet i rörelse

Enligt definitionen i klassisk fysik är en referens nödvändig för att se att något rör sig eller om det står stilla. Här, för att avgöra om något har flyttat, är det ungefär detsamma: varje enskild webbkameraström fångas ram jämförs med en referensram. Om något är annorlunda har något flyttats. Det är enkelt som det låter.

Denna referensram måste fångas in under de mest perfekta förhållandena (inget rör sig, till exempel). I bildbehandlingsvärlden består denna jämförelse mellan en fångad ram och en referensram i en teknik som kallas bakgrundssubtraktion. Bakgrundsubtration består i att bokstavligen subtrahera pixel-till-pixel-färginformation från den fångade ramen och referensramen. Så den resulterande bilden från denna process kommer bara att markera / visa med mer detaljer bara vad som är annorlunda mellan dessa två ramar (eller, vad som har flyttat / fått rörelse) och allt annat kommer att vara svart i bilden (färgen på nollvärde på en grå -skala pixel). Viktigt: belysningsförhållandena och kvaliteten på webbkamerabilden som tas (på grund av kvaliteten på fångssensorerna) kan variera något från bild till bild. Det innebär att "lika delar" från referensramen och andra ramar inte kommer att vara totalt svarta efter bakgrundssubtraktion. Trots detta beteende finns det inga allvarliga konsekvenser i nästa steg bildbehandling i detta projekt.

För att minimera bildbehandlingstiden, innan du gör en bakgrundssubtration, konverteras den tagna ramen och referensramen till en gråskalebild. Men varför? Det är ett datoreffektivitetsproblem: en bild som presenterar flera färger (färgbild) har tre informationer per pixel: Röd, blå och grön färgkomponenter (den gamla men guld RGB -standarden). Så matematiskt kan varje pixel definieras som en matris med tre värden, var och en representerar en färgkomponent. Därför kommer den slutliga bilden i själva verket att vara en blandning av tre bildkomponenter: röda, blå och gröna bildkomponenter.

För att bearbeta det krävs mycket arbete! Men i gråskalebilder har varje pixel bara en färginformation. Så bearbetningen av en färgbild är tre gånger långsammare än i gråskalebilder (minst tre gånger, beroende på vilken teknik det handlar om). Och det finns mer: för vissa ändamål (som detta projekt), bearbeta alla färger är inte nödvändigt eller viktigt alls. Därför kom vi till slutsatsen: användning av gråskalebilder rekommenderas starkt för bildbehandlingsändamål. Efter bakgrundssubtration är det nödvändigt att applicera Gaussian Blur -filter.

Det Gaussiska oskärpa -filtret som appliceras över den subtraherade bilden i bakgrunden jämnar ut alla konturer av det rörliga detekterade objektet. Visst kommer det att vara till hjälp i nästa steg i bildbehandling.

Steg 2: Binärisering

Binärisering
Binärisering

I de flesta fall av bildbehandling är binärisering nästan ett obligatoriskt steg efter markering av objekt / karaktäristik i en bild. Orsak: i en binär bild kan varje pixelfärg anta endast två värden: 0x00 (svart) eller 0xFF (vit). Detta hjälper mycket bildbehandlingen för att kräva ännu mindre "datorkraft" för att tillämpa bildbehandlingsteknik i nästa steg. Binärisering kan göras genom att jämföra varje pixelfärg i gråskalebilden med ett visst tröskelvärde. Om värdet på pixelfärgen är större än tröskeln, kommer denna pixelfärg att anta vitt värde (0xFF), och om värdet på pixelfärgen är lägre än tröskeln, kommer denna pixelfärg att anta svart värde (0x00). Tyvärr är tröskelvärdes val inte så lätt att göra. Det beror på miljöfaktorer, till exempel ljusförhållanden. Ett felaktigt val av ett tröskelvärde kan förstöra alla steg ytterligare. Så jag rekommenderar starkt att du manuellt justerar en tröskel i projektet för ditt ärende innan du gör ytterligare åtgärder. Detta tröskelvärde måste säkerställa att det rörliga objektet visas i binär bild. I mitt fall, efter ett tröskelns tillräckliga val, resulterar det i det du ser i figur 5.

Figur 5 - binär bild

Steg 3: Späd ut

Fram till nu var det möjligt att upptäcka rörliga objekt, markera dem och tillämpa binärisering, vilket resulterar i en ganska klar bild av rörligt objekt (= ganska klar bild av objektet för bildbehandlingsändamål). Förberedelsen för objekträkning är NÄSTAN klar. "NÄSTAN" här betyder att det finns några fina justeringar att göra innan vi går vidare. Vid denna tidpunkt finns det verkliga chanser att det finns "hål" i föremålen (svarta massor av pixlar i det vita markerade objektet). Dessa hål kan vara vad som helst, från särskilda ljusförhållanden till någon del av objektets form. När hål kan "producera" falska föremål inuti verkliga föremål (beroende på hur stora och var de är placerade) kan konsekvenserna av håls närvaro i en bild vara katastrofala för objekts räkning. Ett sätt att eliminera dessa hål är att använda en bildbehandlingsteknik som kallas Dilate. Använd detta och hål försvinner.

Steg 4: Sökningen efter konturerna (och dess centroider)

Sökningen efter konturerna (och dess centroider)
Sökningen efter konturerna (och dess centroider)

Vid denna tidpunkt har vi de markerade objekten, inga hål inuti och redo för vad som är nästa: sökningen efter konturerna (och dess centroider). Det finns resurser i OpenCV för att upptäcka konturer automatiskt, men de upptäckta räknarna måste väljas klokt (för att bara välja det eller de riktiga föremålen). Så kriterierna för att detektera konturerna är objektets yta, mätt i pixlar². Om en kontur har en högre yta än en gräns (konfigurerad i programvara), så måste den betraktas som ett verkligt objekt som ska räknas. Valet av denna områdegräns/kriterier är mycket viktigt, och ett dåligt val här betyder felräkningar. Du måste prova några gränsvärden för områdevärden och kontrollera vad som passar bättre för din användning. Oroa dig inte, dessa gränser är inte så svåra att hitta / justera. När alla objekt i bilden är plockade är nästa steg att rita en retangle på den (denna retangle måste innehålla ett helt upptäckt objekt inuti den). Och mitten av denna rektangel är…. objektet centroid! Du kanske tänker "Vad är grejen med denna centroid?", Eller hur? Här är ditt svar: spelar ingen roll hur stor eller hur formen på objektet är, dess rörelse är densamma som centroiden. Med andra ord: denna enkla punkt som kallas centroid representerar all rörelse av objektet. Det gör räkningen väldigt enkel nu, eller hur? Se bilden nedan (figur 6), där objektets centroid representeras som en svart punkt.

Steg 5: Centorids rörelse och objekträkning

Den stora finalen: jämför objekts centroidkoordinater med koordinater för in- och utgångslinjer och tillämp räkningsalgoritmen som beskrivits tidigare. Och det kommer att räkna på föremål i rörelse!

Slutresultat Som visas i början av detta inlägg, här är projektet i aktion:

Rekommenderad: