2012-07-20 15 views
10

Tôi hiện đang tham gia khóa học về Máy tính và đối với dự án cuối cùng của mình, tôi sẽ tạo ra một trò chơi nhỏ tương tác với Kinect.Làm cách nào để truy cập Kinect bằng Java?

Bây giờ tôi muốn làm trò chơi này bằng Java vì tôi chưa bao giờ thực sự mạo hiểm vào việc tạo ra một trò chơi trước đây và tôi rất thoải mái với Ngôn ngữ. Nhưng tôi dường như không thể tìm cách để truy cập dữ liệu Độ sâu (tôi chỉ cần gói nó vào một số cấu trúc Dữ liệu Java) và dữ liệu RGB (cùng một ý tưởng).

Ngay bây giờ, tôi có cách 'nói' với Kinect. Tôi theo dõi this hướng dẫn và có thể phát hiện kinect bằng cách sử dụng lệnh glview trong thiết bị đầu cuối. Tôi có một thứ gọi là Processing hứa hẹn sẽ là một thư viện Java để cho tôi sử dụng Kinect nhưng nó đang sử dụng ngôn ngữ riêng của nó được 'xây dựng' bằng cách sử dụng Java để nó không thực sự Java có nghĩa là tôi không thể sử dụng tất cả GUI và các tính năng Java thông thường.

Điều tôi muốn làm bằng cách nào đó gọi số import random.Kinect.code; ở đầu chương trình Java cho phép tôi sử dụng các tính năng cơ bản nhất của Kinect, như getDepth() hoặc getRGB() và làm mọi thứ khác trong Java.

Có ai biết cách tôi có thể thực hiện việc này không? (BTW Tôi đang chạy MAC OSX Lion)

+0

Điều này có giống như giao tiếp bằng cách sử dụng java không? –

+0

