2016 年 12 月

第 31 卷,第 13 期

此文章由机器翻译。

Azure IoT 中心 - 使用 Azure IoT 中心捕获和分析脑电波(第 2 部分)

通过 Benjamin Perkins | 2016 年 12 月

在这篇文章的第 1 部分 (msdn.com/magazine/mt788621),有的一部分我这里讨论的映射到面向对象的编程技术,如继承和多态性人类的特点是。例如,继承的特征和从父实体的行为 — 如眼睛颜色 — 可以父级,直接相关,或它们可以从根人工其中得出双臂、 legs 和双手的派生的类派生。也是多态方法,如语音,子窗口可能为能够以多种语言,相反,无法执行此操作在语言中只能有一个父级时这种情况。后跟,尽管对类进行实例化后,能够将映射人类的特点是完全有可能,,但它不能执行任何操作而无需心智的实现。如果大脑来说,没有子类是一个静止不动,thoughtless 实体。这一现实产生了三个目标个设想︰

  1. 机决策逻辑基于可定义大脑模式的性能提升。
  2. 我们自己认知速度和准确性的增强功能。
  3. 带基于模式匹配的大脑波形控制设备功能。

首先,大脑是能够处理来自各种输入信息的数据 — 例如,视觉、 听起来、 嗅觉、 品尝到和触摸 — 并将这些信号,并包括对任何认知分析,以便触发反应。如果我们可以更好地了解大脑如何实现这一处理,我们可能会发现更好地编码技术比传统 if/then/else、 try/catch、 用例/切换或递归的方法,仅举几例。

其次,获得更好地了解自己通过了解的大脑,增强的人工智能 (AI) 我们认知能力可以帮助后提高精度和速度的思路。

第三,如果使用大脑计算机接口 (BCI) 来捕获和转换的物理或虚拟数据计量大脑波形允许有关存储和分析的大脑波形。重现这些大脑波形模式后,认为控制对象,如汽车,或执行操作,如启用光源,可以执行只需通过的能力。

在我讨论了大量的技术来捕获这篇文章的第 1 部分,存储和分析大脑波形,其中每个进行了简要描述 图 1。在第 1 部分我讨论了 BCI 的配置和创建 Azure IoT 中心和大脑波插入到它。

图 1 的大脑分析项目的组件

组件 角色 简要说明
Emotiv Insights SDK 捕获 将转换为数字的大脑波大脑接口
Azure IoT 中心 存储 用于将 IoT 设备呈现数据的临时存储队列
SQL Azure 存储 高度可伸缩的、 价格合理和弹性数据库
流分析 存储 Azure IoT 和 SQL Azure 之间的接口
Power BI 分析 使用简单的图形数据分析工具基于支持

这篇文章的第 2 部分提供了详细的讨论了剩余的三个组件︰ 创建 SQL Azure 数据库来存储大脑批频率值,Azure IoT 中心和 SQL Azure 数据库和分析使用 Power BI 的数据之间移动数据的流分析。

创建 SQL Azure 实例和数据表

创建 SQL Azure 数据库非常简单︰ 在 Azure 门户选择 + 新建,然后数据 + 存储菜单项和最后,SQL Database。这会导致请求所需的信息创建数据库名称、 服务器名称、 用户 id 和密码等数据库边栏选项卡的呈现。仅在需要更高版本创建的流分析作业获取时,请注意此信息。

若要连接到数据库,有许多选项。我在 Visual Studio 中,使用 SQL Server 对象资源管理器,如中所示 图 2。还有可能要使用 SQL 数据库管理控制台可从 Web 浏览器使用的名称后跟您数据库服务器中访问<servername>。 database.windows.net。</servername>注意: 所需的防火墙规则来向数据库客户端访问的 IP 地址。如果将尝试进行连接发生错误,请确保所选 + 上新创建的数据库的防火墙设置中添加客户端 IP。

访问 SQL Azure 数据库使用 Visual Studio
图 2 访问 SQL Azure 数据库使用 Visual Studio

创建并访问数据库后,创建名为通过右键单击表文件夹中所示的度量值的数据库表 图 2。在此示例中的工作的数据库表结构进行了阐释 图 3 以及是否包含在可下载的示例代码的 BrainComputerInterface.sql 文件。

图 3 测量数据库表

