Vor ein paar Wochen schrieb ich hier die Idee nieder ein Gerät zu bauen, welches auf einer Autofahrt Schilder erkennt und davon ein Foto macht, damit man es später z.B. Geschwindigkeitsbegrenzungen in OSM eintragen kann. in den Kommentaren wurde dann angemerkt, dass man das doch auch mit einem Smartphone umsetzen könnte. Ich habe keine Ahnung warum ich auf diese Idee nicht gekommen bin. Diese Geräte haben Kamera und GPS und sind mittlerweile auch schnell genug für Bildverarbeitung. Außerdem sind sie extrem verbreitet.
Da ich mich mit dieser ganzen Android-bastelei noch nicht beschäftigen wollte, habe ich erst einmal angefangen mich mit Bilderkennung zu beschäftigen. Ich bin echt beeindruckt, was mit OpenCV alles möglich ist und vor allem wie schnell so etwas umgesetzt ist.
Bis jetzt haben wir also eine Software, die das Livebild der Kamera abgreift, dann die Farben so filtert, dass nur noch rot übrig bleibt und dann Kreise erkennt. Und nachdem wir noch ein wenig mit den Parametern herumgespielt haben ist die Trefferquote erstaunlich hoch. Ich habe ein 1 Stündliches Testvideo durch die Software geschoben - Dabei hat das Programm etwa 70-80% der erkennbaren Schilder erkannt und nur 5% der erfassten Bilder waren Fehltreffer. (Als erkennbare Schilder bezeichne ich hier Schilder mit Rotem Rand wie z.B. Überholverbot, Geschwindigkeitsbegrenzung, Halteverbot. Außerdem zähle ich Schilder, bei denen der rote Rand sehr ausgeblichen ist nicht mit dazu). Bei einem anderen Video bekam ich sehr viele Fehler, durch das Rote runde Rücklicht des vorherfahrenden Fahrzeuges. Hier muss ich wohl noch ein wenig optimieren.
Die beschriebenen Tests habe ich einfach mit Videos von Autofahrten, welche ich auf Youtube fand gemacht. Dies entspricht natürlich nicht wirklich dem, was später heraus kommen soll - Bei den Videos habe ich alle 25 Frames/Sekunde ausgelesen. Das führte dazu, dass selbst auf meinem 2,5Ghz Prozessor die Verarbeitung 4 mal so lang brauchte, wie das Video.
In der Praxis sollen aber überhaupt nur etwa 3-4 Bilder/sekunde aufgenommen werden. Um die benötigte Leistung noch weiter zu senken, ist zu überlegen, ob es die volle Auflösung sein muss. Ich weiß auch nicht ob smartphone überhaupt hochauflösende Bilder in der Frequenz schießen können. (Schon allein, weil ich überlege ein 50€ smartphone für so etwas zu benutzen)
Einen Live-Test habe ich nun schon mal mit dem MacBook und dessen Kamera unternommen. Das Bild Dazu sieht man oben.
Was ich mir eigentlich noch wünsche, ist, dass ich auch Blaue runde Schilder, wie Abbiegebeschränkugen erkennen könnte. Außerdem ist vielleicht zu überlegen ob man für Länder, dessen OSM-Daten noch sehr lückenhaft sind auch Ortseingangsschilder erkennen will um Orte richtig zu benennen.
Discussion
Comment from !i! on 30 January 2013 at 10:24
Ohhh das ist aber echt ne feine Sache :) Als ich mich noch mit Videomapping beschäftigt habe, hab ich mir sowas gewünscht, damit man nicht immer endlos Material sichten muss.
Comment from vsandre on 30 January 2013 at 11:02
Schön!
Comment from IOOI on 30 January 2013 at 11:09
Wow! Das ist verdammt cool!
Comment from Chaos99 on 30 January 2013 at 12:26
Sehr toll. Wie ich sehe, führst du die Analyse jetzt auch als Postprozess auf einem PC durch. So wie ich mich an die erste Diskussion erinner, ging es noch darum, das live auf dem Telefon zu machen. Das wäre zwar eleganter (weil nur dann ein Foto gemacht würde, wenn auch ein Schild zu sehen ist), stellta ber wie bei dir beschrieben bisher schwer erfüllbare Anforderungen an die Hardware.
Hast du vor, den Quellcode deines Programms zu veröffentlichen? Z.B. auf GitHub o.ä.? Ich würde das durchaus gerne mal ausprobieren. Ich hab hier noch GoPro Material herumliegen.
Und die Einarbeitung in OpenCV schieb ich auch schon sehr lange vor mir her.
Gruss, Chaos
Comment from ubahnverleih on 30 January 2013 at 12:34
Naja eigentlich ist es geplant alles auf dem Telefon laufen zu lassen. Dass ich das auf dem Rechner laufen lassen habe, hängt eher damit zu tun, dass ich noch nichts auf das Telefon Portiert habe und testmaterial brauchte - deswegen habe ich da videos durch geschoben. Ob man das Postprozessing dann doch auf dem PC machen muss, wird sich zeigen, wenn wir das ganze mal auf mobiler hardware laufen lassen. Aber prinzipiell kann man eben auch ein Video durch die Software schieben - nur da ist die frage wie man das dann gerefernziert. Ja der code soll eigentlich schon veröffenlticht werden. Momentan ist er aber noch so experimenetell und hässlich, dass ich den keinem zumuten möchte ;) Wenn du willst kann ich ihn dir aber trotzdem schon mal schicken
Comment from ikonor on 30 January 2013 at 13:13
Hast Du Dir mal das GSoC Projekt “Video Based Speed Limit and Road Sign Detector plugin for JOSM” angeschaut? Evtl. kannst Du ja darauf aufbauen oder was davon verwenden.
Comment from ubahnverleih on 30 January 2013 at 13:19
@ikonor Nein kannte ich noch nicht. Danke für den Hinweis - schaue ich mir mal an
Comment from robert on 30 January 2013 at 18:15
(Google translate to the rescue)
Intriguing approach to image recognition.
I’m sure you can get a lot more performance out of it with not much effort.
Comment from HannesHH on 30 January 2013 at 21:27
Stark!
Sowas könnte man bestimmt auch andersrum angehen, einem Programm Beispielfotos von Schilder vorlegen, sagen um welche Schilder es sich handelt, und es dann lernen lassen.
Ich wünscht ich wäre so schlau. :)
Comment from svenrogall on 4 February 2013 at 09:40
Es es nicht möglich das Smartphone zu rooten, um dann als Admin richtig auf das Linux Betriebssystem zu zugreifen. So wie ich rooten verstanden habe, ist man danach Admin und könnte dementsprechend auch Programme installieren und auch Quelltexte compilieren bzw ausführen.
Und wenn es ganz hart auf hart kommt, kann man im zweifelsfall auch eine neuere Variante des OS nehmen oder eine eigene, die nicht so viele Resourcen verbraucht. Letztendlich ist ein Smartphone doch nur ein tragbarer Computer.
Ich selber habe ein Samsung Ace2, hat bei T-Online 99 Euro gekostet. Es hat einen 833 Megaherz Eincoreprozessor. Ich habe mir mal im Web angeschaut wie man dieses routet. Es gibt genug Videos dazu und scheint wirklich nicht schwer zu sein. Nebenbei werden auch Downloadmöglichkeiten von CustomRoms gezeigt. Vielleicht ist ja was dabei, dass man sofort benutzen kann, und deinen Anspüchen genügt.
MFG admin at http://www.katalog1.org
Comment from fernsprechvermittlung on 11 February 2013 at 18:14
OpenStreetMap #osm #blog / Schilderkennung mit dem Handy http://blog.meldekopf.de/archives/232 Danke super Sache :-)
Comment from saerdnaer on 20 February 2013 at 22:11
Ich mal ne Zeit lang immer Videos gemacht, die du gerne zum testen haben kannst. Unter https://www.youtube.com/playlist?list=PLl-RY8vLFn-qKwCTWMBzgL1O1N-z1BUrS ist von jedem Typ ein Beispiel.
MfG Andi
Comment from hfs on 23 February 2013 at 15:35
Es gibt extra OpenCV4Android: http://opencv.org/android . Das klingt doch geradezu ideal. (Du selbst wirst es vermutlich schon gesehen haben, aber ich dachte ich erwähne es für die interessierten Mitleser.)
Comment from poldy on 10 March 2013 at 15:18
Vorschlag alternatives Equipment:
Ob das besser oder schlechter als die Smartphone-Lösung ist, mag ich hier nicht beurteilen. Hängt vielleicht davon ab, was man schon so da hat.
Comment from Ogmios on 2 January 2015 at 15:52
Ich hätte so etwas gerne um es auf die Mapillary Bilder anzuwenden bevor ich sie hoch lade.