使用Kinect,Azure,Windows Phone和Windows8的家庭安全系統(翻譯)
多數參加印度2012 TechEd的人們都曾目睹我和Jebarson在開幕演講上關于家庭安全系統酷斃了的演示。現在我想分享這一決解方案的開發過程,這樣你們也可以自己開發。
背景
在正式開始之前,請讓我介紹一下我們決定在車庫里開發它的背景。2011年的開發者大會定于2011年10月在Hyderabad舉行,我和Jebarson希望展示一些我們的研究領域里很酷的東西。Jebarson一直在研究Windows Azure和Windows Phone 里的一些東西,而我則喜歡擺弄Kinect。我們在想法都陷入僵局的時候相遇了,我們考慮把一切整合在一起的時候就有了開發我們自己的家庭安全系統的想法。我們在2011年9月開始了應用程序的構建。到目前為止,由于新版SDK的發布和新組建的增加,我們至少修改了它五次。
概述
那么這一解決方案是如何工作的呢?你可以把Kinect設備部署到你想要安全的地方,并且保持它和一臺能夠編碼視頻和上傳流媒體的高性能PC連接。Kinect設備會被運行在PC上的WPF應用控制,它會監測是否有人入侵。在無人入侵的時候,它會保持在”巡邏模式“,定期上傳它的監控圖像到Windows Azure。這些圖像可在任何時間通過Windows Phone和Windows 8查看。當檢測到有人入侵時,Kinect會變成”入侵模式“,然后向Windows Azure發出警告并開始向Windows Azure上的高速流媒體服務器發送視頻。Azure使用一個toast通知所有設備(Windows Phone和Windows 8)并且允許這些應用實時瀏覽視頻。你也可以通過Windows Phone和Windows 8應用控制Kinect設備。
Windows Azure
我已經簡要陳述了這一解決方案工作過程。現在我們談談它是如何構建的。從Azure開始,下面是應用在云端的組織情況。

Windows Azure 管理門戶
Windows Azure 管理門戶使用Windows Phone版Windows Azure工具包提供的默認摸板創建。這一管理門戶可以定制,以支持一些需要的服務。首先,管理門戶默認繼承了除高速流媒體服務器外上面提到的所有模塊。這意味著必須預先定義和所有組件通訊的API。那我們就順其自然。
自定義WCF服務方法
為了支持PC上運行的WPF應用連接到Kinect設備,我們來說明一個叫做”上傳“的自定義WCF方法,它允許上傳”照片“類對象。

圖像作為一個附帶類型(巡邏/警報)和時間的字數組上傳。一旦WCF服務收到消息,就會把它排列呈串并且放入像素點,同時把它推送一個超時為1分鐘的隊列里。這有助于用戶在任何時間查看家中的實時畫面。
共享訪問簽名服務
由摸板衍生出的門戶需要通過一個證書和一個令牌(通過用戶名和密碼生成)進行認證。在內部,門戶使用ASP.Net成員資格認證,通過它可以在客戶端對用戶進行驗證并且提出供一個雙方定好的令牌。因此無需關心Windows Phone和Windows 8 是否需要訪問Azure,它會通過這種機制來獲取認證。之后訪問服務里的任何方法都需要令牌。
微軟推送通知服務
此服務允許該解決方案發送一條通知消息到任何能夠訂閱/接收推送消息的智能設備。當在Windows 8和Windows Phone上編寫的應用程序首次啟動時,它會自動訂閱消息。為了訂閱/接收消息,所有設備都需要一個網絡連接。一旦Azure服務從Kinect收到一條警告信息,它會給所有訂閱的設備發送一條推送消息。訂閱的詳細信息被管理門戶存儲到Azure表里。
高速流媒體服務器
在Azure里配置該服務器是最困難的部份,但如果你知道怎么做了就易如反掌。Codeplex上的Azure Live Streaming能讓你做到這一點。Web role會提供一個包含下列命令的Startup.cmd文件,它能把高速流媒體服務器安裝到Azure服務器上。
set msiexec=%systemroot%\system32\msiexec.exe set appcmd=%systemroot%\system32\inetsrv\appcmd.exe %msiexec% /i “%~dp0\IISMedia64.msi” /qn ADDLOCAL=ALL /Le startup_media.txt exit /b 0
安裝文件IISMedia64.msi必須作為內容添加到項目中。Azure的服務定義文件包括下列標簽:
<Startup> <Task commandLine=”startup.cmd” executionContext=”elevated” taskType=”simple”></Task> </Startup>
一旦Web role啟動,它就會讓批處理文件運行。你可能還需要添加.isml文件來配置上行/下行流的端點。欲了解更多如何配置Azure流媒體服務器的信息,請參考幫助文檔。一旦Azure上的視頻流可用,Kinect會上傳壓縮視頻流到上行端點,下行的直播視頻流將自動啟動。
注意,你可以配置任意數量的下行服務器實例,但上行服務器實例只能有一個。
AppFabric服務總線
我們把AppFabric服務總線當作連接設備的應用里的一個WCF服務的遠程端點使用。任何人只要發送一條信息到WCF端點就能控制Kinect設備。它可以省去有靜態IP/DNS和防火墻產生的可能開銷。
在我們的應用里有一個公開方法,它被Kinect設備上運行的WPF應用里的WCF稱為“SendMessage”。一旦Windows Phone/Windows 8發送一條“上/下”命令到這一方法,設備就會執行命令。
我們對Azure已經足夠了解了,現在來談談Kinect在這個解決方案中是如何扮演護家犬的角色。
適用于Windows的Kinect
連接到Windows Azure的Kinect就像家里的護家犬一樣。應用建立在適用于Windows SDK(V1.0)的Kinect上。我們使用Skeleton檢測功能來監測人體運動。像上文提到的一樣,Kinect默認工作在“巡邏模式”,沒10秒上傳一張圖像;如果Kinect傳感器檢測到任何Skeleton,它就會開始上傳視頻流。我們使用表達式編碼器SDK做應用程序里的流。下面是我們在WPF客戶端應用程序里使用的組件列表。

