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

创新奖得主让无声者发出声音

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013年7月7日

CPOL

13分钟阅读

viewsIcon

18086

Bryan Brown 的获奖应用程序帮助截瘫患者和其他无法控制身体的人重新获得一定的沟通能力。本文详细介绍了他的构思到最终获奖应用程序的整个过程,并展示了开发过程是多么的流畅和易于访问。

创新奖得主让无声者发出声音

BlinkTalk 的用户永远不会因为 Bryan Brown 的获奖应用程序而微笑,甚至点头表示喜悦。他们不能。他们眼睛以下的肌肉完全无法控制。但是,有了这款应用程序、一台 Ultrabook™ 设备和肌电图的强大功能,许多“闭锁综合征”患者现在能够进行口头交流,这或许是多年来的第一次。

当拥有 20 年编程和开发工程经验的 Bryan Brown 在 CodeProject 上看到英特尔® 应用创新大赛的宣传时,他看到了一个绝佳的机会。这是他将全职从事化学处理仪器软件开发工作中 C# 和 Windows* Presentation Foundation (WPF) 的知识,应用到全新且令人惊叹的事物上的机会:帮助截瘫患者和其他无法控制身体的人重新获得一定的沟通能力。他从一个想法到开发出能够改变人们生活的获奖应用程序的历程,充分展示了开发过程的流畅性和易访问性。

BlinkTalk 的工作原理

BlinkTalk 对 NeuroSky MindWave* 设备检测到的眨眼模式进行二进制编码,并将这些代码转换为预设短语,通过语音合成技术由主机计算机选择并说出。MindWave 测量有意控制的肌电图活动(眨眼强度),这些活动会转化为数值,最终体现为用户的沟通。

Bryan Brown 发现英特尔® 参考 Ultrabook™ 设备是开发 BlinkTalk 应用和进行现场使用的理想平台。照片中,NeuroSky 的 MindWave* 头戴设备挂在屏幕右侧。

Brown 开始开发 BlinkTalk,他仔细研究了 NeuroSky SDK 及其支持文档。他在 Microsoft Visual Studio* 2010 Pro 中进行的许多基于 Microsoft Windows* 的开发工作都建立在 .NET 框架的基础上,因此他找到了一款适合这项工作的 DLL(Brian Peek 的 ThinkGearNET)。这个驱动程序基本上封装了 NeuroSky DLL。有了它,基于 C#/WPF 的 BlinkTalk 应用会在监测到的脑电波信号在给定范围内状态改变时触发一个事件处理程序。

“每当 MindWave 事件处理程序触发时,”Brown 说,“它会更新四个私有数据成员:注意力、冥想、眨眼强度和信号质量差。BlinkTalk 中用于这两个持续运行线程的变量就是这些——一个用于处理,另一个用于用户界面。用户界面线程创建一个调度程序,允许处理线程和用户界面访问相同的数据成员。”

界面内部

BlinkTalk 主要由三个页面组成:主操作屏幕、编辑设置屏幕和帮助/关于页面。BlinkTalk 的第一个版本提供了 16 个可能的眨眼短语,基于四个数据位(42)。Brown 将数量保持得较低,以便为英特尔应用创新大赛简化初始设计。16 个眨眼短语是默认选择的,但所有短语都可自定义,程序参数(如眨眼阈值和扫描速率)也可以自定义。

操作屏幕显示了 16 个可能的语句列表:15 个短语,例如“我很好”和“我们要去哪里”,以及沉默。每个语句都对应一个由四个二进制真/假 (T/F) 值组成的字符串。例如,TFFT 可能表示“我喜欢它”。BlinkTalk 会滚动浏览这四个字母位置中的每一个,用户必须在光标停在每个位置时及时眨眼。眨眼的强度决定了该值是注册为 T 还是 F。

