Jag tror att iPhone appen skulle bli en storsäljare. Koppla sen ihop det med någon gps-app och en central databas så att den
kan varna alla för en "mobil hastighetskamera".
Fast egentligen ska man ju hålla laglig hastighet....
Blueint: Bra poäng. Jag vet att jag har diskuterat frågan tidigare på fotosidan.se, och då kom det fram att fast monterade kameror på fordon kräver tillstånd från socialstyrelsen (tror jag det var). Jag kan dock inte gå i god för att det stämmer, men det var vad som skrevs.
Jag tror att Volvos CADS-system använder nummerplåten som en del i verifieringen att det verkligen är en bil som kameran matchar mot radarmålet. De har i alla fall en vit ruta tejpade på de flesta gummibilarna de använder för att testa systemen. Så det borde inte vara omöjligt att nummerplåten med en kamera.
Skulle jag göra en sådan algoritm det hade jag gjort det i följande steg:
1. Göra bilden svartvit
2. Högpassfiltrera pixlarna
(3. Edge-finding)
4. Använda en houghtransform för att hitta en kvadrat. Till att börja med hade jag parametriserat den som med x,y position för ett hörn på rektangeln samt bredd eller höjd. Detta för att man kan anta att den är vågrät samt har ett känt höjd/bredd-förhållande. Beroende av hur man monterar kameran räcker det kanske med att söka av en viss del av bilden.
5. Om en parametrisering fått tillräckligt många röster i houghdomänen klipps motvarande rektangel ut och OCR:as
Inget man gör i en microcontroller men borde vara fullt möjligt i en Android eller IPhone. Jag har själv gjort en liknande app för att hitta väglinjerna i en androidmobil. Där parametriserade jag iofs linjerna i två dimensioner typ y=kx+m där min houghdomän bestod av k & m. men å andra sidan var det två linjer.
Bara i sverige har vi ju vita, gula, blå och svarta skyltar, militärens misstänker jag är svårast att urskilja från telefonnumret till roger rörkrökare... Så jag hoppas inte de bygger något på att skyltarna ska vara vita och av svensk storlek.. (Där vi ju också har minst 4 storlekar..)
Jag har ingen aning om hur systemet fungerar exakt, det var snarare en reflektion av att deras testbilar har nummerplåt. Skulle lika gärna kunna vara för att ge föraren som ska köra på den en känsla av att det är en riktig bil och inte en uppblåsbar.
Undrar om det går att lura tullsystemen genom att sätta en annan skylt som det står tex KUL JUL på bakluckan (orginalskylten kvar naturligtvis). Eller har de manuell granskning av oläsbara skyltar?
Var tvungen att testa detta, tog ett foto genom köksfönstret och gjorde ett väldigt quick n dirty program i C# av den lösning jag nämnde tidigare och det verkar som att det fungerade på första försöket.
screen.jpg
Programmet innehåller säkert massor av buggar och måste tunas i ordentligt för att få det att funka till en viss kamera i en viss bil. Det är dessutom allt annat än snabbt och extremt anpassat för den bild jag tog. Det går att optimera på rätt många ställen istället för att visa varje steg som görs nu men om någon vill bygga vidare på det så är det fritt fram.
Bifogar källkoden som är skriven i VisualStudio 2010 men kompilerad för .NET 2.0 så även om man inte har utvecklingsmiljön så borde exe-filen som ligger i bin/debug gå att göra på vilken windowsburk som helst som varit uppkopplad mot nätet de senaste 5 åren. I annat fall så ligger all kod av intresse direkt i MainForm.cs så kan man läsa vad den gör.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Kan beskriva kortfattat vad programmet gör i de olika stegen.
1. läs in bilden
2. Loopa igenom pixlarna i bild 1, ta medelvärde (0-255) på R, B och G och spara detta i R, B och G i en ny bild (gör till gråskala)
3. Högpassfiltrera bild 2 genom att sätta alla pixlar över ett värde, t ex 185, till 255 och alla under detta värde till 0
4. Hitta kanter. Det finns många algoritmer för detta, men eftersom en skylt består av lodräta och vågräta kanter börjar jag med att gå igenom den filtrerade bild 3 uppifrån och ned och sätta alla pixlar som förändras i bild 3 till 255 och övriga till 0 i bild 4. Därefter går jag igenom bild 3 igen från vänster till höger och sätter alla pixlar som förändras till 255 i bild 4 (utan att sätta några till 0).
Kom på nu att steg 4 skulle bli ännu bättre om man bara sätter de pixlar som går från mörk till ljus. Men när jag testar detta så hittas den vita skåpbilen i bakgrunden istället. Detta behöver inte vara något problem, varför ska jag förklara efter steg 5.
5. Det är detta som är magin. här skapar jag en 3d-valurna där en två av dimensionerna är kordinaterna för övre vänstra hörnet på skylten och den 3:e dimensionen är bredden på skylten som jag just för denna bild sagt ligger mellan 80 och 120 pixlar (egentligen är den tunt 100). För varje vit pixel som finns kvar efter kantdetekteringen lägger jag en röst i urnan på den triangel (den x, y och bredd) som skulle kunna ge upphov till en kant i just den punkten. (Mer om detta kan ni läsa om ni gör en googling på "hough transform"
6. Nu väljer jag ut den punkt och bredd som fått flest röster och ritar en röd rektangel där. I det fall man ska köra ocr på nummerplåten hade jag istället klippt ut den delen av bilden och skickat till ocr-programmet. I sådant fall hade det egentligen inte varit några problem att den vita skåpbilen får flest röster i vissa fall. då hade jag istället kunnat plocka ut alla rektanglar som får fler än ett antal röster och sett om ocr-programmet ger någon meningsfull nummerplåt av den rektangeln.