CREATE TABLE [dbo].[MEASUREMENT] (
  [ManufacturerId]   INT       NOT NULL,
  [HardwareId]     INT       NOT NULL,
  [ActivityId]     INT       NOT NULL,
  [ChannelId]      INT       NOT NULL,
  [DeviceId]      INT       NOT NULL,
  [MeasurementId]    INT       IDENTITY (1, 1) NOT NULL,
  [UserName]      NVARCHAR (50)  NOT NULL,
  [GlobalDateTime]   DATETIME    DEFAULT (getdate()) NULL,
  [MeasurementDateTime] DATETIME    NULL,
  [THETA]        NUMERIC (18, 8) NULL,
  [ALPHA]        NUMERIC (18, 8) NULL,
  [LOWBETA]       NUMERIC (18, 8) NULL,
  [HIGHBETA]      NUMERIC (18, 8) NULL,
  [GAMMA]        NUMERIC (18, 8) NULL,
  CONSTRAINT [PK_MEASUREMENT]
  PRIMARY KEY ([ManufacturerId], [HardwareId], [ActivityId],
    [ChannelId], [DeviceId], [MeasurementId], [UserName]));

数据库表设计为支持许多类型的 BCIs 包含任意数量的电极/联系人和频率。未提供完整的数据库结构,因为它将变得过于复杂,无法实现。放心,测量数据库表就足够了捕获分析大脑波形。图 4 介绍更多详细信息中的列。

图 4 的度量值的列说明数据库表

列名称 说明
ManufacturerId 设备制造商的 (ex: Emotiv)
硬件 Id 特定设备类型 (ex: 深入了解 vs。EPOC+)
活动 Id 该方案或会话 (ex: smelling 鲜花)
ChannelId 一个或多个电极 (ex: AF3、 AF4、 Tz,等等。)
DeviceId 绑定到特定用户的设备 id
MeasurementId 在表行的唯一标识符
UserName 用来创建设备标识的用户名称
全局/MeasurementDateTime 插入从客户端和服务器上的时间
THETA、 ALPHA、 LOWBETA,等等。 阅读有关特定电极大脑批频率

完整的数据库结构包含的列的每个包含数据库表 * 名称中的 Id。那些 * Id 列实际表示到有关包含的特定详细信息的主表的 Foreign Key * 测量数据库表中存储的 Id。例如,此数据库表中存储的 ActivityId 值将是 1、 2、 3、 4、 5,依此类推。这些值就可链接的说明在数据库表名为活动,where,1 = 气味鲜花,2 = 周日,3 = 爆竹,依此类推。

如果需要,而不是呈现,测量数据库表上的数字值使用"加入"可以显示说明。这也是为什么测量数据库表的主键包含所有的原因之一 * Id 列;这是因为列包含 * Id 返回到另一个表,它包含值的说明的链接。

最后,创建高效的数据存储解决方案是复杂和有点复杂的企业,如果您想最可行的解决方案,它具有建议查看字段中的专家,以了解。

创建流分析接口

如第 1 部分中所述,则获取 Azure IoT 中心中存储的数据不会产生分析会发生的位置中存储的数据。发送到 Azure IoT 中心的数据必须具有程序或进程,监视这些项的状态并可采取措施。示例程序,可以监视和输出的数据存储在 Azure IoT 中心中找不到在 bit.ly/2dfJJEo。而是在此示例中,创建流分析作业。

若要创建流分析作业来监视 Azure IoT 中心并将数据移到最后一节中创建的 SQL Azure 数据库,不需要执行以下操作︰

  • 创建流分析作业
  • 添加输入作业
  • 添加输出作业
  • 创建要传入数据上运行的查询

完成这些步骤后,只有大脑波将准备好进行分析。

创建流分析作业

若要开始,访问 Azure 门户中,选择 + 新建,然后物联网和,最后,流分析作业。输入作业名称和其他所需的详细信息,如订阅、 资源组中,位置,然后单击创建按钮。

添加输入的作业

输入的配置是流分析作业在何处检索有关要监视的传入数据的位置的信息的位置。若要创建一个帐户,从刚创建的流分析作业,作业拓扑区隔内在输入过程中单击,然后单击 + 创建一个新的输入的新呈现边栏选项卡上添加链接。输入的输入,例如,"FromIoTHub,"名称,然后从源下拉列表中选择 IoT 中心,从共享访问策略名称下拉列表中,选择服务并保留其默认值的其他设置。单击创建按钮。

请注意,一个选项以更改服务的访问策略密钥从 iothubowner 到服务。如在其中创建设备标识第 1 部分中所述,iothubowner 将有权创建新的设备,让他们将数据插入到 IoT 中心,而服务策略仅发送和接收对云端终结点,它可能已经足以是什么正在这里未执行的功能。因为无需创建新的设备标识来监控和操作接收到的数据,我们建议使用服务的策略。如果没有理由这么做,只能使用 iothubowner。此外,观察服务访问策略密钥自动检索到根据从 IoT 中心下拉列表中; 选择 IoT 中心这是非常有用的直观。

添加输出作业

输出配置是流分析作业在何处检索有关要发送的传入数据的位置的信息的位置。若要从创建一个作业拓扑区隔内刚创建的流分析作业,在输出过程中,单击,然后单击 + 新呈现边栏选项卡来创建一个新的输出上添加链接。输入输出的名称 — 例如,ToSQLAzure — 然后从接收器下拉列表中,这会修改让您选择的数据库在给定的订阅中的边栏选项卡中选择 SQL 数据库。