右侧的照片显示了 BlinkTalk 应用程序的早期原型设计,配备了 USB 接口的 NeuroSky MindWave* 控制器。左侧显示实时 EMG 图。Bryan Brown 决定在最终的应用程序界面中移除这些图,以便使其更简洁、更流畅。

在 PC 上控制应用程序的操作员可以微调传感器阈值,以优化硬眨眼和软眨眼值。他们还可以更改扫描速率,即输入光标从一列移动到下一列之间的延迟。几乎不需要额外的配置。

在用户选择一个眨眼短语后,应用程序会通过计算机的扬声器播放该短语。尽管语音功能对于 BlinkTalk 的核心目标——让行动不便的人能够进行有限的交流——并非必需,但能够通过应用程序大声说出想法可以带来满足感。

为了实现这一功能,BlinkTalk 使用了 System.Speech.Synthesis 命名空间,这是一种快速而强大的为 .NET 应用程序添加语音功能的方法。该命名空间包含应用程序与操作系统语音合成引擎交互所需的类。本质上,应用程序会生成一个“扬声器”对象,当检测到的短语字符串的参数值被评估时,该对象的 Speak 方法会被调用。

“目前,BlinkTalk 使用一个字符串数组来存储要说的短语,”Brown 说。“实现了一个静态的 AppData 类,其中包含用于保存和检索此数据以及其他应用程序配置设置(如眨眼强度阈值和扫描速率)的方法。现在,可用的短语数量相当有限,但最终我们希望实现一个上下文感知的菜单方法,允许通过眨眼导航到更多短语。采用数据库驱动的架构可能是扩展 BlinkTalk 功能的更好方法。”

最终设计决策

在进入比赛的第二轮后,Brown 从 Comodo 获得了代码签名证书(这是在英特尔 AppUp® 中心发布的前提条件),并从英特尔获得了一台支持触摸屏的 Ultrabook 设备。据 Brown 说,触摸屏功能的增加显著提高了 BlinkTalk 的可用性,并简化了操作员的学习曲线。

“治疗师在患者训练期间可以使用触摸操作,而不是键盘和鼠标操作,这可以大大简化互动学习过程,”Brown 说。“此外,手部活动受限的患者可以增强他们与软件的互动,并在交流方式上获得更大的灵活性和深度。”

触摸功能与 UI 设计之间存在直接联系,这甚至延伸到桌面界面的选择。有了 Windows 8 的 Ultrabook 设备,Brown 不得不在开发传统的 Windows 桌面或微软最新的 Windows 8 风格界面之间做出艰难的选择。他选择了前者,尽管 BlinkTalk 具有 Windows 8 面板类型的外观。按钮被放大并设计成单点触摸响应,以便于操作员导航。Brown 指出,“Windows 8 UI 的颜色协调和布局有助于使体验尽可能简单明了。”

这张视频屏幕截图显示了 BlinkTalk 发布到英特尔 AppUp® 中心时的最终外观。请注意微软 Windows* 8 主题的触摸感应磁贴和配色方案。右侧,Bryan Brown 手持 16 个眨眼短语之一,同时通过左侧的 BlinkTalk UI 无声地选择该短语。

Brown 之所以选择 Windows 桌面路径,部分原因是他自己拥有使用 WPF XAML 进行桌面应用程序多线程 UI 设计的经验和熟悉度。尽管如此,Brown 认为面向移动设备的应用程序的市场和需求正在不断增长。他正在继续学习 Windows 8 开发,并专注于基于 HTML5 和 JavaScript* 的应用程序开发方法。

端口问题

Brown 遇到的第一个挑战与每个独立开发者面临的挑战相似:他必须独自完成所有工作,从编码和调试到视频制作和网站设计。

Brown 面临的另一个人为障碍是最终用户培训。他认为,通过眨眼强度选择 T/F 位值,而应用程序在屏幕上滚动位值,这应该是直接且直观的。然而,与健全的测试对象的试验表明,普通用户需要大约两个小时的眨眼训练才能熟练掌握。幸运的是,NeuroSky 提供了一些有助于使训练过程更有趣的游戏,并且开发者可以自由创建自己的训练标题。

