2010-12-09 5 views
12

Ich arbeite an einer Augmented-Reality-App für das iPhone, die einen sehr prozessorintensiven Objekterkennungsalgorithmus beinhaltet (schiebt die CPU auf 100% und kann vielleicht 5 Bilder pro Sekunde durchkommen), um Batterie zu sparen und mache das ganze Ding weniger "nervös". Ich versuche einen Weg zu finden, den Objekt-Erkenner nur auszuführen, wenn der Benutzer die Kamera tatsächlich bewegt.Schneller, sehr leichter Algorithmus zur Kamerabewegungserkennung?

Mein erster Gedanke war, einfach die Beschleunigungsmesser/Gyroskop des iPhones zu verwenden, aber beim Testen fand ich, dass Leute das iPhone mit einer konsistenten Einstellung und Geschwindigkeit bewegen würden, dass es keine Möglichkeit geben würde zu sagen, dass es war immer noch in Bewegung.

So blieb die Option der Analyse der tatsächlichen Video-Feed und Erkennung von Bewegung in diesem. Ich habe OpenCV funktioniert und versucht, ihren pyramidenförmigen Lucas-Kanade-Algorithmus für den optischen Fluss auszuführen, der gut funktioniert, aber fast so prozessorintensiv ist wie mein Objekterkenner - ich kann es auf eine akzeptable Framerate bringen, wenn ich die Tiefenlevel herabsetze Bild/Track weniger Punkte, aber dann leidet Genauigkeit und es beginnt einige große Bewegungen zu verpassen und auf kleine Hand-Shaking-Y-Trigger.

Also meine Frage ist, gibt es einen anderen optischen Flow-Algorithmus, der schneller als Lucas-Kanade ist, wenn ich nur die Gesamtgröße der Kamerabewegung erkennen möchte? Ich muss nicht einzelne Objekte verfolgen, ich muss nicht einmal wissen, in welche Richtung die Kamera bewegt wird, alles was ich wirklich brauche, ist eine Möglichkeit, zwei Frames Video zu füttern und mir zu sagen, wie weit sie voneinander entfernt sind.

+1

Überprüfen Sie [Sucherausrichtung] (http://www-graphics.stanford.edu/papers/viewfinderalignment/). –

Antwort

2

Warum nicht die Kombination aus Beschleunigungssensor/Gyro Motion Sensing und einem sehr niedrigen Bildtracker verwenden? Jede Methode scheint durch völlig unterschiedliche Benutzerbewegungen verwirrt zu sein.

+0

Interessante Idee ... die Frage ist, ob die Bereiche der Bewegungen, die sie erkennen können, tatsächlich überlappen oder ob sie einige Arten von Bewegung sein werden, die keiner zuverlässig aufnehmen kann, ohne eine Menge von Handschüttelinterferenzen zu bekommen. Ich werde das ausprobieren und kurz darüber berichten, danke! – Ertebolle

+0

Dies erwies sich als die gewinnende Strategie, obwohl es einige zusätzliche Verfeinerung des OpenCV L-K-Codes und eine sehr leichte zusätzliche Bildprüfung erforderte, um es gut funktionieren zu lassen - danke! – Ertebolle

+1

@Ertebolle Hast du einen Beispielcode für deine Sachen, um am selben zu beginnen? Danke im Voraus. –

4

gibt es eine Open-Source (kostenlos für den privaten Gebrauch) Projekt, das hier FAST Ecke Erkennung verwendet: http://www.hatzlaha.co.il/150842/FAST-Corner-V2

Es könnte für die Objekterkennung sehr nützlich sein, und hat ernsthafte Optimierungen unterzogen schöne nicht-nervösen Ergebnisse zu erreichen.

- EDIT -

Jetzt gibt es ein Lucas-Kanade Optical Flow-Projekt als auch - http://www.success-ware.com/150842/Lucas-Kanade-Detection-for-the-iPhone Sie den Quellcode herunterladen kann, und es gibt einen Link zum App Store als auch, so dass Sie mit rumspielen können es und sehen, ob es Ihren Bedürfnissen entspricht.

HTH,

Oded.

+3

Scheint beide URLs http://www.hatzlaha.co.il/150842/FAST-Corner-V2 und http://www.success-ware.com/150842/Lucas-Kanade-Detection-for-the-iphone existiert nicht mehr. Kannst du bitte bestätigen? –