博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Kinect,Azure,Windows Phone和Windows8的家庭安全系统(翻译)
阅读量:5048 次
发布时间:2019-06-12

本文共 4094 字,大约阅读时间需要 13 分钟。

多数参加印度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.exeset appcmd=%systemroot%\system32\inetsrv\appcmd.exe%msiexec% /i “%~dp0\IISMedia64.msi” /qn ADDLOCAL=ALL /Le startup_media.txtexit /b 0

安装文件IISMedia64.msi必须作为内容添加到项目中。Azure的服务定义文件包括下列标签:

一旦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 :

 

 原文链接

感谢同事帮忙翻译。有什么不对的地方,欢迎指正,谢谢!

 

 

转载于:https://www.cnblogs.com/shiyix/archive/2013/03/29/2988784.html

你可能感兴趣的文章
Spring Cloud微服务笔记(五)Feign
查看>>
C语言键盘按键列表
查看>>
Codeforces Round #374 (Div. 2)
查看>>
oracle数据类型
查看>>
socket
查看>>
Vue中使用key的作用
查看>>
二叉索引树 树状数组
查看>>
日志框架--(一)基础篇
查看>>
Java设计模式之原型模式
查看>>
Spring学习(四)-----Spring Bean引用同xml和不同xml bean的例子
查看>>
哲理故事与管理之道(20)-用危机激励下属
查看>>
关于源程序到可运行程序的过程
查看>>
wepy的使用
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
面向对象1
查看>>
在ns2.35中添加myevalvid框架
查看>>
【贪心+DFS】D. Field expansion
查看>>
为什么要使用href=”javascript:void(0);”
查看>>
二进制文件的查看和编辑
查看>>