Я работаю над приложением дополненной реальности для iPhone, которое использует очень интенсивный процессорный алгоритм распознавания объектов (увеличивая процессор на 100%, который он может проходить, возможно, через 5 кадров в секунду), и стараясь сэкономить батареюи сделать все это менее "нервным". Я пытаюсь найти способ запускать этот распознаватель объектов только тогда, когда пользователь фактически перемещает камеру.
Моей первой мыслью было просто использоватьАкселерометры / гироскоп iPhone, но при тестировании я обнаружил, что очень часто люди перемещают iPhone с достаточно стабильной ориентацией и скоростью, чтобы не было никакого способа сказать, что он все еще находится в движении.
Так чтооставил возможность анализа фактической подачи видео и обнаружения движения в этом.Я запустил OpenCV и попытался запустить их пирамидальный алгоритм оптического потока Лукаса-Канаде, который работает хорошо, но, кажется, почти так же интенсивно использует процессор, как и мой распознаватель объектов - я могу получить его на приемлемой частоте кадров, если снизу уровни глубины / уменьшуизображение / трек меньше точек, но затем страдает точность, и он начинает пропускать некоторые большие движения и срабатывает на мелкие дрожащие руки.
Так что мой вопрос, есть ли другой алгоритм оптического потока, который быстрее, чем Лукас-Канаде, если я просто хочу определить общую величину движения камеры?Мне не нужно отслеживать отдельные объекты, мне даже не нужно знать, в каком направлении движется камера, все, что мне действительно нужно, это способ подать что-то в два кадра видео, и он скажет мне, как далеко они находятся друг от друга.