2012-07-20 20 views
10

Obecnie jestem na kursie Computer Vision, a dla mojego końcowego projektu zamierzam zrobić małą grę, która wchodzi w interakcje z Kinect.Jak uzyskać dostęp do urządzenia Kinect za pomocą Java?

Teraz chcę zrobić tę grę w Javie, ponieważ nigdy tak naprawdę nie ryzykowałem tworzenia gry i jestem bardzo zadowolony z języka. Ale nie mogę znaleźć sposobu na dostęp do danych głębokości (wystarczy, że spakuję je do struktury Java danych) i danych RGB (ten sam pomysł).

W tej chwili mam sposób, aby "porozmawiać" z Kinect. Śledziłem samouczek this i mogę wykryć kinect za pomocą polecenia glview w terminalu.

Mam rzecz nazwaną , która obiecała być biblioteką Javy, aby umożliwić mi korzystanie z Kinect, ale używa jej własnego języka, który jest "zbudowany" przy użyciu Javy, więc to nie jest tak naprawdę Java, co oznacza, że ​​nie mogę używać wszystkich GUI i normalne funkcje Java.

Co chcę zrobić, to jakoś zadzwonić pod numer import random.Kinect.code; w górnej części programu Java, który pozwala mi korzystać z najbardziej podstawowych funkcji Kinect, takich jak getDepth() lub getRGB() i robić wszystko inne w Javie.

Czy ktoś wie, w jaki sposób mogę to zrobić? (BTW używam MAC OSX Lion)

+0

Czy to jest podobne do interfejsu za pomocą Java? –

+0

Jeśli OpenKinect jest twoją sprawą, [JavaCVpro] (http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php) powinien działać ... –

Odpowiedz

7

Jeśli używasz Processing Polecam przy użyciu jednego z dostępnych opakowań:

Both są dobrze udokumentowane i zawierają wiele pomocnych przykładów.

simpleOpenNI sample

+0

cóż, to jest to, że mam Processing, ale jest to dziwna forma Java, czy wiesz, czy pozwala ona na użycie pełnego spektrum języka Java na wierzchu dziwnej, różnej składni/skrótu? – Alex

+0

Użyłem tych bibliotek w przetwarzaniu IDE i eclipse, a także na osx 10.6. Jaka jest twoja konfiguracja? Powinieneś być w porządku, aby użyć Processing na swoim własnym lub użyć go jako biblioteki w projekcie Java. W przypadku Zaćmienia, spójrz na [Proclipsing] (http://code.google.com/p/proclipsing) lub po prostu utwórz projekt Java i użyj core.jar Processing, jeśli chcesz sobie z nim poradzić "ręcznie". –

+0

Chcę po prostu zaprogramować go za pomocą prostego edytora tekstu i wiersza poleceń, zrobiłem pewne postępy, odkrywając, jak wejść do wrappera java openkinect (libfreenect). Zasadniczo polegało to na kompilowaniu w jakiś sposób dwóch słoików. <- Jak widzisz, jestem całkiem nowy w większości z tych koncepcji programistycznych. Czy byłbym w stanie jakoś wykorzystać procesorowy "core.jar", tak jak powiedziałeś w sposób podobny do tego, który właśnie opisałem i po prostu użyć kilka ich metod w moim programie java? Jeśli tak, czy możesz spróbować pomóc mi i wyjaśnić, w jaki sposób mogę to zrobić? Dzięki za pomoc do tej pory! – Alex

1

Dam ci kilka pomysłów, ale przyznaję - nie próbowałem ich z Kinect.
Pytanie można zakwalifikować do pytań "Jak uzyskać dostęp do niektórych urządzeń przez Javę". Samouczek, który nam przedstawiłeś, przedstawia biblioteki dostępu do Kinect, a nawet opakowania dla Python.
To, co możesz zrobić, to zobaczyć, w jaki sposób kod Pythona zaimplementował wrappery i użyć JNI/JNA do tworzenia własnych wrapperów.
Ponadto zajrzałem do projektu JNect, wspomnianego tutaj w innej odpowiedzi, wysłanej przez @ npinti.
Wtyczka zaćmienia składa się z dwóch części -
kodu JNI, który otacza standardowy kod SDK, oraz kod RCP Ecipse dla samej wtyczki Zaćmienie.
Polecam ignorowanie części Eclipse RCP i skupienie się na ich implementacji JNI jako odwołanie do tego, czego potrzebujesz do opracowania własnego opakowania JNI.
Nawet jeśli jest to implementacja oparta na systemie Windows (np. - Kinect SDK działa na Windowsie i na przykład trzeba uruchomić kod na macu) - myślę, że czytając ich kod + niektóre samouczki JNI + opakowania po pythonach podany link pozwoli zrozumieć, jak utworzyć opakowanie JNI do biblioteki prezentowanej w podanym przez użytkownika linku.
Ponadto należy rozważyć użycie JNA, a nie JNI jako sposobu komunikacji ze sprzętem, co jest łatwiejsze.
Jedną z ostatnich opcji może być użycie Java Script Engine i wywołanie kodu Pythona (pakowania python) z twojego wernika Java - nie wiesz, ile to ci pomoże, ale możesz dać mu szansę.

+0

Niestety wygląda na to, że przegapiłem całą * ofertę tylko dla Windows 7 * ... Aby sobie z tym poradzić, OP może rozważyć użycie wirtualnej maszyny opartej na systemie Windows. – npinti

2

miałem dokładnie ten sam problem. Chciałem użyć Kinect w Javie do moich badań Computer Vision i miałem Mac OSX Lion'a jak ty. Rozwiązaniem, które znalazłem, jest uruchomienie wirtualnej kopii systemu Windows 7 na moim Macu (przy użyciu VMWare lub Parallels lub Microsoft HyperV), a następnie użycie open source J4K Java for Kinect library, która jest powiązana z Java dla zestawu Kinect SDK z wykorzystaniem Java Native Interface (JNI). Oczywiście można również korzystać z tej biblioteki Open Source bezpośrednio na komputerach z systemem Windows.

Biblioteka J4K Java dla Kinect zawiera także samouczek, jak napisać aplikację opartą na kinetach w zaledwie 10 liniach kodu Java.

Istnieje również kilka przykładów kodu źródłowego, które pokazują, jak odczytywać głębokość, wideo i dane szkieletu z urządzenia Kinect i używać ich w klasach Java. Możesz także użyć wielu Kinectów, animować awatary i inne przykłady. Link do przykładów kodu źródłowego to here.

zrzut ekranu z otwartym źródłem Kinect Viewer, która jest przydatna w zastosowaniach takich jak Twoja Computer Vision jest poniżej: enter image description here

Mam nadzieję, że ta informacja pomogła.

+0

Czy to nie spowalnia przetwarzania obrazu? Zakładam, że odroczenie przychodzących danych przez wirtualną maszynę będzie kosztować wydajność, prawda? – jorrebor

+0

Użyłem biblioteki J4K w Javie 7 z Intel i5 i bardzo intensywne przetwarzanie obrazu zostało osiągnięte w czasie rzeczywistym (30fps). @jorrebor możesz rzucić okiem na rzeczywiste przykłady [Demo1] (https: // www. –

Powiązane problemy