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.
Überprüfen Sie [Sucherausrichtung] (http://www-graphics.stanford.edu/papers/viewfinderalignment/). –