Brown 面临的一个主要技术障碍集中在驱动程序和端口分配上。最初的 MindWave 设备使用从耳机到插入 Ultrabook 设备的 USB 加密狗的蓝牙* 连接。每次用户插入加密狗时,Windows 8 都会用一个通用的 USB 驱动程序覆盖 MindWave 驱动程序,并创建一个与 MindWave 相关联的虚拟 COM 端口(COM1、COM2 等)。然而,偶尔,在拔下和重新插入加密狗后,操作系统不仅会更改分配的 COM 端口,还会更改关联的设备驱动程序,这要求操作员访问 Windows 设备管理器并手动更改设置,才能使 MindWave 重新正常工作。

由于只有 NeuroSky 自带的驱动程序和第三方 .NET 包装器在起作用,Brown 无法找到直接解决此问题的方法。幸运的是,Ultrabook 设备提供了一个变通办法。由于 Ultrabook 设备集成了蓝牙功能,Brown 能够直接连接到 MindWave 的“移动”版本。该型号无需 USB 加密狗,因为它主要为 Android* 和 iOS* 设备设计,尽管它也可以在 Windows 下运行。配置中没有 USB 设备,问题就消失了。

保持线程同步

Brown 还遇到了一个线程同步问题,这个问题比驱动程序和端口分配问题更棘手。在 BlinkTalk 的第一个版本中,应用程序不断地在一个线程上发送数据,以逐步推进一个数组。第二个线程使用第一个线程的结果值来访问数组元素。不幸的是,这个线程实现存在缺陷,缺乏必要的异常处理。在初步工作和比赛提交之间只有一个月的时间,Brown 忽略了这种有缺陷的同步,这有时会导致随机运行时错误并导致应用程序崩溃。直到发布并仅在 Windows 8 下运行(而非 Windows 7)后,这个错误才显现出来。

BlinkTalk 操作员可以自定义 16 个可能的语音短语,还可以调整应用程序的眨眼强度阈值、应用程序从一个输入列扫描到下一个的速度,以及应为 MindWave* 设备使用的 COM 端口。

Brown 通过在 Visual Studio 2010 中进行长时间的调试,然后进行广泛的耐久性测试,找到了问题的根源。英特尔的支持代表在整个修复过程中与 Brown 合作,甚至亲自购买了一个 MindWave 设备进行他们自己的 BlinkTalk 测试。这使得英特尔能够确认问题并帮助 Brown 解决它。这种级别的支持对 Brown 来说是一个巨大的好处,因为它不仅发现了操作问题,还揭示了从用户体验角度使用软件的一些复杂性。例如,Brown 发现对开发人员来说显而易见的东西有时会让最终用户感到困惑。英特尔的支持使 Brown 能够迅速在英特尔 AppUp 中心发布 BlinkTalk 1.1 版本更新,其中包含了关于应用程序使用和故障排除的更详细的说明。

“任何时候你开发与外部设备交互的软件,都会遇到时间问题、时间限制和时间担忧,”Brown 说。“在以太网连接上流式传输数据存在问题,存在延迟以及设备对你的操作做出反应。这种编程方法比某些开发人员习惯的编程类型要动态得多,后者依赖于响应用户输入并显示数据等。”

总的来说,Brown 发现英特尔的资源和支持在他的开发过程中非常有帮助。例如,英特尔® 开发者区域中的一个教程视频使他能够构建创建 MSI 映像所需的静默安装程序,以便他能够将 BlinkTalk 提交到英特尔 AppUp 中心。该视频非常有效,Brown 第一次就成功完成了这个例程。他还发现,他在 CodeProject 论坛上发布的问题“几乎立即”得到了答复。得益于这些可用资源,Brown 在 BlinkTalk 的创建和提交过程中没有遇到任何严重问题。

