Mapping mit Dashcams

Inzwischen bin ich mit den vom Raspberry Pi gemachten Bildern ganz zufrieden - so sieht das Ergebnis aus:
http://www.mapillary.com/profile/mhohmann
Zum automatischen Aufnehmen habe ich einen kleinen Python-Skript gebastelt:
http://wiki.openstreetmap.org/wiki/User:MHohmann/RPiCam

Hast du die Möglichkeit die Videos bei Amazon S3 hochzuladen? Hier am Fachbereich geht das mit ca. 10 MB/s, das ist ganz praktikabel.

Videos habe ich derzeit nicht, sondern Foto-Sequenzen mit einem Abstand von einer Sekunde zwischen zwei Photos (die ich aber natürlich per Software zu einer Videodatei konvertieren könnte, falls das von Vorteil ist). Ich habe mal einen Blick auf Amazon S3 geworfen, so weit ich das sehe sind da bis 5GB Speicher kostenlos? Meine Daten sind da etwas größer, eine Fahrt von Tartu nach Tallinn hat um die 17GB, man könnte es also erst einmal mit einem kleineren Teil versuchen. Registriert habe ich mich dort noch nicht - falls möglich würde ich es erst einmal lokal auf meinem Rechner testen (oder einem der GPU-Uni-Rechner), wenn die Installation von OpenCV nicht zu aufwändig ist. Ubuntu 14.04 hat OpenCV 2.4.8 in den Repositories, ich habe mich schon mal ein wenig in die Dokumentation eingelesen.

Upload-Speed wäre kein Problem, von zu Hause kann ich mit 5MB/s hochladen, vom Institut ungefähr 40-60MB/s (Gigabit-Anbindung).

Fotos sind prinzipiell kein Problem. Was die Performance betrifft wird das sogar deutlich schneller werden. Ich analysiere derzeit lediglich jedes Frame, weil die Schilder bei hohen Geschwindigkeiten nur sehr kurz gut zu erkennen sind. Das liegt aber am großen Bildwinkel der Dashcam. Ich überlege mir eine GoPro Hero 3+ silver oder black zu kaufen, da kann man den Bildwinkel verstellen und sie kann 2-10 Bilder/s aufnehmen. Aber das nur am Rande.

Wie schwer es ist meinen Code bei dir zum Laufen zu bringen, kann ihr ehrlich gesagt nicht einschätzen. Ich habe mich für OpenCV 3 entschieden und kompiliere aus git selbst. Weißt du, ob die Pakete aus dem Repository CUDA unterstützen? CUDA ist leider proprietär. Wie groß die Unterschiede zwischen den beiden OpenCV-Versionen sind, weiß ich auch nicht. Die “Anwendung” selbst ist eine Mischung aus Python und C++. Mit Python hatte ich angefangen, da funktioniert aber das CUDA nicht, dafür gibt es eine Bibliothek für die Dienste von Amazon. Mit C++ mache ich nur noch die Klassifizierung.

Für deine Daten kannst du aber auch einfach meinen S3-Bucket mitnutzen. Ich benutze das “Reduced Redundancy Storage”, das kostet 2 Euro pro 100 GB im Monat. Das ist wirklich kein Problem. Ich habe schon knapp 150 GB an Daten.

Ich werde mich am Wochenende mit einer Freundin um eine Oberfläche für die Auswertung und das Training des Klassifizierers kümmern. Ich hoffe ihr seid gespannt.

Gut, in Sachen Bildwinkel ist der bei der RPi-Cam eigentlich recht brauchbar, um auch bei einem Bild pro Sekunde und einer Autobahnfahrt noch 1-3 gute Bilder zu bekommen, auf denen man ein Verkehrsschild gut erkennen kann, zumindest manuell. Wie gut es OpenCV dann erkennt, werden wir sehen. Ich hatte dieses Aufnahmeintervall vor allem deshalb drin, weil die GPS-Positionen von gpsd im gleichen Takt kommen, so muss ich nicht interpolieren.

