2016 年 12 月

第 31 卷,第 13 期

本文章是由機器翻譯。

Azure IoT 中樞 - 使用 Azure IoT 中樞擷取並分析腦波 (第 2 部分)

Benjamin Perkins | 2016 年 12 月

在這篇文章的第 1 部分 (msdn.com/magazine/mt788621),我將討論以物件導向程式設計技術,例如繼承和多型的人類特性的對應章節。比方說,繼承的特性和從父實體的行為,例如眼睛 — 可以直接與父代,或可以從根人力都在已達成手臂、 腳和實際操作的衍生的類別。同時為多型方法,例如語音、 子視窗可能是無法反向多種語言,而父項目是可以這麼做的只是一種語言的情況。接著,雖然對應人類特性的功能完全可行的這個類別執行個體化之後,它無法執行任何動作不大腦的實現。沒有大腦,而子類別是蒼穹、 thoughtless 實體。此一體現導致雖然的三個目標︰

  1. 可定義大腦模式為基礎的機器決策邏輯的提升。
  2. 我們的認知的速度和精確度的增強功能。
  3. 控制裝置大腦波根據模式比對的能力。

首先,大腦是能夠處理來自多個輸入資料 — 比方說,視覺、 音效、 嗅覺、 試試和觸控 —,然後使用這些訊號,以及任何認知的分析,以回應觸發程序。如果我們可以進一步了解大腦如何完成這項處理,我們可能會發現更好的程式碼撰寫技術比傳統 if/then/else、 try/catch、 案例/切換或遞迴的技巧,等等。

第二,取得進一步了解自己了解增強人工智慧 (AI) 與我們認知能力的大腦可以幫助之後改善有效位數和思考的速度。

第三,使用大腦電腦介面 (BCI) 以擷取和轉換實體或虛擬資料度量的大腦波可以讓您的儲存體和分析的大腦浪潮。一旦重現這些大腦 wave 模式,以為控制物件,例如汽車,或採取動作,例如開啟號誌燈可以只需執行的能力。

