Hva det koster å kjøre inn i en 50-sone i 85 km/t, det er ikke med på listen hos Politiet over “Gebyrer, bøter, og andre straffereaksjoner”. Årsaken er at vi snakker alvorlig traffikklovbrudd, om hvilke Politiet skriver Straffen for alvorlige trafikklovbrudd kan være bøter, fengsel, erstatningsansvar og tap av førerett. Det kan, med andre ord, gi komplikasjoner i hverdagen å gå glipp av et 50-skilt! Jeg som har gammel GPS (2006), gammel bil (2009), og gammel motorsykkel (2011), jeg har ingenting om bord som kan fortelle meg at jeg nettopp kjørte fra 80 og inn i 50-sonen (og bør (må!) bremse).
Så det må vi lage oss.
Input
Først og fremst må det oppdages at vi nærmer oss et trafikkskilt, det må identifiseres som et fartskilt (heter det fartskilt, fartsskilt, eller må jeg skrive skilt som indikerer fartsgrense? Jeg bruker fartskilt!), og grensen må forsøkes bestemt. Hva som skal skje avhenger av hva tilstanden er i øyeblikket.
Her er hva som må gjøres:
- Et web-kamera monteres i bilen. “Noen” kjører rundt i landet og filmer så mange trafikkskilt som er nødvendig. Alle fartskilt, naturligvis, men også andre typer skilt, og masse vei uten skilter. Det må lages noe som gjør det enkelt for sjåføren å skru filmingen av og på;
- Filmsnuttene må kategoriseres:
- Dersom snutten viser et fartskilt, og skiltet er 50, 70…, da legges snutten i en katalog avhengig av hva den viser. Det blir en praktisk utfordring å skaffe film av mange nok skilt av hver type, og
- Alt annet legges i én annen katalog.
- Alle snuttene må splittes i et (stort) antall bilder. Om en snutt som viser passering av et skilt tar ti sekunder (230 meter i 80 km/t), og det er 10 bilder/sek, da blir hver snutt til 100 bilder. I de “første” bildene vil trolig skiltet være for smått til å identifiseres (selv et bilde 100×100 px gir en tensor med 10.000 elementer!), og
- Bildene må kjøres inn i en modell for maskinlæring.
Målet er at modellen skal kunne ta et bilde og svare enten “Nei, dette bildet viser ikke et fartskilt”, eller “Fartsgrensen vil nå bli 60 km/t”. Trafikkskilt er jo vanligvis orientert slik at de, sett fra bilførerens posisjon, er sirkler eller nær sirkler (svært fete ellipser). Mulig bør man derfor først kjøre “edge detection”, for så å kjøre bare runde kandidater ned i modellen. Mye å undersøke her. Trøsten er at noen allerede har laget Python, NumPy, OpenCV, Keras, og Tensorflow, og skrevet boken Deep learning with Python.
Det hele realisere ved at et wab-cam monteres ett eller annet sted i fronten, Det tar film som konverteres til bilder i sann tid, eller bare bilder så fort som teknologien tillater. Det er ikke nødvendig å analysere mer enn ett eller to bilde(r) i sekundet, vil jeg tro.
Output
Først og fremst skal gjeldende fartsgrense indikeres. Dernest et lite blink (eller noe) for å indikere at et fartskilt er observert. Til slutt en kraftigere indikasjon på at fartsgrensen settes ned (bøter venter!).
Vi skal bruke LED til å fortelle oss ting. Vi trenger et deksel med 15 hull. En standard LED er 5mm, men kanskje er 3mm tilstrekkelig. Eller en mix, hvor det viktige gis en 5mm mens det andre 3mm.
Jeg tviler på at det er mulig å kjøre en modell for maskinlæring på Arduino, så planen er en “skikkelig” PC for den delen, og en Arduino for å drive LED. Her må vi altså opp med en protokoll. Motorsykkelen, og sikkert også bilen, har CANbus som burde kunne brukes til dette; en annen gang, sier jeg bare.
LED skal plasseres gjennom dekselet, og silikoneres fast. Dekselet settes på en standard boks av noe slag, slik at det hele blir (minst) IP66 for å kunne brukes på en motorsykkel (i norsk vær). Men, igjen: Dette høres ut som en god anledning til å leke med en 3D-printer.
Dersom systemet ikke har noen formening om hva fartsgrensen er, fordi strømmen nettopp er satt på, for eksempel, da lyser kun den gule LED. Den forteller at det er strøm på anlegget, men at intet fartskilt er detektert. I denne tilstanden er kun to endringer mulig: Strømmen blir borte, eller et fartskilt detekteres. Vi ser bort fra det første.
Når det første skiltet detekteres, da tennes den riktige grønne LED. Legg merke til at de er plassert slik at man kan “se” hva grensen er, uten å måtte telle. At LED kommer på, er tilstrekkelig indikasjon på endring. I denne tilstanden kan tre endringer inntreffe: Nytt skilt med samme fartsgrense, skilt med høyere grense, og skilt med lavere grense:
- Er grensen 50 og det kommer et nytt skilt med 50m, da blinker den gule LED én (eller flere) ganger for å vise at et skilt er detektert, men uten endring. Føreren varsles (lett?) fordi det er en mulighet for at tolkningen av skiltet er feil, og å involvere en hjerne er aldri feil;
- Høyere grense vises med først å blinke med den gule LED, og så endre de grønne i tråd med den nye grensen, og
- Lavere grense varsles med rød LED, og endring av de grønne. Kanskje med at de grønne blinker én eller flere ganger.
Det er det hele.
For å summere opp:
- Ta film av masse skilt, og splitt dem i bilder;
- Brenn av masse CPU i å lage en god modell (husk: CPU og båndbredde deler den egenskap at ikke utnyttede ressurser er sløst vekk!);
- Last modellen inn i en (liten) PC, og monter den i sykkelen sammen med et kamera;
- Design og bygg en boks med LED, som må kontrolleres på én eller annen måte (Arduino, vil jeg tro), og
- Unngå å kjøre inn i en 50-sone i 85 km/t.
Hva som skjer med systemet når det blir mørkt? Hvordan skal jeg kunne vite det?