通过COM组件在Web上实现Kinect骨骼追踪、声控截屏保存的功能 具体实现第一部分 ActiveX插件的实现1 创建一个新的解决方案叫做MyFirstKinect。2接着创建一个Windows窗体控件库用于做ActiveX的插件项目叫做MyFirstKinectControl3在MyFirstKinectControl项目的右键点击“属性”选择“生成”项将”为COM互操作注册”勾上然后关闭。4打开AssemblyInfo.cs将ComVisible设置为true并将下面这行注释掉这个很重要切记对应地需要在自定义窗体控件上加上该Guid至此一个基本的COM组件已经实现了现在来看下该如何在浏览器上显示ActiveX插件。5打开Visual Studio的命令提示符输入“oleview”页面会打开一个“OLE/COM Object Viewer”应用程序由于我是使用C#创建的COM组件,于是在“.NET Category”寻找刚才创建的”MyFirstKinectControl”右键选择“Copy HTMLobject Tag to Clipboard”得到6然后我在自定义窗体控件上SkeletalControl.cs随便加入点东西上去比如按钮、标签等等。7然后新创建一个Web应用程序的项目WebApp重新编译。将上面的代码复制到Html或相关页面中。在IE正常状态下发现插件无法正常显示。于是把浏览器的安全级别调低继续运行就可以正常显示插件了。当然这种方式造成了浏览器使用上的危害性所以不建议这样来使用。8如果想要在不调整浏览器安全级别的情况下又能够在浏览器上正常显示插件这样就必须调整一些代码 View Code添加一个IObjectSafety的接口并且Guid是固定的。SkeletalControl继承这个接口 View Code接着重新编译并运行Web程序运行结果为这样你就不需要调整浏览器的安全级别就可以正常显示ActiveX插件了。第二部分 Kinect的基本功能实现从这一部分起我将开始介绍Kinect如何实现一些基本功能包括视频监控、骨骼追踪以及声控截屏的功能。1项目中引用以下的Dll其中Microsoft.Research.Kinect就是在电脑上装好Kinect SDK后可以引用的类库另外地Coding4Fun.Kinect.WinForm是一个基于SDK的DLL的相关封装好的一些功能类库网上开源地址为http://c4fkinect.codeplex.com/Microsoft.Speech是一个微软提供的语音识别的基本类库也包含相关的SDK并且和Kinect进行绑定的相关类库具体地址在Kinect SDK中的相关文档也有说明- Speech Platform Runtime (v10.2) x86. Even on x64 platforms the x86 needs to be used because the MSR Kinect SDK runtime is x86http://www.microsoft.com/downloads/en/details.aspx?FamilyIDbb0f72cb-b86b-46d1-bf06-665895a313c7- Speech Platform SDK (v10.2)http://www.microsoft.com/downloads/en/details.aspx?FamilyID1b1604d3-4f66-4241-9a21-90a294a5c9a4displaylangen- Kinect English Language Pack: MSKinectLangPack_enUS.msi (available in the same location as the Kinect For Windows SDK)2在控件页面上创建三个PictureBox的控件三个图片框将分别用来存放深度图视频、普通视频、以及骨骼追踪。3编写相关代码 View Code其中DepthFrameReadyVideoFrameReadySkeletonFrameReady分别用来追踪深度图、普通视图、骨骼图所产生的事件。 View Code其中getBodySegmentgetDisplayPosition方法将确定骨骼追踪中的20个骨骼点的具体位置。4接着编译并运行程序查看Web页面连上Kinect传感设备运行结果为5接着来实现一些声控截屏功能 View Code在代码中发现var colors new Choices(); colors.Add(cut); //添加cut的英文发音 这样当你在传感器前发音“cut”就会进行相关事件的触发当发音和英文库的单词语音识别向匹配时将触发SreSpeechRecognized事件。执行屏幕截图的相关操作。注记得这里需要添加代码gb.Culture ri.Culture;如果没有这句代码有可能导致sre.LoadGrammar(g); 语法加载失败6. 运行结果