Die OpenCV-Pakete aus dem Ubuntu-Repository haben ein Paket libopencv-gpu2.4 dabei - ich nehme mal an, dass das der Teil der Bibliothek ist, der CUDA nutzt. Ausprobiert habe ich es allerdings noch nicht. Bisher habe ich CUDA (und OpenCL) nur für selbst programmierten GPU-Code benutzt, aber noch keine fertigen GPU-beschleunigten Bibliotheken.

Auf die Ergebnisse des Wochenendes bin ich tatsächlich schon gespannt :slight_smile: Wenn ich die Dokumentation richtig verstanden habe, braucht man zum Training einen Haufen Bilder (typische Fotos) ohne Verkehrsschilder sowie ein Bild (Zeichnung) von jedem Verkehrsschild, dass man erkennen will. Zum Training selbst erzeugt die Software dann positiv-Bilder, indem jedes Verkehrsschild in mehr oder weniger gedrehter oder verzerrter Weise in einen Hintergrund ohne Verkehrsschild eingebaut wird, und lässt dann den Classifier darauf los. Stimmt das so weit?

Also OpenCV wirst du dir wahrscheinlich selbst kompilieren müssen. Das Paket hat vermutlich keine volle Funktion:

WITH_CUDA=OFF
http://anonscm.debian.org/cgit/debian-science/packages/opencv.git/tree/debian/rules

To enable CUDA support, configure OpenCV using CMake with WITH_CUDA=ON . When the flag is set and if CUDA is installed, the full-featured OpenCV GPU module is built.
http://docs.opencv.org/modules/gpu/doc/introduction.html

Den Classifier habe ich direkt mit Samples trainiert. Das Freistellen wäre mehr Arbeit gewesen als einfach mehr Schilder zu markieren. Eine Webapp, mit der man das im Browser machen kann ist in Arbeit. Das generieren von Positiv-Samples ist für den Fall gedacht, in dem man beispielsweise nur ein Logo hat, das man in vielen (unbekannten) Aufnahmen erkennen möchte.

Na gut, dann muss ich OpenCV wohl doch selbst kompilieren - das sollte ja auch kein größeres Problem sein. Das werde ich die Tage mal in Angriff nehmen. Seltsam ist es schon irgendwie, dass es ein GPU-Package im Repository gibt, das aber mit WITH_CUDA=OFF kompiliert ist - da erschließt sich mir der Sinn dieses Paketes nicht ganz.

Klar, wenn man genug Fotos als Positiv-Samples hat, ist das natürlich kein Problem, die auch zum Training zu nehmen. Ich hatte mir gedacht, dass ein Verkehrsschildes ja im Wesentlichen das gleiche ist wie ein Logo, und dass man einfach eine Zeichnung des Schildes als Eingabedatei nehmen kann, statt das Schild aus einem Foto freizustellen. Ich kann ja mal beides versuchen und schauen, was davon besser läuft.

Gibt es noch andere Erfahrung mit Dashcams? Ich überlege mir nämlich wegen eines anderen Problems so ein Ding zuzulegen und weiß noch nicht genau, auf was es da bei OSM ankommt. Eben war ich im Laden (Conrad) und habe mir einige angeschaut. Erstaunt war ich, dass man nur Laufzeiten von bis zu 5 Minuten einstellen konnte. Das wäre schon mal nix für unsere Zwecke.

Ich kann jetzt nur raten, was du mit Laufzeit meinst. Zwei Dinge kommen mir da in den Sinn:

  1. Dauer der Aufnahmesegmente. Dashcams speichern die Daten in Form von Videodateien in einer definierten Länge (Zeit) ab. Diese kann in der Regel zwischen 1-5min vorgewählt werden. Die Segmente können später mit einer enstprechenden Software (z.B. RegistratorViewer) nahtlos aneinandergereiht werden.

  2. Die Akkulaufzeit. Dashcams haben in der Regel eine ziemlich begrenzte Laufzeit, weil sie ohnehin an der Bordspannung des Fahrzeugs hängen. Der Akku reicht in der Regel nur um offline Menüeinstellungen vorzunehmen oder ein Beweisfoto zu schießen. So weit ich weiß kann man aber 12V-Zusatzakkus nutzen um die “Laufzeit” zu erhöhen.