在這篇文章討論過無數的技術,以擷取的第 1 部分,儲存和分析大腦波形,其中每一個簡短描述**[圖 1**。在第 1 部分我討論了 BCI 的設定,以及 Azure IoT 中心的建立與插入大腦浪潮它。

[圖 1 的大腦次日專案的元件

元件 角色 簡短描述
Emotiv Insights SDK 擷取 將轉換成數字的大腦波大腦介面
Azure IoT 中心 儲存空間 IoT 裝置呈現資料的暫存儲存體佇列
SQL Azure 儲存空間 高度可調整、 價格合理且彈性資料庫
資料流分析 儲存空間 Azure IoT 與 SQL Azure 之間的介面
Power BI 分析 資料分析工具使用簡單的圖形型支援

這篇文章的第 2 部分提供其餘的三個元件的詳細的討論︰ 建立 SQL Azure 資料庫來儲存大腦 wave 頻率的值,Azure IoT 中心與 SQL Azure 資料庫和分析資料使用 Power BI 之間移動資料的資料流分析。

建立 SQL Azure 執行個體和資料表

建立 SQL Azure 資料庫很簡單︰ 在 Azure 入口網站選取 + 新增],然後資料 + 儲存體中功能表項目和最後,SQL 資料庫。這會導致要求所需的資訊建立的資料庫名稱、 伺服器名稱、 使用者識別碼和密碼之類的資料庫刀鋒視窗的轉譯。請注意這項資訊,因為稍後需要時建立的資料流分析工作。

若要連接到資料庫,有許多選項。我使用 SQL Server 物件總管] 在 Visual Studio 中所示**[圖 2**。您也可使用 SQL 資料庫管理主控台內使用的名稱後面加上您的資料庫伺服器的網頁瀏覽器存取<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 製造裝置的公司 (例如︰ Emotiv)
HardwareId 特定的裝置類型 (例如︰ 深入了解 vs。EPOC+)
ActivityId 案例或工作階段 (例如︰ smelling 花卉)
ChannelId 「 連絡人 」 或 「 electrode (例如︰ AF3、 AF4、 Tz 等)
DeviceId 繫結至特定使用者的裝置識別碼
MeasurementId 資料表中資料列的唯一識別碼
UserName 用來建立裝置身分識別的使用者名稱
全域/MeasurementDateTime 插入從用戶端和伺服器上的時間
THETA、 ALPHA、 LOWBETA 等。 讀取特定 electrode 大腦 wave 頻率

完整的資料庫結構包含資料庫資料表,每個資料行包含 * 名稱中的識別碼。這些 * 識別碼資料行實際上包含有關的特定詳細資料的主要資料表代表外部索引鍵 * 測量資料庫資料表中儲存的識別碼。比方說,此資料庫資料表中儲存的 ActivityId 值會是 1、 2、 3、 4、 5,依此類推。這些值必須連結的描述在資料庫資料表名為活動中,where 1 = 氣味花卉,2 太陽,3 = = 鞭炮,依此類推。

如果需要,而不是呈現的數值測量資料庫資料表上使用 [加入],就可以顯示描述。這也是為什麼測量資料庫資料表的主索引鍵包含所有的原因之一 * 識別碼資料行。這是因為其中包含的資料行 * 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 Azure 資料庫不在相同的訂閱,從 [訂閱] 下拉式清單中手動選取提供的 SQL 資料庫設定。如果您選擇此選項,提供必要的資訊,並按一下 [驗證手動輸入的資訊的 [建立] 按鈕,以建立輸出作業。

資料庫,也就是從 Azure IoT 中心接收資料,是相同的訂閱,然後從 [資料庫] 下拉式清單選取資料庫,並輸入使用者名稱、 密碼和資料表 (範例︰ 度量單位)。按一下 [建立] 按鈕,然後測試輸出成功確認,連接到輸出成功,' ToSQLAzure' 」 訊息後建立輸出工作已完成。

建立內送資料上執行查詢

針對此解決方案所建立的查詢很簡單。查詢只會從輸入資料列的所有資料行,並將它們插入到設定的輸出 SQL Azure 資料庫。就可以執行更複雜的查詢執行一種即時分析可以某人發出警示,或將資料傳送至不同的端點為基礎的查詢結果的資料。那是真正的 IoT 解決方案方面的 Azure 平台上可用的最大優點︰ 即時分析資料來自大量的裝置和能夠立即回應之後觀察到可辨識的模式或違反臨界值。

建立並查詢儲存在目前的入口網站,請參閱bit.ly/2bA4vAn中所示, [圖 5。按一下查詢這趟旅程策略性並故意放置於之間輸入和輸出的旅程,便會開啟新的分頁支援建立、 儲存和查詢的測試。

建立資料流分析查詢
[圖 5,建立資料流分析查詢

中所示**[圖 6**,查詢符合大腦中範例 BrainComputerInterface SendBrainMeasurementToAzureAsync 方法內所包含的活動類別的屬性。SendBrainMeasurementToAzureAsync 方法是指定 electrode 大腦 wave 頻率度量傳送至 Azure IoT 中心所在的位置。啟動資料流分析工作,若要開始監視的 Azure IoT 中心。查詢是用來從 Azure IoT 中心執行的擷取和移除度量,用於一次為基礎的資料列插入測量資料庫資料表。

[圖 6 大腦 Wave 插入 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 中心建構 electrode 頻率讀數。您現在可以啟動上傳至雲端的大腦浪潮,並將它們儲存在資料庫中進行分析。分析資料會在下一節中詳細討論,但請花一點時間恭喜您上一步] 如果您已成功地將它這遠。

分析大腦浪潮

在討論這一節 「 實際 」 主題之前, 是第一次提到的程序已取得的資料。我接觸到許多新的部落格文章中的主題 (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,而值為 GAMMA、 LOWBETA、 THETA、 HIGHBETA 和 alpha 版、 範例所示**[圖 7**。

使用 Power BI 的大腦波的分析
[圖 7 分析,使用 Power BI 大腦波的

您可以使用每個頻率 (GAMMA、 LOWBETA、 THETA、 HIGHBETA 和 ALPHA) 的意義會得到一些結論並自行決定如果是合理的結論。例如,需要收集時 smelling 花卉的大腦浪潮。請注意,在**[圖 7** ALPHA 度量會耗用大量百分比的工作階段。當我還記得我的想法的狀態,當我 smelled 花朵時,放寬以及反射的感覺,比對中所述的功能**[圖 7**。更明顯是當我的情況所大聲的雜音,我呼叫鞭炮,導致讀取某些高 HIGHBETA。HIGHBETA 是通常焦點和快速思考,也就是如所預期的情況下類似的相符項目相關聯。 

下一個步驟是環境的盡可能越好,完全相同中擷取這些相同工作階段,並比較結果。如果一段時間,可辨識的模式可以判斷,只發生在特定案例,然後採取行動來控制內容實體使用大腦是只是簡單的 if 陳述式了。只要想像您 BCI 連線至裝置、 嗅覺花卉和 Cortana 說,「 就像方式的花朵看起來很適合? 描述它或圖片時,我會告訴您它是何種類型的 take。 」  這可以 Microsoft 認知服務產品的一部分,透過電腦願景 API 完成。

總結

在本文中,您學會如何設定,才能從 BCI 的大腦波載入定域機組的四個部分。此案例中可調整可以支援數百萬個測量每秒,但同時它也是可行的個別的業餘玩家,像我一樣。事實是,更多資料分享之集合的意義越我們可以了解,只要同時也為互連差勁的個人。從建立虛擬使用 C# 類別和物件導向程式設計技術的生命週期早期的嘗試進入,我得類別實際賦予人們的點時,藉真實事件的方法是實際的可能性。不過,我們不在該點現在,有只有幾個步驟朝真的變更; 智慧型虛擬實體路徑我們在 brink 上。要這麼做的其中一個路徑擷取和分析大腦波能夠透過已設定在指定的情況下,分析這些模式、 將它們轉譯程式碼和介紹這些介面。許多這些 api,已可使用 Microsoft 認知服務供應項目的一部分。

但我相信這個偉大來自不大腦波浪與單一個別的模式,而是他們來自的讓人更高的母體擴展中找到的模式。尋找的小型項目放在一起,讓我們微妙的項目,我們都共用時,將帶領我們好地方。


Benjamin Perkins是高階工程師,Microsoft,C#、 IIS、 NHibernate 和 Microsoft Azure 上的四個書籍的作者。 他最近完成的共同編寫 「 開頭 C# 6 程式設計使用 Visual Studio 2015 」 (Wrox)。與他連絡benperk@microsoft.com

感謝下列 Microsoft 技術專家來檢閱這份文件︰ Sebastian Dau
Sebastian Dau 是內嵌的高階工程師 Azure IaaS 小組