65.9K
CodeProject 正在变化。 阅读更多。
Home

PerceptuCam 案例研究

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (1投票)

2013年7月26日

CPOL

12分钟阅读

viewsIcon

21074

downloadIcon

178

PerceptuCam 案例研究

想象一下

从功能角度来看,20 世纪 90 年代的视频会议系统与 20 世纪 60 年代 AT&T 的 Picturephone 相比几乎没有进步。但如果视频不仅关乎图像和声音,还关乎元数据呢?如果这些元数据能帮助计算机以更自然的方式与人类互动呢?这就是感知计算的承诺,也是 21 世纪“视频”的真正含义。

1969 年,瑞典首相 Tage Erlander 使用视频电话与颇受欢迎的电视节目主持人 Lennart Hyland 通话。来源:Wikimedia Commons

英特尔正认真地推动感知计算成为主流,但该公司深知,明星开发者可以通过运用他们的创造性想象力和技术专长来贡献当今早期感知计算的构建模块,从而极大地促进这一进程。因此,当七位顶级开发者入选英特尔“终极程序员挑战:走向感知”大赛,并被告知可以自由使用英特尔® 感知计算 SDK 时,人们对成果寄予厚望。经过七周的激烈角逐,没有人感到失望。

参赛选手 Lee Bamber 凭借其 PerceptuCam 应用,成功地将感知计算与视频会议相结合,荣获最佳视频奖,并并列获得最佳博客奖。他展示了曾经是少数大企业才能享有的奇幻通信技术,如今已触手可及。

PerceptuCam 主屏幕

PerceptuCam:形态与功能

PerceptuCam 绘制了一个以会议桌为中心的 3D 虚拟世界。每位参与者操作一台连接了手势摄像头的 PC。软件将每位用户数字化为一个坐在桌旁的虚拟形象。这种将多人视频会议与虚拟现实相结合的做法本身就极具创新性,但 Bamber 更进一步。在虚拟空间中,用户可以访问一系列虚拟对象,这些对象可作为真实对象或功能的类比。例如,会议室的后方可能有一个“大屏幕显示器”,用户可以通过手势进行控制。或者,用户可以拥有一个虚拟文件文件夹,可以将其抛给另一位参与者,从而将文件夹的内容传输给该用户。

Bamber 的目标之一是让 PerceptuCam 易于学习,因此界面中加入了语音识别功能。用户不会看到大量选项或菜单,而是主屏幕上只有两个巨大的按钮:“主持人”和“呼叫”。通过手势摄像头进行的头部追踪可以改变视角,让用户可以环顾虚拟房间,无需鼠标或键盘。到目前为止,Bamber 只创建了一种手势控制:用户在摄像头前画一个正方形,然后向左或向右挥动手。屏幕上,操作者的指尖会射出绚丽的烟花,作为某种操作正在进行的视觉提示。Bamber 将这个功能证明设计得更像一个实验,而不是未来的固定方法,但他的观点很明确。借助感知计算,输入可以像有效和功能一样快速且具有视觉吸引力。

事实上,Bamber 有几次机会可以使界面更复杂,但他迫使自己保持简单以应对英特尔的比赛。“因为这是一个远程会议应用程序,”他指出,“我不得不花大量时间编写网络部分——那些能让两个完全独立的程序足够快地相互通信,从而获得流畅的会议体验的部分。我其他的想法,比如从计算机中提取文档,将其变成虚拟对象,然后传递给桌子周围的人……这些都不得不放弃。你在视频中看到的软盘是一种早期原型,用于探索虚拟对象共享可能如何工作。”

感觉模糊吗?这里有很多痕迹……除了软盘。

毫不奇怪,PerceptuCam 相当耗费带宽。Bamber 感谢自己拥有一台 Ultrabook™ 设备,能够提供其系统更高阶的处理能力;尽管他担心自己可能“把它弄得有点融化了”。(每位参赛者都收到了一台配有 Creative Interactive Gesture Camera 开发套件的 Ultrabook 设备。)其他条件都相同的情况下,Bamber 更喜欢有线网络连接,因为它通常能更好地满足应用程序持续的带宽需求。他希望平板电脑很快就能拥有支持他这样要求苛刻的 3D 应用程序所需的资源。

开发过程中解决的挑战

与所有竞争对手一样,Bamber 在比赛期间面临的最大挑战是七周的赛程,以及它对交付想象成果能力的限制。可能性如此之多,时间却如此之少。事实上,除了支付给第三方艺术家三个小时的工作费用来创建最终的视频会议模型外,Bamber 自己完成了 PerceptuCam 的所有工作,同时还要承担全职工作的承诺。大部分 PerceptuCam 工作发生在周末,有时会进行长达 29 小时的编码马拉松。

