2012-07-20 10 views
10

Sono attualmente in un corso di Computer Vision e per il mio progetto finale realizzerò un piccolo gioco che interagisce con Kinect.Come posso accedere a Kinect usando Java?

Ora voglio fare questo gioco in Java perché non mi sono mai veramente cimentato in una partita prima e sono molto a mio agio con la lingua. Ma non riesco a trovare un modo per accedere semplicemente ai dati di Profondità (ho solo bisogno di comprimerlo in qualche struttura Java Data) e dei dati RGB (stessa idea).

In questo momento, ho un modo per "parlare" con il Kinect. Ho seguito il tutorial this e posso rilevare il kinect usando il comando glview nel terminale.

Ho una cosa chiamata Processing che ha promesso di essere una libreria Java per farmi usare il Kinect ma sta usando il proprio linguaggio che è 'costruito' usando Java quindi non è proprio Java il che significa che non posso usare tutto la GUI e le normali funzionalità di Java.

Quello che voglio fare è chiamare in qualche modo lo import random.Kinect.code; nella parte superiore del programma Java che mi consente di utilizzare le funzionalità di base di Kinect, come getDepth() o getRGB() e fare tutto il resto in Java.

Qualcuno sa come posso farlo? (BTW sto eseguendo MAC OSX Lion)

+0

È come interfacciare usando java? –

+0

Se OpenKinect è la tua passione, [JavaCVpro] (http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php) dovrebbe funzionare ... –

risposta

7

Se stai usando Processing mi consiglia di utilizzare uno dei wrapper disponibili: di

Entrambi sono ben documentati e includono molti esempi utili.

simpleOpenNI sample

+0

beh questa è la cosa, ho Processing ma è una strana forma di Java, sai se permette di utilizzare l'intero spettro del linguaggio Java in cima alle sue strane sintassi/scorciatoie? – Alex

+0

Ho usato queste librerie anche in Processing IDE ed eclipse su osx 10.6. Qual è il tuo setup? Si consiglia di utilizzare Processing in proprio o di utilizzarlo come libreria in un progetto Java. Per eclipse, dai un'occhiata a [Proclipsing] (http://code.google.com/p/proclipsing) o semplicemente crea un progetto Java e usa il core.jar di Processing se vuoi gestirlo manualmente. –

+0

Voglio solo programmarlo con un semplice editor di testo e la riga di comando, ho fatto qualche progresso scoprendo come inserire il wrapper java openkinect (libfreenect). Che consisteva fondamentalmente nella compilazione in qualche modo includendo due dei loro barattoli. <- Come puoi vedere sono abbastanza nuovo per la maggior parte di questi concetti di programmazione .. Sarei in grado di sfruttare in qualche modo il core.jar di Processing come hai detto in modo simile a quello che ho appena descritto e basta usare un un paio dei loro metodi nel mio programma java? In tal caso, potresti provare ad aiutarmi e spiegare come potrei farlo? Grazie per l'aiuto finora! – Alex

1

Ti darò alcune idee, ma ammetto che non l'ho provato con Kinect.
La domanda può essere categorizzata sotto domande di "Come accedere ad hardware tramite Java". Il tutorial che ci hai presentato presenta le librerie per l'accesso a Kinect e persino i wrapper per Python .
Quello che puoi fare è vedere come il codice Python ha implementato i wrapper e usare JNI/JNA per creare i tuoi wrapper.
Inoltre, ho esaminato il progetto JNect, menzionato qui in un'altra risposta, pubblicato da @npinti.
Il plug-in di eclissi ha due parti di esso -
il codice JNI, che include il codice originale SDK e il codice RCP Ecipse per il plugin eclipse stesso.
Si consiglia di ignorare la parte RCP di Eclipse e concentrarsi sull'implementazione JNI come riferimento a ciò che è necessario per sviluppare il proprio wrapper JNI.
Anche se si tratta di un'implementazione basata su Windows (es. Kinect SDK funziona su Windows, ed è necessario eseguire il codice su mac, ad esempio) - Penso che leggendo il loro codice + alcuni tutorial JNI + i wrapper python a il collegamento che hai fornito capirà come creare un wrapper JNI alla libreria presentata nel link che hai fornito.
Inoltre, considerare l'utilizzo di JNA e non di JNI come metodo di comunicazione con l'hardware, lo trovo più semplice.
Un'ultima opzione è forse quella di utilizzare il Java Script Engine e di invocare il codice Python (i wrapper Python) dal tuo java vode - non sei sicuro di quanto ti aiuterà, ma puoi dare un colpo.

+0

Purtroppo mi sembra di aver perso l'intero * Solo Windows 7 * ... Per far fronte a questo l'OP potrebbe prendere in considerazione l'utilizzo di una macchina virtuale basata su Windows. – npinti

2

Ho avuto esattamente lo stesso problema. Volevo utilizzare Kinect in Java per la mia ricerca Computer Vision e avevo un Mac OSX Lion come te. La soluzione che ho trovato è di eseguire una copia virtuale di Windows 7 nel mio Mac (usando VMWare o Parallels o Microsoft HyperV) e quindi utilizzare lo open source J4K Java for Kinect library, che è un collegamento Java per l'SDK Kinect che utilizza l'interfaccia JNI (Java Native Interface). Ovviamente puoi anche usare questa libreria open source direttamente nei computer che eseguono Windows.

La libreria Java di J4K per Kinect ha anche un'esercitazione su come scrivere un'applicazione basata su kinect in sole 10 righe di codice Java.

Ci sono anche diversi esempi di codice sorgente che mostrano come leggere i dati di profondità, video e scheletro dal Kinect e usarli nelle classi Java. Puoi anche utilizzare Kinect multipli, animare avatar e altri esempi. Il collegamento agli esempi di codice sorgente è here.

Uno screenshot open source Kinect Viewer, che è utile per le applicazioni di visione artificiale come la vostra è qui sotto: enter image description here

spero che queste informazioni ha aiutato.

+0

Non rallenta l'elaborazione dell'immagine? Presumo che il differimento dei dati in arrivo attraverso una macchina virtuale costerebbe in termini di prestazioni, giusto? – jorrebor

+0

Ho usato la libreria J4K in Java 7 con Intel i5 e l'elaborazione delle immagini molto intensa è stata realizzata in tempo reale (30 fps). @jorrebor puoi dare un'occhiata agli esempi reali [Demo1] (https: // www.youtube.com/watch?v=DMRlhWSZSe8), [Demo2] (https://www.youtube.com/watch?v=RSLd-lSk9ts) e [Demo3] (https://www.youtube.com/watch ? v = zBSiiOIEiPI). –