2010-10-14 26 views
16

Widziałem, że ktoś zrobił aplikację, która śledzi twoje stopy za pomocą aparatu, dzięki czemu możesz kopać wirtualną piłkę na ekranie swojego iPhone'a.Jak śledzić ruch za pomocą kamery iPhone'a?

Jak możesz zrobić coś takiego? Czy ktokolwiek wie o jakichkolwiek przykładach kodu lub innych informacjach o korzystaniu z kamery iPhone'a w celu wykrywania obiektów i śledzenia ich?

Odpowiedz

32

Właśnie wygłaszałem wykład w SecondConf, gdzie zademonstrowałem użycie kamery iPhone'a do śledzenia kolorowego obiektu za pomocą cieniowania OpenGL ES 2.0. Temat towarzyszący tej rozmowie, w tym moje slajdy i przykładowy kod wszystkich wersji demonstracyjnych, można znaleźć pod adresem here.

Przykładowa aplikacja, którą napisałem, której kod można pobrać z here, jest oparta na przykładzie wyprodukowanym przez firmę Apple w celu zademonstrowania Core Image na WWDC 2007. Ten przykład jest opisany w Chapter 27 of the GPU Gems 3 book.

Podstawową ideą jest to, że można używać niestandardowych shaderów GLSL do przetwarzania obrazów z kamery iPhone'a w czasie rzeczywistym, określając piksele pasujące do koloru docelowego w ramach danego progu. Piksele te mają następnie znormalizowane współrzędne X i Y osadzone w ich komponentach koloru czerwonego i zielonego, podczas gdy wszystkie inne piksele są oznaczone jako czarne. Kolor całej klatki jest następnie uśredniany w celu uzyskania środka ciężkości kolorowego obiektu, który można śledzić podczas przesuwania się po widoku kamery.

Chociaż nie dotyczy to przypadku śledzenia bardziej złożonego obiektu, np. Stopy, to takie shadery powinny być napisane tak, aby wykryć taki poruszający się obiekt.

W związku z powyższym, w ciągu dwóch lat, od kiedy to napisałem, opracowałem teraz an open source framework, który obejmuje przetwarzanie obrazów i wideo w OpenGL ES 2.0. Jednym z najnowszych dodatków do tego jest klasa GPUImageMotionDetector, która przetwarza scenę i wykrywa każdy ruch w niej. Da ci on centroid i intensywność ogólnego ruchu wykrytego jako część prostego bloku wywołania zwrotnego. Korzystanie z tego rozwiązania w tym celu powinno być dużo łatwiejsze niż rozwijanie własnego rozwiązania.

+0

Wow, dużo szacunku! Będę używał tego, jeśli nie masz nic przeciwko,) – Eimantas

+0

To jest fajne .. czy możliwe jest zbudowanie takiego interfejsu jak Xbox? :) Poszukuję szybkiego, lekkiego kodu, który można umieścić w mojej aplikacji na iPhone'a, takiej jak http://www.soundstep.com/blog/experiments/jsdetection/. Byłoby fajnie, gdyby było to możliwe w przypadku internetu mobilnego: –

+1

@CarlLindberg - Kinect wykorzystuje projektowane, strukturalne światło podczerwone do wykonywania mapowania 3D w środowisku 3D, więc oczywiście nie będzie to pasować do kolorowej kamery na urządzeniu z systemem iOS. Surowe wykrywanie ruchu, jakiego dotąd doświadczyłem, nie śledzi rąk ani palców, a do tego trzeba zbadać techniki optycznego przepływu lub śledzenia obiektu. Nakłonienie ich do pracy nad wideo na żywo będzie sporym wyzwaniem. –

3

Miałem sukces śledzenie twarzy i oczu za pomocą OpenCV na iPhone. Oto dobre miejsce na rozpoczęcie: http://niw.at/articles/2009/03/14/using-opencv-on-iphone/en

Domyślam się, że sztuczka polega na znalezieniu kaskady (opis tego, czego powinna szukać kamera), która opisuje stopę, ale nie jest do końca pewna, czy tak jest.

+1

Czy OpenCV może być używany do śledzenia w czasie rzeczywistym? Łączony artykuł wydaje się wskazywać, że rozpoznanie twarzy na obrazie 480 x 320 zajmuje do 10 sekund. –

+0

Użyłem szkieletu CoreVideo na telefonie iPhone 3GS do śledzenia twarzy w czasie rzeczywistym przy użyciu niewielkiego rozmiaru próbki AVCaptureSessionPresetLow. Byłem w stanie konsekwentnie wykrywać oczy w mniej niż 4 ms. – aegzorz

+0

To brzmi bardzo dobrze, nie sądzę, że chcesz mieć próbkę? – Burf2000

Powiązane problemy