但 Bamber 还有另一个可能更具毁灭性的弱点:虽然他在 3D 编程方面有丰富的经验,但他没有感知计算的背景。幸运的是,作为一名职业程序员,Bamber 理解拥有适合工匠的工具集的重要性。2000 年,Bamber 的公司 The Game Creators 发布了一种名为 DarkBASIC 的编程语言。它允许程序员使用广为人知且相当简单的 BASIC 语言为 DirectX* 游戏进行编码。DarkBASIC 在创建 3D 世界方面表现出色,非常适合设计 3D 会议空间,但完全缺乏任何感知计算能力。因此,Bamber 添加了这些功能。

“因为我编写了这门语言,我可以添加任何我想要的东西,”Bamber 说。“我添加了感知计算功能的理论,因此我可以扩展编程语言的功能。我在我已有的所有科学和能力之上添加了感知计算,获得了更好的工具集。”

有趣的是,Bamber 遇到了另一个在新技术领域开拓者中普遍存在的问题:缺乏一套通用的约定。考虑一下通用的例程,比如右键单击字体控件或 Ctrl-C 进行复制。在这些快捷方式存在之前,除了通过“文件”菜单缓慢操作外,没有快速执行这些功能的方法。同样,如今也没有普遍接受的手势控制。如何挥手调出命令列表?没人知道,因为手势库还没有存在。

Bamber 没有试图创建这样的库。他满足于设计一个手势——正方形和挥动。但即使能走到这一步,也需要大量的实验。他发现人们最喜欢的手势往往带有“即时视觉提示”。这就是他设计“烟花”效果的原因。

烟花!光标追踪从未如此出色。

Bamber 建议,一旦你从感知计算 SDK 或自己的实现中获得了手势函数的坐标,你可能需要进行手势检测。这是 Bamber 的源代码,用于检测用户何时在摄像头的视野范围内挥动手。

// track left/right sweeps
if ( bHaveDepthCamera )
{
 if ( iNearestX[1]!=0 )
 {
  iNearestY[1] = 0; 
  if ( iSwipeMode==0 && iNearestX[1] > 160+80 )
  {
   iSwipeMode=1;
   iSwipeModeLives=25;
  }
  if ( iSwipeMode==1 && iNearestX[1] > 160+0 )
  {
   if ( iNearestX[1] < 160+80 )
   {
    iSwipeModeLives=25;
    iSwipeMode=2;
   }
  }
  else
  {
   iSwipeModeLives--;
   if ( iSwipeModeLives < 0 ) iSwipeMode=0;
  }
  if ( iSwipeMode==2 && iNearestX[1] > 160-80 )
  {
   if ( iNearestX[1] < 160+0 )
   {
    iSwipeModeLives=25;
    iSwipeMode=3;
   }
  }
  else
  {
   iSwipeModeLives--;
   if ( iSwipeModeLives < 0 ) iSwipeMode=0;
  }
  if ( iSwipeMode==3 && iNearestX[1] < 160-80 )
  {
   // swiped
   iNearestY[1] = 5; 
   iSwipeMode = 0;
  }
  else
  {
   iSwipeModeLives--;
   if ( iSwipeModeLives < 0 ) iSwipeMode=0;
  }
 }
}

集成感知手势命令并不一定复杂或困难。Bamber 的挥动手势代码只有几十行。

手势计算不是一天或七周就能建成的,Bamber 发现利用触摸屏技术可以方便地保留他想要在程序中实现的手绘草图功能。然而,这种方法比预期的要棘手。

“当你在应用程序中创建草图时,另一端可以看到草图,”Bamber 说。“传统上,这需要鼠标,每个人都知道如何为它编程。然后,当你升级到 Windows* 8 并在 Ultrabook 屏幕上进行触摸操作时,处理方式略有不同。长话短说,鼠标控件和触摸并不完全匹配。我不得不进行一些特定的 Windows 8 触摸相关代码,才能创造出良好的草图体验。”

当 Bamber 谈论“融化”他的 Ultrabook 时,他实际上是在揭示感知计算世界中一个以前未知(或至少未被探索)的障碍。显然,两个每秒 30 帧的摄像头流(每只手势摄像头镜头一个)需要巨大的带宽。虽然不如摄像头流那么耗费资源,但来自麦克风的语音输入流增加了额外的负担。然后,Bamber 对摄像头数据进行了额外的处理,试图将眼球运动作为一种输入模式与头部运动结合起来。所有这些加在一起被证明是太多的——不一定是 Ultrabook 设备 CPU 的负担,而是软件堆栈的带宽——语音流变得过于断断续续,无法进行识别。他放弃了眼球追踪以解决这个问题,并继续前进。

Bamber 的最后一个挑战是他最引人入胜的程序元素之一。在每次 PerceptuCam 会话中,每个用户的虚拟形象周围都围绕着“模糊点”,这些模糊点表现为快速移动、密集排列的线条,在每个参与者周围舞动。(任何记得《少数派报告》中汤姆·克鲁斯饰演的角色观看妻子全息家庭录像的场景的人,都会觉得这种效果非常相似。)模糊点实际上是从手势摄像头接收到的红外线波动派生出的伪影。Bamber 花费了数小时徒劳地试图解决这个问题。然后,观察者报告说他们实际上*喜欢*这些模糊点。英特尔的评委们也表示赞同。Bamber 最终屈服于公众舆论,将模糊点视为一项功能(尽管他仍然认为它们可以在软件中得到缓解)。

