【问题标题】:How can I access the Kinect using Java?如何使用 Java 访问 Kinect?
【发布时间】:2012-07-19 12:18:30
【问题描述】:

我目前正在学习计算机视觉课程,在我的期末项目中,我将制作一个与 Kinect 交互的小游戏。

现在我想用 Java 制作这款游戏​​,因为我以前从未真正尝试过制作游戏,而且我对 Java 语言非常熟悉。但我似乎无法找到一种方法来访问深度数据(我只需要将它打包到一些 Java 数据结构中)和 RGB 数据(相同的想法)。

现在,我有办法与 Kinect 进行“对话”。我遵循this 教程,可以在终端中使用命令glview 检测kinect。

我有一个名为 Processing 的东西,它承诺是一个 Java 库,让我可以使用 Kinect,但它使用的是它自己的语言,它是使用 Java“构建”的,所以它不是真正的 Java,这意味着我不能使用所有 GUI 和普通 Java 功能。

我想做的是以某种方式在 Java 程序的顶部调用一些 import random.Kinect.code;,让我可以使用最基本的 Kinect 功能,如 getDepth() 或 getRGB() 并在 Java 中执行其他所有操作。

有谁知道我可以做到这一点的方法吗? (顺便说一句,我正在运行 MAC OSX Lion)

【问题讨论】:

  • 这就像使用 java 接口吗?
  • 如果你喜欢 OpenKinect,JavaCVpro 应该可以工作...

标签: java macos kinect processing


【解决方案1】:

我遇到了完全相同的问题。我想在 Java 中使用 Kinect 进行计算机视觉研究,并且我有一个像你一样的 Mac OSX Lion。我找到的解决方案是在我的 Mac 中运行 Windows 7 的虚拟副本(使用 VMWare 或 Parallels 或 Microsoft HyperV),然后使用 open source J4K Java for Kinect library,这是使用 Java Native Interface (JNI) 的 Kinect SDK 的 Java 绑定)。当然,您也可以直接在运行 Windows 的计算机中使用这个开源库。

Kinect 的 J4K Java 库还有一个教程,介绍如何用 10 行 Java 代码编写基于 kinect 的应用程序。

还有几个源代码示例向您展示如何从 Kinect 读取深度、视频和骨架数据并在 Java 类中使用它们。您还可以使用多个 Kinect、动画化身和其他示例。源代码示例的链接是here

以下是开源 Kinect Viewer 的屏幕截图,它可用于像您这样的计算机视觉应用程序:

我希望这些信息有所帮助。

【讨论】:

  • 这不会减慢图像处理速度吗?我认为通过虚拟机延迟传入的数据会具有成本效益,对吧?
  • 我在 Java 7 和 Intel i5 中使用了 J4K 库,并且实时实现了非常密集的图像处理 (30fps)。 @jorrebor,您可以查看实际示例 Demo1Demo2Demo3
【解决方案2】:

如果您使用的是 Processing,我建议您使用其中一种可用的包装器:

两者都有很好的记录,并包含大量有用的示例。

【讨论】:

  • 嗯,就是这样,我有处理,但它是某种奇怪的 Java 形式,你知道它是否允许在奇怪的不同语法/快捷方式之上使用 Java 语言的全部范围?
  • 我已经在 Processing IDE 和 Eclipse 中使用了这些库,也在 osx 10.6 上使用了这些库。你的设置是什么?您应该可以单独使用 Processing 或将其用作 Java 项目中的库。对于 Eclipse,请查看 Proclipsing 或简单地创建一个 Java 项目并使用 Processing 的 core.jar 如果您想“手动”处理它。
  • 我只是想用一个简单的文本编辑器和命令行对其进行编程,我通过发现如何利用 openkinect (libfreenect) java 包装器取得了一些进展。这基本上包括以某种方式编译,包括他们的两个罐子。
  • 试试这个非常基本的设置: 1. 下载 Processing 并运行一次(这样您的 Documents 文件夹中有一个 Processing 文件夹)。 2. 下载 Processing OpenKinect 包装器并将其解压缩到 Documents/Processing/libraries 中。 3. 运行 Processing 并转到 File > Examples > Contributed Libraries > openkinect > PointCloud 或从 Documents/Processing/libraries/openkinect/examples/PointCloud 打开 PointCloud.pde 文件。这应该需要几分钟来测试。 Processing IDE 是一个简单的文本编辑器...
  • 您不需要命令行,也不需要编译任何 .jars - Processing 的目的是让事情变得易于使用。尽管如此,如果你想从头开始做事情(你需要吗?),关于 core.jar,你可能想要创建一个扩展 processing.core.PApplet 的类并覆盖 setup() 和 draw() 方法以开始吧。如果有帮助的话,PApplet 本身扩展了 java Applet 类。
【解决方案3】:

我会给你一些想法,但我承认 - 我没有用 Kinect 尝试过。
您的问题可以归类为“如何通过 Java 访问某些硬件”的问题。 您向我们展示的教程介绍了用于访问 Kinect 的库,甚至是用于访问 Kinect 的包装器。 Python。
您可以做的是查看 Python 代码如何实现包装器,并使用 JNI/JNA 构建您自己的包装器。
此外,我查看了@npinti 发布的另一个答案中提到的JNect 项目。
eclipse 插件有两部分 -
JNI 代码,它包装了原始 SDK 代码,以及 eclipse 插件本身的 Ecipse RCP 代码。
我建议您忽略 Eclipse RCP 部分,并专注于他们的 JNI 实现,作为您开发自己的 JNI 包装器所需的参考。
即使这是基于 Windows 的实现(例如,Kinect SDK 可以在 Windows 上运行,并且您需要在 Mac 上运行代码)-我认为通过阅读他们的代码 + 一些 JNI 教程 + 链接中的 python 包装器您提供的内容将了解如何为您提供的链接中提供的库创建 JNI 包装器。
此外,考虑使用JNA 而不是JNI 作为与硬件通信的方式,我发现它更容易。
最后一个选项可能是使用Java Script Engine 并从您的 java vode 调用 Python 代码(python 包装器) - 不确定它会对您有多大帮助,但您可以试一试。

【讨论】:

  • 不幸的是,我似乎错过了整个 仅限 Windows 7 交易...为了解决这个问题,OP 可能会考虑使用基于 Windows 的虚拟机。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 2015-06-30
  • 2017-06-20
  • 2013-08-08
相关资源
最近更新 更多