Das zugrundeliegende Konzept der Dashcams erklärt Techmoan hier:
https://www.youtube.com/watch?v=HQ0Tm9FFpKM
(Und ja, die 5min/3min-Segmente sind überaus sinnvoll.)

Angesagt ist derzeit die “Mini-0803”. Für OSM würde ich ein etwas tele-lastigeres M12-Objektiv draufschrauben.
https://dashcamtalk.com/mini-0803/
Gibt noch ein geringfügig verbessertes Modell, welches als “Mini-805” angeboten wird, da sitzt dann ein Ambarella A7LA70D drin statt eines A7LA50D, der Sensor bleibt ein Aptina AR0330.

Alternative wäre noch die “Dual”-Kamera CVR-A7620. Aber ehrlich gesagt, ist es meist einfacher, zwei einzelne Kameras zu verkabeln ins Heck (Strom z.B. aus den Heckleuchten, seit “Taglicht-Fahrgebot” hat man ja ja sowieso ständig “Licht an”)

Ach ja, warum auch nach hinten: Weil man sich dann in vielen Orten einen zweiten Besuch sparen kann, wenn man die Schilder auch gleich aus dem Heck sehen kann. Gerade Straßenschilder an Einmündungen werden gern “von vorn” von irgendwelchen anderen Sachen verdeckt, von hinten ist jedoch nichts, da auf der Fahrbahn schlecht Bäume stehen oder Leuchtreklame blenden kann.