虽然 Bamber 认为有基于软件的方法可以缓解 PerceptuCam 虚拟形象周围的“模糊点”,但许多观察者喜欢这种效果,说服 Bamber将其保留。

学到的经验,给出的建议

Bamber 从零开始学习感知计算,要在此处详尽说明他在七周编码冒险中学到的一切,所需的篇幅将远远超出本文的限制;幸运的是,他屡获殊荣的博客系列详细介绍了许多这些进展,我们鼓励读者关注他的“终极程序员挑战:走向感知”之旅。

Bamber 指出,尤其值得关注的一个领域是英特尔感知计算 SDK。参赛者使用的 SDK 在他们采用时仍处于测试阶段,存在一些粗糙之处。但所有参赛者都明白帮助改进测试版 SDK 并使其对更广泛的社区有所帮助的重要性。Bamber 之所以被视为经验丰富、能力强的程序员,就在于他能够发现 SDK 的弱点,绕过它们,并在可能的情况下进行改进。

“不要假设任何 SDK 都能做一切事,”他警告说。“同样,不要认为文档中有某项功能,它就一定存在于 SDK 中。我认为这两个假设可以为任何开发者节省数周的痛苦。如果你开始编写应用程序,认为这些功能在你需要的时候就会可用,结果当你去找它们时却发现它们不存在,你就会得到一个半成品应用,而且那时为时已晚,无法回头。”

Bamber 的个人最佳实践是获取 SDK,然后编写小的、底层的原型来测试功能。这些成为构建模块。他直到所有所需的构建模块都已开发并测试完毕,才会开始编写应用程序本身。

另一个策略是深入研究 SDK,并熟悉其优势和劣势。即使是测试版的 SDK 也能带来显著的优势。

“如果你仅仅从感知计算 SDK 获取深度数据,那么你可以用这些数据做无数的事情。这是来自用户的、每秒 30 帧的、实时的、未经过滤的、不受干扰的精彩数据。非常熟悉这些深度数据,你几乎可以做任何事情。就像那个至尊魔戒一样,可以控制一切。”

Bamber 还有另一条智慧之言:不要认为你的应用程序可以处理一切。尤其是在感知计算这样的新领域,很容易朝着十几二十个方向发展,试图解决整个领域。缩小你的感知计算目标,即使只有一个。确保它能够实现——然后做得很好。要求更多只会增加挫败感和项目失败的可能性。

展望未来

摄像头分辨率将很快得到改进,Bamber 已经预见到能够识别用户正在查看的 PerceptuCam 菜单。例如,如果左侧和右侧都有菜单,而用户明显在看左侧菜单,那么语音识别引擎就可以只关注该菜单中的词语,从而减轻计算负担。在此期间,Bamber 怀疑鼻子追踪是否能起到相同的作用。

Bamber 经营企业已超过十年,他声称,此类虚拟会议解决方案仅对拥有“零多的”采购预算的大型企业来说是可行的。通过低于 200 美元的手势摄像头、英特尔感知计算 SDK 和一点辛勤努力,开发者就可以打破过去的定价壁垒,将 PerceptuCam 之类的产品带给所有人。可能需要全行业的营销推广,但目标受众就在那里,并等待着。

“感知计算确实是一个飞跃,”Bamber 说。“其他事物——DirectX 10 图形卡的开发,将十个传感器塞进 Ultrabook——实际上只是现有事物的扩展和组合。感知计算是全新的领域。你几乎可以预知人们要做什么,计算机捕捉到的每一个细微的手势……这很令人兴奋。我认为我们还没有看到这项技术将能实现的 10%。”

资源

“终极程序员挑战:走向感知”的参赛者在整个比赛过程中都非常支持彼此,Bamber 认为与他们的互动是他取得个人成就的关键资源之一。他还依赖于英特尔感知计算 SDK、他自己的DarkBASIC Professional 语言、Microsoft Visual Studio* 2012 以及 C++ 来为数据语言添加感知计算元素。

Bamber 指出,大多数 SDK 示例是用 C++ 编写的。有些是 C#。更少的是用Unity* 编写的。但他推荐 C++,因为目前大多数必要的资源都集中在那里。同样,他为 Windows 8 桌面环境编写 PerceptuCam,因为他几乎所有的现有代码库都在该环境中运行。为以触摸为中心更多的 Windows Runtime(“Metro”)环境编程将意味着从头开始。

英特尔不就第三方供应商及其设备的质量、可靠性、功能或兼容性做出任何表示或保证。有关优化信息,请参阅 software.Intel.com/en-us/articles/optimizationnotice/。所有产品、日期和计划均基于当前预期,并可能随时更改,恕不另行通知。Intel、Intel 标志和 Ultrabook 是 Intel Corporation 在美国和/或其他国家/地区的商标。*其他名称和品牌可能被声称为他人的财产。版权所有 © 2013. Intel Corporation。保留所有权利。

© . All rights reserved.