则可以通过手动从订阅下拉列表中选择与提供的 SQL 数据库的设置将数据发送到 SQL Azure 数据库不在同一个订阅。如果选择此选项,提供所需的信息,然后单击创建按钮,验证手动输入的信息来创建输出作业。

如果数据库,这是接收来自 Azure IoT 中心的数据,在同一个订阅,然后从数据库下拉列表中选择数据库并输入用户名、 密码和表 (示例︰ 度量单位)。单击创建按钮,并输出作业创建测试输出成功确认的消息"连接到输出 'ToSQLAzure' 成功,"后,即告完成。

创建要在传入数据上运行的查询

创建此解决方案是一个简单的查询。查询只需将输入中的某行的所有列,并将其插入到配置的输出 SQL Azure 数据库。很可能运行更复杂的查询执行一种对可以向某人发出警报或将数据发送到基于查询的结果的不同终结点的数据进行实时分析。这是真正适用于 Azure 的平台在 IoT 解决方案方面最大好处之一︰ 实时分析来自大量的设备和可识别的模式中观察到后立即做出反应的能力或为违例的阈值的数据。

创建并保存该查询在当前门户位于 bit.ly/2bA4vAn 和中所示 图 5。在查询过程中输入和输出学习之旅之间放置多个巧妙布局和特意单击可打开新边栏选项卡支持创建、 保存和查询的测试。

创建流分析查询
图 5︰ 创建流分析查询

如中所示 图 6,查询匹配的大脑中示例 BrainComputerInterface 的 SendBrainMeasurementToAzureAsync 方法中包含的活动类的属性。SendBrainMeasurementToAzureAsync 方法是在给定电极的大脑批频率度量值发送到 Azure IoT 中心的位置。启动流分析作业以开始监视 Azure IoT 中心。用于从 Azure IoT 中心执行的检索和删除度量值和便于测量数据库表中的行插入再次使用的基础查询。

图 6 将大脑批插入到 Azure 的 IoT 中心

