Smart Cities: Hoe doen ze dat?

 

Smartcities: hoe doen ze dat?

Ik hou van het idee van slimme steden. De gedachte aan geautomatiseerde slimme energiesystemen, elektrische netten, toegangspoorten met één druk op de knop - het is een boeiend concept! Eerlijk gezegd is het een droom voor elke engineer en ik ben blij dat veel steden over de hele wereld op weg zijn om slimmer te worden.

 

Een van de kerncomponenten van een slimme stad is geautomatiseerd verkeersbeheer. En dat zette me aan het denken - zou ik mijn data science copy/paste know how kunnen gebruiken om een ​​voertuigdetectiemodel te bouwen dat een rol zou kunnen spelen in slim verkeersbeheer?

 

 

Denk er eens over na - als je een voertuigdetectiesysteem in een verkeerslichtcamera zou kunnen integreren, zou je gemakkelijk een aantal nuttige dingen tegelijkertijd kunnen volgen:

 

Hoeveel voertuigen staan ​​er overdag op het verkeersknooppunt?

Vanaf welk tijdstip bouwt het verkeer zich op?

Wat voor soort voertuigen rijden over de kruising (zware voertuigen, auto's, enz.)?

Is er een manier om het verkeer te optimaliseren en door een andere straat te sturen?

Enzovoort. De toepassingen zijn eindeloos!

 

Wij mensen kunnen gemakkelijk in een flits objecten uit complexe scènes detecteren en herkennen. Het vertalen van dat denkproces naar een machine vereist echter dat we de kunst van objectdetectie leren met behulp van computervisionalgoritmen.

Dus in dit artikel beschrijven we hoe je een automatisch voertuigdetector en tellermodel kan bouwen. Hier is een voorproefje van wat je kan verwachten:

 

Automatische voertuigdetectie

 

Waauww! Laten we het contact aanzetten en starten! De echt geïnteresseerden kunnen bij de redactie het Colab notebook met de Python code voor het model opvragen! We gaan verder met het beschrijven van het idee achter het detecteren van bewegende objecten in video’s en de bijbehorende termen.

 

Het idee achter het detecteren van bewegende objecten in video's

 

Objectdetectie is een fascinerend veld in computervision. Het gaat naar een heel nieuw niveau als we te maken hebben met videodata. De complexiteit stijgt een tandje hoger, maar dat geldt ook voor de beloningen!

 

Met behulp van algoritmen voor objectdetectie kunnen we super praktische hoogwaardige taken uitvoeren, zoals bewaking, verkeersbeheer, misdaadbestrijding, enz.

 

Er zijn een aantal deeltaken die we kunnen uitvoeren bij objectdetectie, zoals het tellen van het aantal objecten, het vinden van de relatieve grootte van de objecten of het vinden van de relatieve afstand tussen de objecten. Al deze subtaken zijn belangrijk omdat ze bijdragen aan het oplossen van enkele van de moeilijkste problemen in de echte wereld.

 

Laten we eens kijken naar enkele van de opwindende praktijkgevallen van objectdetectie in de echte wereld.

 

Tegenwoordig wordt video-objectdetectie toegepast in een breed scala van branches. De praktijk varieert van videobewaking tot sportuitzendingen tot robotnavigatie.

 

Dit is het goede nieuws: de mogelijkheden zijn eindeloos als het gaat om toekomstige gebruiksscenario's voor het detecteren en volgen van video-objecten. Hier heb ik enkele van de interessante applicaties opgesomd:

 

  1. Crowd telling (heel nuttig bij social distancing)

 

  1. Detectie en herkenning van kentekenplaten (criminaliteitbestrijding)

 

  1. Ballen volgen in sport (sportstatistics)

 

  1. Robotica

 

  1. Verkeersbeheer (smartcities, daarover gaat dit artikel)

 

Essentiële concepten die je moet weten over detectie van video-objecten

Er zijn bepaalde sleutelconcepten die je moet kennen voordat je aan de slag gaat met het bouwen van een eigen videodetectiesysteem. Als u eenmaal vertrouwd bent met deze basisconcepten, kunt je je eigen detectiesysteem bouwen voor elk gekozen praktijkgeval.

Dus, hoe zou je een bewegend object in een video willen detecteren?

Ons doel is om de coördinaten van het bewegende object vast te leggen en dat object in de video te markeren.

 

Kijk eens naar een frame van een video hieronder:

 

We zouden willen dat ons model het bewegende object in een video detecteert, zoals geïllustreerd in de afbeelding hierboven. De rijdende auto wordt gedetecteerd en er ontstaat een begrenzingskader rond de auto.

 

Er zijn meerdere technieken om dit probleem op te lossen. Je kunt een deep learning-model trainen voor objectdetectie of u kunt een vooraf getraind model kiezen en dit afstemmen op uw gegevens. Dit zijn voorbeelden van ‘supervised’ datatraining. Dat vereist gelabelde gegevens om het objectdetectiemodel te trainen.

 

In dit artikel zullen we ons concentreren op de ‘unsupervised’ manier van objectdetectie in video's, d.w.z. objectdetectie zonder gebruik te maken van gelabelde gegevens. We zullen de techniek van framedifferencing gebruiken. Laten we eens zien hoe dat werkt!

Frame differencing

Een video is een set frames die in de juiste volgorde op elkaar zijn gestapeld. Dus als we een object in een video zien bewegen, betekent dit dat het object zich op elk ander frame op een andere locatie bevindt.

Wanneer we aannemen dat behalve dat object niets anders bewoog in een paar opeenvolgende frames, dan zal het pixelverschil van het eerste frame en het tweede frame de pixels van het bewegende object markeren. Dat levert de pixels en de coördinaten van het bewegende object. Dit is in grote lijnen hoe de methode voor framedifferencing werkt.

Laten we een voorbeeld nemen. Bekijk de volgende twee frames uit een video:

 

Zie je het verschil tussen de twee frames?

Ja - de positie van de hand die de pen vasthoudt is veranderd van frame 1 naar frame 2. De rest van de objecten is helemaal niet verplaatst. Dus, zoals ik eerder al zei, om het bewegende object te lokaliseren, zullen we framedifferencing uitvoeren. Het resultaat ziet er als volgt uit:

 

 

Je kunt het witte gebied zien waar de hand aanvankelijk aanwezig was. Afgezien daarvan is het notitieblok ook een beetje gemarkeerd langs de randen. Dit kan te wijten zijn aan de verandering in de verlichting door de beweging van de hand. Het is raadzaam om ongewenste detectie van stilstaande objecten te verwijderen. Daarom moeten we bepaalde beeld preprocessing op de frames uitvoeren (image thresholding).

 

Image thresholding

Bij deze methode krijgen de pixelwaarden van een grijswaardenafbeelding een van de twee waarden toegewezen die zwart-witte kleuren vertegenwoordigen op basis van een drempelwaarde. Dus als de waarde van een pixel groter is dan een drempelwaarde, krijgt deze de ene waarde toegewezen, anders wordt de andere waarde toegewezen.

 

In ons geval zullen we image thresholding toepassen op de uitvoerafbeelding van het frameverschil in de vorige stap:

 

Je kunt zien dat een groot deel van het ongewenste wit oplichtende gebied verdwenen is. De gemarkeerde randen van het notitieblok zijn niet meer zichtbaar. De resulterende afbeelding is als het ware een binaire afbeelding omdat er maar twee kleuren in zitten. In de volgende stap zullen we zien hoe we deze oplichtende regio's kunnen vastleggen.

Contouren zoeken

De contouren worden gebruikt om de vorm van een gebied in de afbeelding met dezelfde kleur of intensiteit te identificeren. Contouren zijn als grenzen rond interessante regio's. Dus als we contouren op de afbeelding toepassen na de drempelstap, zouden we het volgende resultaat krijgen:

 

 

De witte gebieden zijn omgeven door grijsachtige grenzen die niets anders zijn dan contouren. Via ons algoritme kunnen we gemakkelijk de coördinaten van deze contouren krijgen. Dit betekent dat we de locaties van de oplichtende regio's kunnen bepalen.

 

Merk op dat er meerdere oplichtende gebieden zijn en dat elk gebied wordt omcirkeld door een contour. In ons geval is de contour met de maximale oppervlakte het gewenste gebied. Daarom is het beter om zo min mogelijk contouren te hebben.

 

In de afbeelding hierboven zijn er nog steeds enkele nutteloze fragmenten die wit oplichten. Er is dus nog ruimte voor verbetering. Het idee is om de witte gebieden die in elkaars nabijheid liggen samen te voegen om minder contouren te hebben. Daarvoor kunnen we een andere techniek gebruiken die bekend staat als beelddilatatie (Image Dilation).

 

Image Dilation

Dit is een convolutiebewerking op een afbeelding waarbij een kernel (een matrix) over de hele afbeelding wordt doorgegeven.

Om je een gevoelsmatig idee te geven: de afbeelding aan de rechterkant is de ‘verwijde’ versie van de afbeelding aan de linkerkant:

 

 

 

Laten we dus beeldverwijding toepassen op onze afbeelding en dan zullen we de contouren opnieuw vinden:

 

 

Het blijkt dat veel van de gefragmenteerde regio's in elkaar zijn gesmolten. Nu kunnen we de contouren in deze afbeelding opnieuw vinden:

 

 

 

Hier hebben we slechts vier kandidaat-contouren waaruit we degene met het grootste gebied zouden kiezen. U kunt deze contouren ook uitzetten op het originele frame om te zien hoe goed de contouren het bewegende object omringen:

 

 

Computervision toegepast op het verkeer

We laten nu aan de hand van real life beelden zien hoe het bovenstaande uitwerkt wanneer we dat toepassen op verkeersstromen.

Dit zijn de opvolgende frames uit een verkeersvideo:

 

 

Het is moeilijk om een ​​verschil te vinden in deze twee frames, nietwaar? Zoals eerder besproken, zal het bepalen van het verschil tussen de pixelwaarden van twee opeenvolgende frames ons helpen de bewegende objecten te observeren. Laten we dus de techniek op de bovenstaande twee frames gebruiken (framedifferencing):

 
verkeerdifferencering

 

Nu kunnen we de bewegende objecten (de auto’s) duidelijk zien in de 13e en 14e frames. Al het andere dat niet bewoog, is afgetrokken.

 

Image thresholding

Laten we eens kijken wat er gebeurt na het toepassen van een drempelwaarde op de bovenstaande afbeelding:

 

 

Nu zien de bewegende objecten (voertuigen) er veelbelovender uit en is het meeste ‘noise of ruis’ (ongewenste witte gebieden) verdwenen. De oplichtende gebieden zijn echter een beetje gefragmenteerd. We kunnen dus image dilation toepassen op deze afbeelding:

 

Image dilation

 

 

De bewegende objecten hebben meer compacte oplichtende gebieden.

We gaan echter niet het hele frame gebruiken om bewegende voertuigen te detecteren. We selecteren een zone. Als een voertuig die zone binnenrijdt dan wordt alleen dat individuele voertuig gedetecteerd.

 

Met welke (willekeurige) zone gaan we werken:

 

 

 

Het gebied onder de horizontale lijn y = 80 is onze voertuigdetectiezone. We zullen elke beweging detecteren die plaatsvindt onder deze lijn.

 

Laten we nu de contouren plakken in het originele frame:

 

 

Koel! Alleen de contouren van voertuigen die zich binnen het detectiebereik bevinden, zijn zichtbaar. Zo detecteren we voertuigen in alle frames.

In dit artikel zagen we hoe we de techniek voor framedifferencing gebruiken om detectie van bewegende objecten in video's uit te voeren. We hebben ook verschillende concepten en onderwerpen behandeld rond objectdetectie en beeldverwerking. Vervolgens pasten we deze kennis toe op een verkeersbeheerssysteem dat we zelf kunnen bouwen in Python. De code daarvoor is beschikbaar bij de redactie.

Prateek Joshi/Leo Vogels