这个项目是我毕业设计的一些工作,这是第一次更新,之后也陆陆续续更新最新的成果,写下这些以作记录。所以如果有什么写的不够好的地方,希望各路神仙大佬多多包涵,指点一二。
我毕业设计的主要任务就是完成动态手势识别,并将其用在某一虚拟现实设备上,拓展交互方式。
主要思路就是使用kinect采集图像,使用C#语言和OpenCVSharp进行处理,对手势进行识别,之后再将识别技术移植到交互方面。所以总的工作可以分成手势识别和交互拓展两个方面。
本文章是第一次对项目进行记录,所以主要介绍开发环境的搭建。欢迎各位大佬的交流!!
我搭建kinect环境的平台为win10+vs2015+kinect v2.0
kinect硬件的安装简单,购买回来的设备按照说明书的接线方式就可以完成,在此就不赘述。主要讲述SDK和驱动的安装。
首先,前往微软官网下载Kinect for Windows SDK 2.0。
完成后就可以安装,基本上都是默认操作。安装完成后,电脑上就会多出三个东西,如下。
这三个软件,各有用处,目前我用到的只有SDK Browser v2.0和Kinect Studio v2.0,另外一个还有没摸索到它的用途,先暂且不管。另外这两个软件在测试kinect连接是否成功时,可用作测试。
kinect必须连接USB3.0,首次连接,需要安装驱动,可以在设备管理器中检查kinect的驱动是否安装好,因为我是先连接的kinect,后安装的SDK,所以手动安装了驱动,但是看到网上有些大佬说安装SDK后就不需要再手动更新驱动,所以自行辨别,如果安装了SDK还是没有驱动就手动更新驱动就可。
驱动安装完成后就可以进行测试。之前安装的kinect的SDK时出现的软件就可以派上用场了。
kinect studio
打开kinect studio后显示的界面如下所示。
单击左上角的“Not connect”左边的图标,就可以连接到kinect,结果如下(如果没有反应,检查下硬件是否连接好以及前面的过程是否有遗漏)。
这个界面有些其他的作用,大家如有需要自行探索。
SDK Browser v2.0
这个软件是一个很有作用的工具,里面有很多开发样例可以参考,大致界面如下。
首先我们介绍一下使用这个软件进行测试kinect的连接状况,点击Kinect Confuguration Verifier这一栏右下角的“Run”。
上面是我的运行结果,最好的状态是所有项都是绿√,但我这也能用,我就没有管那么多(感觉是电脑本身的问题)。到此基本上都测试完成了,可以快快乐乐地使用自己的kinect了。
此外在介绍下这个软件的作用,里面有一些很有意思的例程,大家根据个人喜好,自由测试,我这里就举一个例子,如下。
运行结果如下(我的脚被桌子挡住了,所以不是粗红线,嘿嘿!)
OpenCV是在图像处理方面是一款比较好用的工具,具体多好用大家心里就好。但是OpenCV并不支持C#语言,所以在使用C#语言的时候多有不便,于是OpenCVSharp就诞生了。
在C# 开发环境下加入OpenCVSharp开发包其实也并不难,详细可见下面这位大佬的文章,我老老实实按照他的步骤,完美的用上了OpenCVSharp。
在C#中使用OpenCV(使用OpenCVSharp)
说一下自己在配置过程的感受。在VS中配置OpenCVSharp的第二这种方式,下载OpenCVSharp之后手动配置,确实比较头大。网上各类包齐飞,比较杂乱。使用第一种方式直接配置好,非常方便,就是不的话,比较慢,容易失败。大家可以选择合适自己的方式吧!我在使用第二种方式的时候也遇到了一些错,这里给大家分享一下解决办法。
在上一节中已经将OpenCVSharp的工具包导入到VS中,本节只讲述如何引用kinect的开发包。具体步骤为:
【解决方案资源管理器】→右击【引用】→【添加引用】→勾选【拓展】中关于kinect的开发包
完成之后,在【解决方案资源管理器】中的引用就包含这些:
完成引用后就可以进行开发了。
using System;
using Microsoft.Kinect;
using OpenCvSharp;
namespace kinect11_8
{
class Program
{
static void Main(string[] args)
{
KinectSensor _Sensor = null;
ColorFrameReader _Reader = null;
//获取kinect
_Sensor = KinectSensor.GetDefault();
if (!_Sensor.IsOpen)
{
Console.WriteLine("正在打开摄像头!");
_Sensor.Open();
}
if (_Sensor != null)
{
//打开读取器
_Reader = _Sensor.ColorFrameSource.OpenReader();
//定义帧的描述
var frameDesc = _Sensor.ColorFrameSource.FrameDescription;
int iHeight = frameDesc.Height;
int iWidth = frameDesc.Width;
//OpenCVSharp数据预处理
Mat mImg = new Mat(iHeight, iWidth,MatType.CV_8UC4);
int tmp = iWidth * iHeight * 4 * sizeof(byte);
uint uBufferSize = (uint) tmp;
Cv2.NamedWindow("Color Map");
Console.WriteLine("获取图像中!");
while (true)
{
if (_Reader != null)
{
//获取最新的图像
var frame = _Reader.AcquireLatestFrame();
if (frame != null)
{
//将获取到的数据储存到mImg.Data中
frame.CopyConvertedFrameDataToIntPtr(mImg.Data, uBufferSize, ColorImageFormat.Bgra);
//显示图像
Cv2.ImShow("Color Map", mImg);
//释放帧
frame.Dispose();
frame = null;
}
else
{
Console.WriteLine("未获取到图像!");
}
}
//任意键退出
if (Cv2.WaitKey(30) != -1)
{
break;
}
}
}
//关闭摄像头
_Sensor.Close();
}
}
}
第一次写博客,有不好的地方多多包涵,也希望大家对我说的做的不好的地方多多指点!
之后的工作也会陆续更新,需要的朋友多多关注,十分感谢!
最后给大家推荐一下kinect学习个人觉得比较有用的网站:
Kinect for windows微软中国体感官方网站(里面很多官网资料,可下载)
Kinect for Windows
配置Kinect2.0+Unity5.6开发环境