while (true)
{
for (int i = 0; i < 5; i++)
{
  engine.IEE_GetAverageBandPowers(0, channelList[i],
    theta, alpha, low_beta, high_beta, gamma);
  SendBrainMeasurementToAzureAsync(channelList[i].ToString(), theta[0].ToString(),
    alpha[0].ToString(), low_beta[0].ToString(),
    high_beta[0].ToString(), gamma[0].ToString());
  }
}
private static async void SendBrainMeasurementToAzureAsync(string channel,
  string theta, string alpha, string lowbeta, string highbeta,
  string gamma)
{
  // ...
  try
  {
   var brainActivity = new
    { ManufacturerId, HardwareId, ActivityId, ChannelId,
      DeviceId, UserName, MeasurementDateTime, theta,
      alpha, lowbeta, highbeta, gamma };
  var messageString = JsonConvert.SerializeObject(brainActivity);
  var message = new Message(Encoding.ASCII.GetBytes(messageString));
  await deviceClient.SendEventAsync(message);
catch (Exception ex)
{ // ...}
}

若要测试该查询,您需要使用辅助门户网站位于 bit.ly/1tPjIg7。导航到辅助门户并选择测试按钮,这将打开一个对话框要求输入示例输入的文件。可在此处使用的可下载代码中名为 MEASUREMENTData.json 文件不存在。运行测试并确认没有任何异常。

用于将大脑波上载到云的组件创建到此结束。它是所需的四个实体实现相当多的之旅︰ 代码将转换为一个数字,接受这些数字,SQL Azure 数据库以永久存储这些数字和流分析作业管理数字的状态并将其移至永久数据存储的 Azure IoT 中心构造电极频率读数。现在,您可以开始将大脑波上载到云,并将其存储在数据库中为分析。分析数据在下一节详细讨论,但请花片刻庆贺后,如果您已成功完成上述远。

分析大脑波形

在讨论此部分的实际主题之前, 是第一次请注意紧随采集数据的进程。我接触过了许多最新博客文章中的主题 (bit.ly/29LbKEe),但是,就值得专门提一下。

捕获数据的最重要方面是它发生,可重现的方案中。例如,如果您想要在读取一本书时捕获大脑波形,收听音乐或观看电影,很重要,这样做,每次您读取相同簿的相同部分、 侦听同一歌曲和观看电影的相同部分。我有没有科学记数法证明这几个试验我在我自己在内运行以外,但当我听音乐时捕获我脑波形,模式并不是我已欣赏的音乐的类型而异。同样,尽管我观看同一电影,我观看不同的部件,这将导致不同的模式。您同意电影有时会调用它的其他情绪和那些会触发一个不同的模式和脑活动的度量值。与此相反,当我捕获在 meditative 状态下,其中所有会话中该环境为无人参与和深,度量值实际上我脑活动与否中的关闭模式中没有数据。

不只是它不必具有相同的会话之间复制的情况,也很重要若要确保捕获大脑波形设备正常工作在所有情况下相同。我接触过了这第 1 部分中如果您回想起。这是代码来检查在开始录制的大脑波形,建议使用联机工具,它提供的图形表示形式的 electrodes\contact 值之前的信号强度和电池电量级别的原因。若要获取有效的比较,则务必环境、 操作和设备是会话; 之间尽可能相同否则为它是不确定是实际触发脑活动并比较两个不同的会话不添加任何值,并导致无结论的假设。现在,就都清楚,很有趣的时间部分。

对于此示例中,Power BI Desktop 版本使用,并且可免费下载,目前在 bit.ly/1S8XkLO。安装后,运行时,在主页选项卡中,单击获取数据菜单项,显示 Power BI 可以连接到多个源。选择 SQL Server,输入服务器名称数据库正在其中运行 (在"创建 SQL Azure 实例和数据表"部分中创建的一个),并输入到配置向导以及可选数据库名称。请注意,服务器名称不是数据库名称,而是服务器名称是运行数据库可以在 SQL Azure 服务器的属性边栏选项卡上的 Azure 门户中找到的服务器的名称。它类似于如下︰ <servername>。 database.windows.net。</servername>输入后,单击确定按钮并输入该数据库的凭据,然后单击连接。别忘了添加您的客户端 IP 地址,因此,防火墙允许通过该连接。

成功连接后继续使用配置向导,选择导航器窗口上的度量值表,然后单击加载按钮。数据现已准备好进行分析和比较。"100%堆积条形图"其中轴是 ActivityId,值为伽玛、 LOWBETA、 THETA、 HIGHBETA 和 ALPHA 的示例所示 图 7

使用 Power BI 的大脑波形的分析
图 7 分析的大脑波使用 Power BI

使用每个频率 (伽玛、 LOWBETA、 THETA、 HIGHBETA 和 ALPHA) 的含义可以得出一些结论,并确定自己是否这些结论有意义。例如,采用收集时 smelling 鲜花大脑波形。请注意,在 图 7 : ALPHA 测量所消耗的大量该会话。时我记得我的注意的状态,当我 smelled 花朵,它是放松一下并进行反射的感觉,匹配中所示的内容 图 7。甚至更明显是当我已感到震惊的较大的噪音,我调用爆竹,导致读取某些更高版本 HIGHBETA。HIGHBETA 是常与焦点和快速的思维,是什么,可能需要在情况下这样的匹配项相关联。 

下一步是在尽可能多的相同环境,尽可能捕获同样,那些同一个会话,并比较结果。如果随着时间推移,以识别模式都可以发生这种情况仅在给定方案确定,随后执行一个操作来控制某些物理使用大脑是仅简单的 if 语句消失。只需设想还得您 BCI 连接到设备,依然芳香鲜花和 Cortana 说,"您觉得? 如何该鲜花起来 描述了它,否则请一幅图片和我会告诉您可以是哪种类型的学习。"  可以使用计算机构想 API,后者 Microsoft 认知服务产品的一部分完成此。

总结

在本文中,您学习了如何设置大脑波形中 BCI 加载到云所需的四个部分。虽然同时它也是适用于单个爱好者,和我一样,此可缩放的方案可支持数以百万计的每秒的测量值。事实是,数据越多我们共享集体意义上讲越我们可以了解自己,不仅作为个人还可用作互连完全。从早期尝试创建使用 C# 类和面向对象的编程技术虚拟生命周期的进展情况,我碰到到点,使人类类的实际方式做出响应,并对实际事件做出反应是实际的可能性。尽管我们并不是在该点现在,有趋于确实改变了一切; 智能虚拟实体只有几个更多步骤我们在边缘上。最后一条路径已设置能够捕获和分析大脑波通过在给定情况下,分析这些模式、 翻译成代码和引入这些接口。许多这些 Api 已经有了作为 Microsoft 认知服务产品的一部分。

但我相信这些 greatness 来自不大脑波和模式的一个人,而是来自从更高版本的人类 population 中发现的模式。查找这些小事情,我们将组合在一起,我们都共享的细微的元素将会导致我们的好地方。


Benjamin Perkins是 Microsoft 的 C#、 IIS、 NHibernate 和 Microsoft Azure 上的四部著作的作者专家级工程师。 他最近完成的共同编写 《 C# 入门 6 编程使用 Visual Studio 2015 》 (Wrox)。与他联系。 benperk@microsoft.com

衷心感谢以下 Microsoft 技术专家对本文的审阅: Sebastian Dau
Sebastian Dau 是在 Azure IaaS 团队嵌入专家级工程师