下面是用于檢測Skeleton并上傳到Azure的代碼塊的最高級視圖。
查看Skeleton是否被跟蹤,然后設置一個用于整個應用程序的全局變量。
if (this.skeletonData.Where(item => item.TrackingState == SkeletonTrackingState.Tracked).ToList().Count > 0 { Global.IsSkeletonTracked = true; }
如果沒有監測到Skeleton,則創建一個patrol類型圖像,否則發送警告圖像。
if (Global.IsSkeletonTracked) { photo = newPhoto() { CreatedOn = DateTime.Now, Image = filesbyte, Type = PhotoType.Alert }; } else { photo = newPhoto() { CreatedOn = DateTime.Now, Image = filesbyte, Type = PhotoType.Patrol }; }
圖片類型由我們的服務約定定義,可以像下面這樣上傳圖像:
KinectReceiverClient client = newKinectReceiverClient("BasicHttpBinding_IKinectReceiver") ServicePointManager.ServerCertificateValidationCallback = ((obj, certificate, chain, sslPolicyErrors) => true); client.UploadPhoto(photo);
Windows Phone
就像我前面提到的,Windows Phone在這個解決方案里是作為用戶終端之一。想要輕松并且安全地和Azure交互,我們應該使用適用于Windows Phone客戶端的Windows Azure工具包。像Azure一節里提到的一樣,Windows Phone應用程序會在啟動時使用經過證書簽名的用戶名和密碼通過Azure驗證自己。一旦應用程序通過驗證,它的第一屏將顯示隊列里獲取的最新圖片。記住,這些圖像都是Kinect在“巡邏模式”下推送到云端的。
當有人入侵時,Windows Phone會接收到一條toast通知。不必保持應用前臺運行或者讓手機一直處于解鎖狀態你也可以查看到消息,Windows Phone會保證所需要的服務來監聽通知。收到通知后,你將被引導至一個頁面,在這里你可以使用Windows Phone媒體播放器通過URL查看實時視頻流。
Windows 8
Windows 8上開發的Metro應用程序使用了Windows 8版Windows Azure Toolkit,除此之外,它運行起來幾乎和Windows Phone上一樣。由于Metro應用程序還支持通知服務,你同樣要實現這一功能。
巡邏模式下的應用程序功能

入侵模式下的應用程序功能

遠程訪問Kinect時的應用程序功能

這里我們沒有共享代碼,但是我們分享了關于如何構建這個應用程序的全部信息。我們鼓勵你通過本文共享的知識構建自己的應用程序。如果你需要任何構建項目的幫助,請給我們留言,我們非常樂意幫助你。
My Twitter Handler : @abhijitjana
Email Me : abhijitjana@outlook.com
原文鏈接Home Security System Using Kinect, Azure, Windows Phone and Windows 8
感謝同事幫忙翻譯。有什么不對的地方,歡迎指正,謝謝!

浙公網安備 33010602011771號