Ja, das mit der Laufzeit habe ich zwischenzeitlich auch kapiert. Wenn es Software gibt, die die Schnipsel einfach wieder zusammenfassen, macht das ja nichts aus. Es gibt aber auch Cams, die wahlweise solange speichern, bis die Karte voll ist.
Die Mini-0803 hatte ich noch nicht im Visier, die ist ja wirklich klein (die großen Halterungen mit Saugnapf fand ich schon immer unnötig. Nachteil wäre hier, dass das GPS wohl nicht ganz so zuverlässig ist, wie man so liest, und für’s Fahrrad müsste man sich einen zweiten Halter kaufen, weil das GPS da drin ist.
Hatte bisher das a-rival Car Cam im Blick, aber da ist das GPS im Kabel, was noch doofer für’s Fahrrad ist.

Für’s Fahrrad brauchst Du eine komplett andere Kamera.
Merke: Unter einer besseren Gopro wird’s nicht gehen. Und auch da sind die Bilder eigentlich nur wegen des Weitwinkels scharf.

In Wirklichkeit brauchst Du etwas mit mechanischer Stabilisierung. Wetterfest… Du wirst aneiner Panasonic-Outdoor (DMC FT5) nicht vorbekommen. Plus ein Garmin Etrex mit SD-Karte.
(Du kannst natürlich auch eine andere Marke versuchen. Ich bin nicht markentreu… habe auch Olympus Tough und Nikon AW110… FT5 führt nach wie vor unter miesen Verhältnissen.)

Ne, mit dem Fahrrad ist nur als Spielerei gedacht. Da habe ich meinen rechten Arm und mein Smartphone als Steadycam-Erssatz.

Hoffentlich nur im Stehen …

Kürzlich ging doch wieder etwas bzgl. fest installierter, privater Überwachungskameras durch die Medien. Man muss den Bereich außerhalb des eigenen Grundstücks schon bei der Aufnahme auspixeln und - jetzt kommt der Hammer - es sind sogar Kameraattrappen ohne Hinweis verboten, da diese das Persönlichkeitsrecht einschränken.

Da muss man schon einen Unterschied machen. Private Überwachungskameras dürfen (Landesgesetze können hier unterschiedliche sein) nur Privatflächen und ganz begrenzt auch öffentliche Flächen filmen, beispielsweise Hauseingänge oder die Türkameras, die nur einen kleinen Winkel aufnimmt.
Filmaufnahmen dürfen natürlich in der Öffentlichkeit gemacht werden, da gibt es als einzige Einschränkung nur die Persönlichkeitsrechte der Geflimten. Diese greifen aber erst, wenn man die Aufnahmen veröffentlicht, oder zu bestimmten Zwecken speichert. Beides ist ja bei OSM nicht geplant. Ob Autokennzeichen wirklich Persönlichkeitsrechte haben, ist auch noch umstritten, da gibt es diverse Urteile. Natürlich ist es etwas anderes, wenn man Autos auf dem Straßenstrich filmt als wenn sie ganz normal am Straßenrand einer Stadt stehen.
Zusammenfassung: Nicht das Filmen ist das Problem, sondern was man mit den Aufnahmen vor hat.

Ich halte es bezüglich “Rechtlichem Orakeln” beim Fotografieren fürs Mapping wie bei unseren Lizenzbedingungen: Je mehr man drüber nachgrübelt, desto mehr Zweifel kommen einem. Und schlussendlich fühlt man sich juristisch so unsicher (oder Bedenken-Aufgeladen), dass man besser auf’s Selbstmappen verzichtet und zukünftig GoogleMaps und Google Streetview benützt…

In der Orientierungshilfe der deutschen Datenschutzbeauftragten steht, dass bereits das Erfassen mit einer Kamera ein Eingriff ist, über den der Betroffene informiert werden muss (§ 6b Absatz 2 BDSG). Darum hängen ja mittlerweile auch überall diese Piktogramme:

Es ist daher vollkommen nebensächlich, ob veröffentlicht wird oder nicht. Google hat bei Streetview das Ganze recht nett umgangen, da Personen und Kennzeichen unkenntlich gemacht wurden (leider aber auch erst nach der Erfassung, keiner weiß, wo die Rohdaten sind).

Gibt es eigentlich inzwischen eine quelloffene Software zur Erfassung von Verkehrszeichen? Hintergrund: Ich habe in den letzten Wochen soo viele Schilder abfotografiert, dass man daraus 'ne gute Datenbasis erstellen könnte.

Ich finde nur dieses Scobbler/Scout-Dingen und eine Menge Diplom- und Doktorarbeiten, des Code nie offen ist, z.B. https://www.youtube.com/watch?v=7xvy9oru_0g
Auch sind die ganzen Sachen immer auf Hochgeschwindigkeit und Echtzeit optimiert, also eher für die Benutzung im fahren Fahrzeug, als im Post-Processing im Rechner (der Nutzen ist ja auch nur für uns gegeben) - außer halt hier mit Dashcam-Mapping, aber da könnte man auch die Bilder nachher durchrechnen.

Das Programm wurde hier ja schonmal vorgestellt (leider closed): http://www.androidpit.de/acodriver-3-ein-virtueller-beifahrer
Etwas kleiner, aber natürlich auch nicht offen: https://play.google.com/store/apps/details?id=road.signs.recognition.free

Edit 1: Oh, das hier scheint was zu sein, es erkennt Verkehrszeichen, interpretiert sie allerdings nicht: https://sites.google.com/site/mcvibot2011sep/
Bei der Interpretation könnte das hier helfen: http://moegelmose.com/p10/

Wo sind die OpenCV-Freaks hier?

Edit 2: Ich werde mal hiermit experimentieren: https://rdmilligan.wordpress.com/2014/06/22/road-sign-detection-on-google-street-view/

Edit 3: Ich stehe jetz in engem Kontakt mit Ross und er ist an OSM und der Kombination aus Crowdsourcing und Musterfindung sehr interessiert. Mal gucken, was sich daraus entwickelt. Die Demos auf deiner Website funktionieren bei mir schon. Bald mehr dazu.

Habe eben den Bericht über die Pixpro SP360 gelesen und möchte diesen gerne hier in die Diskussion werfen. OSM Street View for Beginner?