Blog - Hoe kan computervisie zwembaden detecteren?

Dit artikel, dat u 5 minuten kost om te lezen, is geschreven door 2 postdoctorale studenten toegepaste kunstmatige intelligentie aan de Erasmus Universiteit voor Toegepaste Wetenschappen en Kunsten in Brussel. Samen begonnen we op 14 maart aan onze stage van vier weken bij Micropole Belux.

Samenvatting

Tijdens onze stage hebben we een pooldetectiemodel gemaakt. We hebben dit model gebouwd op basis van satellietbeelden die we op het web vonden. Omdat we in het Microsoft Azure team van Micropole werkten, gebruikten we het Microsoft Azure Cloud platform voor al onze taken.

Stapsgewijze presentatie van het maken van een zwembaddetectiemodel

Waar en hoe heb je de gegevens vandaan?

De eerste stap in het proces was het verzamelen van gegevens of afbeeldingen van de website zoom.earth. Met behulp van een reeds bestaande dataset van alle adressen in België konden we al beginnen met het extraheren van gegevens, aangezien deze niet alleen het adres bevatte, maar ook de lengte- en breedtegraad van de locatie. De URL zoom.earth in de zoekbalk van uw browser had deze functies (lengtegraad = zwarte rechthoek en breedtegraad = gele rechthoek), dus we konden ze gebruiken om ons naar de juiste URL te leiden.

AI-Pool-Detectie 1

Wij besloten het Azure Cloud Platform te verkennen en begonnen de Azure Functions component te gebruiken. Na wat graven in JavaScript schreven we lokale code die naar de URL van de opgegeven locatie kon navigeren en vervolgens een screenshot van die webpagina kon maken. De volgende stap was het verwijderen vanonnodige elementen die zichtbaar waren in de schermafbeelding en het verkleinen van de webpagina voordat de schermafbeelding werd gemaakt, zoals te zien is in de onderstaande satellietfoto.

satellietbeeld

Na het uitvoeren van onze lokale JavaScript-code kregen we het volgende resultaat:

het screenshot

Dit is waar we op moeilijkheden begonnen te stuiten, want we wilden de schermafdruk van de webpagina opslaan op een Azure-opslagaccount (het bestandssysteem dat in Azure wordt gebruikt) terwijl het lokaal werd uitgevoerd. We kwamen er niet uit hoe we het met deze aanpak voor elkaar konden krijgen, en aangezien we maar 4 weken hadden voor deze opdracht, zijn we andere opties gaan onderzoeken.

Onze tweede optie was Selenium, een webtestprogramma. Door deze bibliotheek in Python te gebruiken, kunnen we precies hetzelfde doen als in JavaScript. Het belangrijkste verschil lag echter in de beeldopslag. Omdat we niet langer Azure Function gebruikten, maar waren overgestapt op Azure Databricks, konden we onze opslagaccount aanmaken in Notepad en onze schermafbeeldingen in deze map opslaan. Na aanpassing van onze JavaScript-code kregen we hetzelfde resultaat als de afbeelding hierboven.

Hoe labelen we de gegevens om ons model te trainen en te testen?

Na het verzamelen van alle gegevens moesten wij aan de ruwe gegevens (in dit geval de beelden) relevante informatie toekennen door ze te labelen.

Tijdens het etiketteringsproces moesten we 2 etiketten definiëren:

  • zwembad (1) of
  • geen zwembad (0).

Als er een pool was, kenden we het label 1 toe, en als dat er niet was, het label 0. We zorgden ervoor dat alle beelden met hetzelfde label in dezelfde subdirectory werden gegroepeerd, zodat ze later konden worden gebruikt voor de gegevensanalyse in de volgende stap.

Hoe leer je een computer wat een zwembad is?

Voor de gegevensanalyse gebruikten wij een neuraal netwerk, en meer bepaald transfer learning. Dit type neuraal netwerk neemt een vooraf getraind model dat relevant kan zijn in verschillende situaties, in ons geval beelddetectie, en past het toe op deze nieuwe situatie (zwembaddetectie). Wij gebruikten het Residual Network, of ResNet, als voorgetraind model voor pooldetectie. Deze netwerken hebben een diepte van 18 tot 152 lagen. Hoe meer lagen, hoe complexer het voorgetrainde model.

Na training van het neurale netwerk op onze dataset merkten we dat de resultaten niet zo goed waren als we hadden gehoopt. Vanwege deze teleurstellende resultaten besloten wij tot een andere aanpak.

Deze keer hebben we geen algoritmen voor machinaal leren gebruikt, maar de juiste blauwe kleur uit elk beeld gefilterd, zoals hieronder te zien is. Als er genoeg blauw in een afbeelding zat, gaven we die het label 1 (pool). Dit model heeft een nauwkeurigheid van 85% en kan in 80% van de gevallen de aanwezigheid van een pool en in 90% van de gevallen de afwezigheid van een pool correct voorspellen. Het nadeel is dat het binnenbaden niet kan voorspellen.

Conclusie

De satellietbeelden kunnen door Selenium via Databricks in een Azure-cloudomgeving worden verzameld. Azure ML kan worden gebruikt om onze dataset te labelen en uiteindelijk een model te trainen om voorspellingen te doen.

Het uitproberen van de verschillende benaderingen was een zeer leerzame ervaring. We hebben dit project met veel plezier gedaan en genoten van de discussies met collega's. Wij danken Egon, Kenny, Esa en Antoine in het bijzonder voor hun hulp bij dit project en voor het vriendelijk beantwoorden van onze vragen.

Meer weten?

Neem contact met ons op!

AWS Public Sector Summit 2024: Een diepe duik in innovatie en duurzaamheid

AWS Public Sector Summit 2024: Een diepe duik in de...

Ontdek de nieuwste innovaties en toezeggingen op het gebied van ...
Blog - Microsoft Fabric: 5 tips en trucs om aan de slag te gaan (publieke preview)

Blog - Microsoft Fabric: 5 tips...

Ontdek hoe u Microsoft Fabric kunt gaan gebruiken met deze...
Blog - Beveiligingsfuncties van de cloud 

Blog - De beveiligingsfuncties van...

Het doel van deze blogpost is om u wat advies te geven...
Laten we samen innoveren
Gepassioneerd door data?

Contacteer ons