2010-10-14 3 views
16

Я видел, что кто-то сделал приложение, которое отслеживает ваши ноги с помощью камеры, чтобы вы могли играть в виртуальный футбол на экране вашего iPhone.Как вы можете отслеживать движение с помощью камеры iPhone?

Как вы могли бы сделать что-то подобное? Кто-нибудь знает какие-либо примеры кода или другую информацию об использовании камеры iPhone для обнаружения объектов и их отслеживания?

ответ

32

Я только что поговорил на SecondConf, где продемонстрировал использование камеры iPhone для отслеживания цветного объекта с использованием шейдеров OpenGL ES 2.0. Сообщение, сопровождающее этот разговор, включая мои слайды и пример кода для всех демонстраций, можно найти here.

Образец приложения, которое я написал, код которого можно загрузить с here, основан на примере, выпущенном Apple для демонстрации Core Image на WWDC 2007. Этот пример описан в Chapter 27 of the GPU Gems 3 book.

Основная идея заключается в том, что вы можете использовать собственные шейдеры GLSL для обработки изображений с камеры iPhone в реальном времени, определяя, какие пиксели соответствуют целевому цвету в пределах заданного порога. Затем эти пиксели имеют свои нормализованные координаты X, Y, встроенные в их красные и зеленые цветовые компоненты, тогда как все остальные пиксели отмечены как черные. Затем цвет всего кадра усредняется для получения центроида цветного объекта, который вы можете отслеживать, когда он перемещается по экрану камеры.

Хотя это не относится к случаю отслеживания более сложного объекта, такого как нога, шейдеры, подобные этому, должны быть в состоянии писать, чтобы выбрать такой движущийся объект.

Как обновление до вышесказанного, за два года с тех пор, как я написал это, я разработал an open source framework, который инкапсулирует обработку шейдеров OpenGL ES 2.0 изображений и видео. Одним из последних дополнений к этому является класс GPUImageMotionDetector, который обрабатывает сцену и обнаруживает в ней любые движения. Это даст вам обратно центроид и интенсивность общего движения, которое он обнаруживает как часть простого блока обратного вызова. Использование этой структуры для этого должно быть намного проще, чем развертывание собственного решения.

+0

Ничего себе, много уважения! Я буду использовать это, если вы не против,) – Eimantas

+0

Это классно .. возможно ли построить такой интерфейс, как кинематика xbox? :) Im ищет быстрый легкий код, чтобы положить в мое приложение iphone, например http://www.soundstep.com/blog/experiments/jsdetection/ .. было бы здорово, если бы это было возможно с помощью мобильной сети, хотя –

+1

@CarlLindberg - Kinect использует проецируемый структурированный инфракрасный свет для выполнения трехмерного отображения среды, поэтому вы, очевидно, не собираетесь сопоставлять это с цветной камерой на устройстве iOS. Обнаружение грубых движений, которое я до сих пор не отслеживаю руками или пальцами, для этого вам нужно будет исследовать методы оптического потока или отслеживания объектов. Привлечение тех, кто работает на живое видео, будет довольно сложной задачей. –

3

У меня был некоторый успех, отслеживающий лица и глаза, используя OpenCV на iPhone. Начало работы: http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

Я думаю, что трюк - это поиск каскада (описание того, что должна искать камера), которое описывает ногу, не совсем уверенное, если это существует.

+1

Может ли OpenCV использоваться для отслеживания в реальном времени? Связанная статья, похоже, указывает, что для распознавания лица в изображении 480 x 320 требуется до 10 секунд. –

+0

Я использовал структуру CoreVideo на iPhone 3GS для отслеживания лица в реальном времени, используя небольшой размер выборки AVCaptureSessionPresetLow. Я смог последовательно обнаруживать глаза менее 4 мс. – aegzorz

+0

Это звучит очень хорошо, я не думаю, что вы хотите иметь образец? – Burf2000