Kinect 与 Linux
少数派报告最近一直在有线电视上轮播,您可能已经看过汤姆·克鲁斯站在大屏幕前,挥舞双手操纵信息的未来景象。在一定程度上,由于游戏行业的规模经济,这个愿景离现实更近了一步。我通常没有理由赞扬微软,尤其是在一本致力于 Linux 和所有开源事物的杂志上。但我们在雷德蒙的朋友们做得非常出色的一件事就是将硬件商品化。他们通过将 Kinect 创建为 Xbox 360 游戏机的自然界面来实现了这一点。更重要的是,他们允许开源开发者为该设备创建驱动程序,甚至允许开发该技术的第三方 PrimeSense, Inc. 发布其自己的适用于 Linux、Windows 和 OS X 的设备驱动程序。

图 1. 作者在 Kinect 深度视图中看到的图像
自然界面使用“自然”交互的计算机界面被恰当地称为自然用户界面,或 NUI。其含义与其说是界面本身是自然的(让我们面对现实,没有自然的、未经学习的方式与机器交互),不如说是界面非常容易学习,并且在这个意义上是自然的。自然用户界面是一个非常活跃的研究课题,并且已经展示了各种各样的原型。探索自然界面和 Kinect 的项目列表不断扩展。以下是一些在网上尝试过的项目
-
机器人视觉系统。
-
室内房间mapping。
-
通过手势控制灯光。
-
手语计算机界面。
-
标准化手势界面。
-
用手势演奏音乐(包括电影玩具中的地板钢琴)。
-
虚拟键盘。
-
教学(例如舞蹈、空手道和太极)。
-
基于手势的演示文稿。
Kinect 紧密封装了传感器阵列和专用设备,用于预处理接收到的信息。Kinect 与游戏机或 Linux 之间的通信通过单根 USB 电缆进行。
对 Kinect 的制造成本进行了几种不同的估计,范围从大约 56 美元到 150 美元不等。无论实际成本是多少,我们都必须赞扬微软将其原始原型(据报道为 30,000 美元)的成本降低了至少两个数量级,从而创造出可行的商业产品。
您可以在 YouTube 上观看 Kinect 的完整拆解视频(请参阅“资源”),在视频中您会发现以下内容
-
一个投影红外光束场的投影仪,用于检测深度。
-
两个摄像头(每个 640x480):一个单色红外摄像头,用于检测反射红外光束阵列(这是用于构建深度图像的信息)和一个彩色摄像头,可用于捕获快照或用作网络摄像头。
-
四个麦克风。
-
一个电机,用于上下倾斜传感器阵列,以获得最佳场景视野。
-
一个加速度计,用于感应位置。
-
两个摄像头的摄像头接口和预处理器。
-
512MB DDR 内存和 8MB 闪存。
-
USB 接口。
红外光束经过编码,当它们从传感器阵列前方的表面反射并被红外摄像头检测到时,Kinect 中的预处理器会计算从阵列到反射表面的距离。专有软件可以使用该信息来识别场景中可能的人以及他们的手臂和腿的可能位置。
Kinect 开源Kinect 和开源的简短历史很有趣,具有启发意义,它展示了开源的强大力量
-
2010 年 11 月 4 日,微软在美国发布了 Kinect。
-
同一天,Adafruit Industries 宣布,它将向任何人为 Windows 或任何其他操作系统上的设备提供开源驱动程序的人支付 1,000 美元。
-
几小时后,微软宣布它不会纵容对其任何设备的黑客行为。Adafruit 回应称,将赏金提高到 2,000 美元。
-
到 11 月 6 日星期六,一位名为 AlexP 的黑客声称已经破解了 Kinect 电机的接口。微软表示这不是真的。Adafruit 将奖励提高到 3,000 美元。
-
到那个星期一,AlexP 发布了视频,证明他不仅能够控制电机,还能够连接到 Kinect 上的深度感知和彩色摄像头。他本可以选择发布代码并领取奖金,但相反,在星期二,他发布了一条消息,称如果捐款 10,000 美元用于资助他的进一步工作,他将发布代码。
-
星期二晚上,Adafruit 发布了一个大型数据集,该数据集由 USB 分析仪记录,用于监视 Kinect 和 Xbox 之间的数据流。全球的黑客开始使用该数据集来研究接口的细节。
-
星期三,Kinect 在欧洲发布。Hector Martin 在西班牙毕尔巴鄂附近,那天早上购买了一个,并使用 Adafruit 发布的数据,在中午之前成功将其连接到他的 PC。结果发布在 libfreenect 网站上,奖品被赢得了。
-
但故事并没有就此结束。在同一周的星期五,微软重新考虑了其对开源驱动程序的立场。微软以一种非凡的语义花招表示,根据其定义,Kinect 没有被黑客入侵,实际上还赞扬了开发者扩展设备的使用。
在短短几天内,开源社区就抓住了微软提供的机会,创建了一个开源替代方案,为自然界面的研究创造了爆炸式的可能性。
OpenKinect 和 OpenNIAdafruit 竞赛是在一个名为 libfreenect 的 GitHub 网站上举办的。竞赛结束后,Josh Blake 和其他人创立了一个名为 OpenKinect 的社区。来自他们的网站(请参阅“资源”)
OpenKinect 是一个开放社区,成员对将 Xbox Kinect 硬件与我们的 PC 和其他设备一起使用感兴趣。我们正在开发免费的开源库,这些库将使 Kinect 能够与 Windows、Linux 和 Mac 一起使用。
OpenKinect 社区由 2,000 多名成员组成,他们贡献自己的时间和代码来参与该项目。我们的成员加入该项目的使命是为 Kinect 创建尽可能最好的应用程序套件。OpenKinect 是一个真正的“开源”社区!
我们目前的主要重点是 libfreenect 软件。在可能的情况下,贡献给 OpenKinect 的代码在 Apache20[sic] 或可选的 GPL2 许可下提供。
大约在同一时间,许多对自然界面商业化感兴趣的公司组成了一个名为 OpenNI 的组织。根据他们的网站(请参阅“资源”)
OpenNI 组织是一个行业主导的非营利组织,旨在认证和推广自然交互设备、应用程序和中间件的兼容性和互操作性。OpenNI 组织的目标之一是加速将自然交互应用程序引入市场。
OpenNI 根据几种不同的许可证提供其软件——开源部分使用 LGPL,一些专有部分(如骨骼识别)仅提供二进制文件。OpenNI 的创始人包括
-
PrimeSense, Inc.,该公司为微软提供了“Project Natal”的技术,该技术后来成为 Kinect。
-
Willow Garage,一家专注于个人机器人硬件和软件的公司。
-
SideKick,一家开发基于运动的游戏的游戏软件公司。
-
华硕,计算机 OEM 厂商,正在销售一种基于 PrimeSense 技术的不同 3D 深度传感器,称为 X-tion Pro。
总的来说,OpenKinect 似乎正在从自下而上的方法接近 NUI,从 libfreenect 驱动程序开始,并在其基础上构建,所有这些都是严格开源的。OpenNI 对来自不同供应商的 NUI 设备如何互操作具有更具架构性的愿景。这两个组织有充足的合作空间。
亲自尝试Kinect 的驱动程序和演示软件很容易获得,可以从 OpenNI 和 openkinect.org 获取(请参阅“资源”)。在 Ubuntu 10.10 上安装尤其容易,因为这两个组织都提供了预构建的软件包。如果您运行的是不同的 Linux 发行版,RPM 和 deb 软件包也可用,并附带充足的构建说明,因此您不应该遇到问题。
使用 OpenKinect 软件包,您可以获得一些演示程序,这些程序展示了 Kinect 的深度感知和彩色图像功能。其中包含一些实用程序,用于记录 Kinect 数据流和模拟 Kinect,以便在未连接硬件的情况下使用该软件。还有针对以下语言的各种开发阶段的语言接口
-
Python。
-
同步 C 接口(函数而不是回调)。
-
ActionScript。
-
C++。
-
C#。
-
Java JNI。
-
Java JNA。
-
JavaScript。
-
Common Lisp。
OpenNI 软件包具有类似的功能,并且它包括 C/C++ 接口到底层层的详细文档。OpenNI 文档和示例代码面向 Visual Studio,但其中大部分也适用于 gcc。
现实的残酷好吧,电影错了,但是将 Kinect 与 Linux 一起使用有一些不太明显的现实情况。它们可能会或可能不会影响您的探索
-
Kinect 设备上的 USB 连接器是非标准的。如果您单独购买 Kinect 设备,这没关系。它带有电源和适配器,可以使用标准 USB。如果您购买 Kinect 作为 Xbox 套件的一部分,您将需要单独购买电源/适配器。
-
Kinect 中的深度感知技术在 6-8 英尺的距离处效果最佳。它不是鼠标和键盘距离的界面,而是一个站在房间对面挥手的界面。
-
Kinect 软件能够确定身体位置并推断手臂和腿的位置,但它无法进行诸如单个手指分辨率之类的事情。这使得进行诸如手语解释之类的事情变得困难。
因此,现在只需 150 美元,您就可以开源访问几年前需要花费 30,000 美元的硬件。您能想出什么巧妙的 NUI 主意?
资源OpenKinect: http://www.openkinect.org
OpenNI: http://www.openni.org