经验和展望

英特尔提供的 Ultrabook 设备在 Brown 未曾预料到的方面发挥了至关重要的作用。从纯粹的基于 Windows 的 x86 处理角度来看,任何 PC 都可以满足 BlinkTalk 项目的需求。然而,Brown 习惯于处理他日常工作中所有分析仪器上的触摸屏交互。他笑着说,“有时我坐在传统的笔记本电脑前,真的会开始触摸屏幕,期待发生什么。”

Ultrabook 设备连接了这两种输入模式——传统的桌面和 Windows 8 风格的触摸界面——此外,它还拥有强大的功能和灵活性,可以成为他通过 Human-Machine Technologies 正在进行的其他项目的首选编程平台。在实际使用中,Brown 发现 Ultrabook 设备小巧轻便的尺寸非常适合塞进狭窄的床边病人环境中,同时仍为操作员提供方便的键盘。

BlinkTalk 的主界面屏幕分为四个基本区域:眨眼输入值 (T/F)、可能的眨眼短语列表、设置和输入数据读数,以及一套主要用于访问设置选项以及停止或退出应用程序的四个按钮。

“你真的需要使用更大的控件进行设计,并考虑人们将如何与屏幕互动、导航,”Brown 说。“根据计算机的不同,可能会出现视差问题,并且根据观看角度的不同,可能很难精确触摸小对象。在进行 UI 设计时要考虑到这些因素。Windows 8 面板可以简化触摸应用程序的易用性。”

BlinkTalk 赢得了 2012 年英特尔应用创新大赛的医疗保健类别奖。在比赛之前,Brown 对将他的应用程序发布到应用商店不感兴趣。然而,通过英特尔 AppUp 中心进行的整个过程向他表明,将新应用程序推向市场可以又快又容易,这激励他在未来追求这样的途径。

如今,Brown 不仅专注于更多的比赛参与和技术资助的申请,他还帮助他人探索这些机会。

“我想扩展我的网站,包含开源项目以及更多关于如何进行此类编程的信息,”他说。“我认为一些开发者的工具箱里存在一些空白。许多人缺乏与物理设备交互的经验。我想利用我的网站作为一种工具,帮助人们弥合这一差距。”

要成功开发应用程序,并不需要大量的财务甚至时间资源。有时,只需要一点推动。Bryan Brown 展示了供应商竞赛和编码论坛等基层努力对开发人员和整个世界产生的影响。

有用资源 

Bryan Brown 在编写 BlinkTalk 的过程中查阅了多种信息来源,首先是关于脑电波技术的背景阅读,以及对输入设备技术文档的深入研究。在用尽供应商资源后,他转向了 ThinkGearNET 的第三方库,该库通过 .NET 简化了 NeuroSky 耳机的易用性。Bryan 使用 Intel AppUp® 开发者认证工具 创建简单的 MSI 安装程序文件,并使用 Comodo 采购安全证书。请查看 CodeProject 上的详细 BlinkTalk 文章 CodeProject 以及 YouTube 上的实际使用视频 http://youtu.be/YFa9b01u6lo。查找关于 Brown 和他项目的更多信息,请访问 Human-Machine Technologies 网站 http://human-machinetechnologies.com

本文档部分内容经许可使用,版权归 CodeProject 所有,2012 年。英特尔不对第三方供应商及其设备的质量、可靠性、功能或兼容性作任何陈述或保证。有关优化信息,请参阅 software.Intel.com/en-us/articles/optimization-notice/。所有产品、日期和计划均基于当前预期,并可能随时更改,恕不另行通知。Intel、Intel 徽标、Intel AppUp 和 Ultrabook 是英特尔公司在美国和/或其他国家的商标。*其他名称和品牌可能被宣称为他人的财产。 版权所有 © 2013。英特尔公司。保留所有权利

© . All rights reserved.