Nếu OpenKinect là điều của bạn, [JavaCVpro] (http://www.mon-club-elec.fr/pmwiki_reference_lib_javacvPro/pmwiki.php) nên hoạt động ... –

Trả lời

7

Nếu bạn đang sử dụng chế biến tôi khuyên bạn nên sử dụng một trong những giấy gói sẵn:

Cả được tài liệu hóa và bao gồm nhiều ví dụ hữu ích.

simpleOpenNI sample

+0

Vâng đó là điều, tôi đã xử lý nhưng nó là một hình thức kỳ lạ của Java, bạn có biết liệu nó cho phép sử dụng phổ đầy đủ của ngôn ngữ Java trên đầu trang của nó khác lạ cú pháp/phím tắt? – Alex

+0

Tôi đã sử dụng các thư viện này trong IDE chế biến và nhật thực cũng như trên osx 10.6. Thiết lập của bạn là gì? Bạn nên sử dụng chế biến riêng của nó hoặc sử dụng nó như một thư viện trong một dự án Java. Đối với nhật thực, hãy xem [Proclipsing] (http://code.google.com/p/proclipsing) hoặc đơn giản là tạo một dự án Java và sử dụng core.jar của Processing nếu bạn muốn xử lý nó 'thủ công'. –

+0

Tôi chỉ muốn lập trình nó với một trình soạn thảo văn bản đơn giản và dòng lệnh, tôi đã thực hiện một số tiến bộ bằng cách khám phá cách gõ vào trình bao bọc java openkinect (libfreenect). Trong đó về cơ bản bao gồm biên dịch bằng cách nào đó bao gồm hai lọ của họ. <- Như bạn có thể thấy tôi khá mới đối với hầu hết các khái niệm lập trình này. Tôi có thể bằng cách nào đó gõ vào 'core.jar' của Chế biến giống như bạn đã nói theo cách tương tự với khái niệm tôi vừa mô tả và chỉ sử dụng vài phương pháp của họ trong chương trình java của tôi? Nếu vậy bạn có thể cố gắng giúp tôi và giải thích làm thế nào tôi có thể làm điều đó? Cảm ơn sự giúp đỡ cho đến nay! – Alex

1

Tôi sẽ cung cấp cho bạn một số ý tưởng, nhưng tôi thừa nhận - Tôi không thử chúng với Kinect.
Bạn có thể phân loại câu hỏi theo câu hỏi "Cách truy cập một số phần cứng thông qua Java". Hướng dẫn bạn giới thiệu cho chúng tôi trình bày thư viện để truy cập Kinect và thậm chí là trình bao bọc cho Python.
Việc bạn có thể làm là xem mã Python đã triển khai trình bao bọc như thế nào và sử dụng JNI/JNA để tạo trình bao bọc của riêng bạn.
Ngoài ra, tôi đã xem xét dự án JNect, được đề cập ở đây trong một câu trả lời khác, được đăng bởi @npinti.
Plugin nhật thực có hai phần của nó -
mã JNI, mã này bao bọc theo mã SDK gốc, và mã RCP Ecipse cho trình cắm thêm eclipse.
Tôi khuyên bạn nên bỏ qua phần RCP Eclipse, và tập trung vào việc thực hiện JNI của họ như là một tham chiếu đến những gì bạn cần để phát triển trình bao bọc JNI của riêng bạn.
Thậm chí nếu đây là triển khai dựa trên windows (ví dụ: - Kinect SDK hoạt động trên cửa sổ và bạn cần chạy mã trên mac), tôi nghĩ rằng bằng cách đọc mã của họ + một số hướng dẫn JNI + trình đóng gói python tại liên kết bạn cung cấp, bạn sẽ hiểu cách tạo trình bao bọc JNI cho thư viện được trình bày trong liên kết mà bạn cung cấp.
Ngoài ra, hãy xem xét sử dụng JNA và không phải JNI như một cách để giao tiếp với phần cứng, tôi thấy nó dễ dàng hơn.
Một tùy chọn cuối cùng là có thể sử dụng Java Script Engine và gọi mã Python (trình bao bọc python) từ vode java của bạn - không chắc chắn nó sẽ giúp bạn như thế nào, nhưng bạn có thể cho nó một shot.

+0

Thật không may có vẻ như tôi đã bỏ lỡ toàn bộ * Windows 7 Only * deal ... Để giải quyết vấn đề này, OP có thể xem xét sử dụng Windows Virtual Machine. – npinti

2

Tôi đã gặp vấn đề tương tự. Tôi muốn sử dụng Kinect trong Java cho nghiên cứu Computer Vision của mình, và tôi có một Mac OSX Lion như bạn. Giải pháp mà tôi tìm thấy là chạy một bản sao ảo của Windows 7 trong máy Mac của tôi (sử dụng VMWare hoặc Parallels hoặc Microsoft HyperV) và sau đó sử dụng open source J4K Java for Kinect library, là một liên kết Java cho Kinect SDK sử dụng Giao diện Native Java (JNI). Tất nhiên bạn cũng có thể sử dụng thư viện mã nguồn mở này trực tiếp trong các máy tính chạy Windows.

Thư viện Java J4K cho Kinect cũng có hướng dẫn về cách viết ứng dụng dựa trên kinect chỉ trong 10 dòng mã Java.

Cũng có một số ví dụ mã nguồn cho bạn thấy cách đọc dữ liệu độ sâu, video và bộ xương từ Kinect và sử dụng chúng trong các lớp Java. Bạn cũng có thể sử dụng nhiều Kinects, animate avatars, và các ví dụ khác. Liên kết đến các ví dụ mã nguồn là here.

Một ảnh chụp màn hình của mã nguồn mở Kinect Viewer, đó là hữu ích cho các ứng dụng máy tính Vision như của bạn là dưới đây: enter image description here

Tôi hy vọng rằng những thông tin này giúp đỡ.

+0

Điều này có làm chậm quá trình xử lý hình ảnh không? Tôi giả định trì hoãn các dữ liệu đến thông qua một máy ảo sẽ có hiệu suất chi phí, phải không? – jorrebor

+0

Tôi đã sử dụng thư viện J4K trong Java 7 với Intel i5 và xử lý hình ảnh rất chuyên sâu đã đạt được trong thời gian thực (30fps). @ jorrebor bạn có thể xem các ví dụ thực tế [Demo1] (https: // www.youtube.com/watch?v=DMRlhWSZSe8), [Demo2] (https://www.youtube.com/watch?v=RSLd-lSk9ts) và [Demo3] (https://www.youtube.com/watch ? v = zBSiiOIEiPI). –