基于立体相机的人机交互小车控制系统
基于立体相机的人机交互小车控制系统
本篇论文主要介绍本次设计所用到的相关技术以及实现过程。论文详细地介绍了kinect及kinect的工作原理、应用开发方法,并对手势识别以及相关的算法进行了介绍,包括简单的通过坐标识别方法、基于单个部位运动序列的轨迹分析匹配算法、基于多个部位姿态快照的状态机匹配算法,以及隐马尔科夫模型HMM算法。另外,本文也介绍了无线通信协议zigbee,包括zigbee技术的特点、及协议栈,以及如何使用C#实现串口通信,并借助于zigbee模块完成点对点的无线通信。
关键词:kinect;人机交互;手势识别 ;zigbee通信协议 HM000087
3.2 基于kinect的手势识别
在使用kinect完成复杂的应用之前,首先应当了解编程模型,完成基础的环境配置,掌握基本的准备工作和注意事项。
3.2.1 kinect开发准备
开发kinect应用,开发者应该熟悉VS2010开发环境,掌握C#或者C++开发语言,了解基于windows Form窗体编程、WPF的相关编程技术。
另外,Kinect支持windows7和windows8等操作系统,需安装kinect SDK开发接口。具体细节在此不加赘述。
3.2.2 kinect的编程模型
在不考虑异常处理的情况下,一个简单的kinect编程模型包含设备对象获取,参数设置,设备启动,事件注册,事件处理及设备关闭等方面。
KinectSensor是SDK中的核心类。例如用KinectSensor.KinectSensor[0]或KinectSensor.FirstOrDefault()h获取当前接入的Kinect传感器的对象实例。
Kinect启动和初始化以及关闭可以通过以下方法实现:
//定义Kinect设备
KinectSensor _kinect;
/// <summary>
/// 启动Kinect设备,默认初始化选项,并注册AllFramesReady同步事件
/// </summary>
private void startKinect()
{
if (KinectSensor.KinectSensors.Count > 0)
{
//选择第一个Kinect设备
_kinect = KinectSensor.KinectSensors[0];
MessageBox.Show("Kinect目前状态为:" + _kinect.Status);
//初始化设定,启用彩色图像、深度图像和骨骼跟踪
_kinect.ColorStream.Enable();
//_kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
_kinect.DepthStream.Enable();
//_kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
//_kinect.SkeletonStream.Enable();
TransformSmoothParameters tsp = new TransformSmoothParameters();
tsp.Smoothing = 0.5f; //平滑度
tsp.Correction = 0.5f;
tsp.Prediction = 0.5f;
tsp.JitterRadius = 0.05f;
tsp.MaxDeviationRadius = 0.04f;
_kinect.SkeletonStream.Enable(tsp);
//注册事件,该方法将保证彩色图像、深度图像和骨骼数据的同步
//_kinect.AllFramesReady+=new EventHandler<AllFramesReadyEventArgs>(_kinect_AllFramesReady);
_kinect.ColorFrameReady+=new EventHandler<ColorImageFrameReadyEventArgs>(_kinect_ColorFrameReady);
_kinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(_kinect_DepthFrameReady);
_kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(_kinect_SkeletonFrameReady);
//启动Kinect设备
_kinect.Start();
}
else
{
MessageBox.Show("没有发现任何Kinect设备");
}
}
private void stopKinect()
{
if (_kinect != null)
{
if (_kinect.Status == KinectStatus.Connected)
{
//关闭设备
_kinect.Stop();
}
}
}
3.2.3 WPF工程、控件及初始化
首先新建WPF Application工程,在工程中加入Microsoft.Kinect引用,在解决方案中加入“Microsoft.Samples.Kinect.WpfViewers”工程引用。
在主窗体中加入KinectColorViewer控件、KinectSensorChooser控件和一个Lable控件。其中KinectColorViewer控件用于提示用户在Kinect视角中的位置;当跟踪人体骨骼时,Label控件显示提示信息。初始化和事件注册代码如下:
bool isWindowsClosing = false; //窗口是否正在关闭中
const int MaxSkeletonTrackingCount = 6; //最多同时可以跟踪的用户数
Skeleton[] allSkeletons = new Skeleton[MaxSkeletonTrackingCount];
private void Window_Loaded(object sender, RoutedEventArgs e)
{
labelIsSkeletonTracked.Visibility = System.Windows.Visibility.Hidden;
kinectSensorChooser1.KinectSensorChanged+=newDependencyPropertyChangedEventHandler(kinectSensorChooser1_KinectSensorChanged);
}
void kinectSensorChooser1_KinectSensorChanged(object sender, DependencyPropertyChangedEventArgs e)
{
KinectSensor oldKinect = (KinectSensor)e.OldValue;
stopKinect(oldKinect);
KinectSensor kinect = (KinectSensor)e.NewValue;
if (kinect == null)
{
return;
}
kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
var parameters = new TransformSmoothParameters
{
Smoothing = 0.5f,
Correction = 0.5f,
Prediction = 0.5f,
JitterRadius = 0.05f,
MaxDeviationRadius = 0.04f
};
kinect.SkeletonStream.Enable(parameters);
kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(kinect_SkeletonFrameReady);
try
{
//显示彩色图像摄像头
kinectColorViewer1.Kinect = kinect;
//启动
kinect.Start();
}
catch (System.IO.IOException)
{
kinectSensorChooser1.AppConflictOccurred();
}
}
目 录
第1章 绪 论 1
1.1 本论文的背景和意义 1
1.1.1 背景 1
1.1.2 意义 1
1.2 本论文的主要方法和研究进展 2
1.3 本论文的主要内容 2
1.4 本论文的结构安排 2
第2章 基本理论知识及开发工具介绍 3
2.1 KINECT简介 3
2.2 KINECT 工作原理 3
2.2.1 KINECT硬件架构 3
2.2.2 kinect的深度成像原理 5
2.2.3 人体部位识别 11
2.3 Kinect for Windows SDK简介 12
2.4 姿态和手势 13
2.5 ZigBee 概述 13
2.5.1 ZigBee 技术应用优势 14
2.5.2 ZigBee 协议栈 15
第3章 基于KINECT的小车控制系统 16
3.1系统整体框图 16
3.2 基于kinect的手势识别 17
3.2.1 kinect开发准备 17
3.2.2 kinect的编程模型 17
3.2.3 WPF工程、控件及初始化 19
3.2.4 将肢体语言映射为事件 23
3.3 基于zigbee的小车控制系统 25
3.3.1 使用Serialport类实现串口通信 25
3.3.2 使用zigbeee模块实现无线通信 27
第4章 系统测试 33
4.1 上位机测试 33
4.2 zigbee通信模块测试 34
4.3 整体测试 34
第5章 总结与拓展 36
5.1 对本次设计的总结 36
5.2 关于手势识别算法的进一步讨论 36
5.2.1 手势识别系统的整体结构 37
5.2.2 基于单个部位运动序列的轨迹分析匹配 38
5.2.3 基于多个部位姿态快照的状态机匹配 39
5.2.4 基于隐马尔可夫模型的手势识别 40
致 谢 43
参考文献 44
本篇论文主要介绍本次设计所用到的相关技术以及实现过程。论文详细地介绍了kinect及kinect的工作原理、应用开发方法,并对手势识别以及相关的算法进行了介绍,包括简单的通过坐标识别方法、基于单个部位运动序列的轨迹分析匹配算法、基于多个部位姿态快照的状态机匹配算法,以及隐马尔科夫模型HMM算法。另外,本文也介绍了无线通信协议zigbee,包括zigbee技术的特点、及协议栈,以及如何使用C#实现串口通信,并借助于zigbee模块完成点对点的无线通信。
关键词:kinect;人机交互;手势识别 ;zigbee通信协议 HM000087
3.2 基于kinect的手势识别
在使用kinect完成复杂的应用之前,首先应当了解编程模型,完成基础的环境配置,掌握基本的准备工作和注意事项。
3.2.1 kinect开发准备
开发kinect应用,开发者应该熟悉VS2010开发环境,掌握C#或者C++开发语言,了解基于windows Form窗体编程、WPF的相关编程技术。
另外,Kinect支持windows7和windows8等操作系统,需安装kinect SDK开发接口。具体细节在此不加赘述。
3.2.2 kinect的编程模型
在不考虑异常处理的情况下,一个简单的kinect编程模型包含设备对象获取,参数设置,设备启动,事件注册,事件处理及设备关闭等方面。
KinectSensor是SDK中的核心类。例如用KinectSensor.KinectSensor[0]或KinectSensor.FirstOrDefault()h获取当前接入的Kinect传感器的对象实例。
Kinect启动和初始化以及关闭可以通过以下方法实现:
//定义Kinect设备
KinectSensor _kinect;
/// <summary>
/// 启动Kinect设备,默认初始化选项,并注册AllFramesReady同步事件
/// </summary>
private void startKinect()
{
if (KinectSensor.KinectSensors.Count > 0)
{
//选择第一个Kinect设备
_kinect = KinectSensor.KinectSensors[0];
MessageBox.Show("Kinect目前状态为:" + _kinect.Status);
//初始化设定,启用彩色图像、深度图像和骨骼跟踪
_kinect.ColorStream.Enable();
//_kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
_kinect.DepthStream.Enable();
//_kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
//_kinect.SkeletonStream.Enable();
TransformSmoothParameters tsp = new TransformSmoothParameters();
tsp.Smoothing = 0.5f; //平滑度
tsp.Correction = 0.5f;
tsp.Prediction = 0.5f;
tsp.JitterRadius = 0.05f;
tsp.MaxDeviationRadius = 0.04f;
_kinect.SkeletonStream.Enable(tsp);
//注册事件,该方法将保证彩色图像、深度图像和骨骼数据的同步
//_kinect.AllFramesReady+=new EventHandler<AllFramesReadyEventArgs>(_kinect_AllFramesReady);
_kinect.ColorFrameReady+=new EventHandler<ColorImageFrameReadyEventArgs>(_kinect_ColorFrameReady);
_kinect.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(_kinect_DepthFrameReady);
_kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(_kinect_SkeletonFrameReady);
//启动Kinect设备
_kinect.Start();
}
else
{
MessageBox.Show("没有发现任何Kinect设备");
}
}
private void stopKinect()
{
if (_kinect != null)
{
if (_kinect.Status == KinectStatus.Connected)
{
//关闭设备
_kinect.Stop();
}
}
}
3.2.3 WPF工程、控件及初始化
首先新建WPF Application工程,在工程中加入Microsoft.Kinect引用,在解决方案中加入“Microsoft.Samples.Kinect.WpfViewers”工程引用。
在主窗体中加入KinectColorViewer控件、KinectSensorChooser控件和一个Lable控件。其中KinectColorViewer控件用于提示用户在Kinect视角中的位置;当跟踪人体骨骼时,Label控件显示提示信息。初始化和事件注册代码如下:
bool isWindowsClosing = false; //窗口是否正在关闭中
const int MaxSkeletonTrackingCount = 6; //最多同时可以跟踪的用户数
Skeleton[] allSkeletons = new Skeleton[MaxSkeletonTrackingCount];
private void Window_Loaded(object sender, RoutedEventArgs e)
{
labelIsSkeletonTracked.Visibility = System.Windows.Visibility.Hidden;
kinectSensorChooser1.KinectSensorChanged+=newDependencyPropertyChangedEventHandler(kinectSensorChooser1_KinectSensorChanged);
}
void kinectSensorChooser1_KinectSensorChanged(object sender, DependencyPropertyChangedEventArgs e)
{
KinectSensor oldKinect = (KinectSensor)e.OldValue;
stopKinect(oldKinect);
KinectSensor kinect = (KinectSensor)e.NewValue;
if (kinect == null)
{
return;
}
kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
var parameters = new TransformSmoothParameters
{
Smoothing = 0.5f,
Correction = 0.5f,
Prediction = 0.5f,
JitterRadius = 0.05f,
MaxDeviationRadius = 0.04f
};
kinect.SkeletonStream.Enable(parameters);
kinect.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(kinect_SkeletonFrameReady);
try
{
//显示彩色图像摄像头
kinectColorViewer1.Kinect = kinect;
//启动
kinect.Start();
}
catch (System.IO.IOException)
{
kinectSensorChooser1.AppConflictOccurred();
}
}
目 录
第1章 绪 论 1
1.1 本论文的背景和意义 1
1.1.1 背景 1
1.1.2 意义 1
1.2 本论文的主要方法和研究进展 2
1.3 本论文的主要内容 2
1.4 本论文的结构安排 2
第2章 基本理论知识及开发工具介绍 3
2.1 KINECT简介 3
2.2 KINECT 工作原理 3
2.2.1 KINECT硬件架构 3
2.2.2 kinect的深度成像原理 5
2.2.3 人体部位识别 11
2.3 Kinect for Windows SDK简介 12
2.4 姿态和手势 13
2.5 ZigBee 概述 13
2.5.1 ZigBee 技术应用优势 14
2.5.2 ZigBee 协议栈 15
第3章 基于KINECT的小车控制系统 16
3.1系统整体框图 16
3.2 基于kinect的手势识别 17
3.2.1 kinect开发准备 17
3.2.2 kinect的编程模型 17
3.2.3 WPF工程、控件及初始化 19
3.2.4 将肢体语言映射为事件 23
3.3 基于zigbee的小车控制系统 25
3.3.1 使用Serialport类实现串口通信 25
3.3.2 使用zigbeee模块实现无线通信 27
第4章 系统测试 33
4.1 上位机测试 33
4.2 zigbee通信模块测试 34
4.3 整体测试 34
第5章 总结与拓展 36
5.1 对本次设计的总结 36
5.2 关于手势识别算法的进一步讨论 36
5.2.1 手势识别系统的整体结构 37
5.2.2 基于单个部位运动序列的轨迹分析匹配 38
5.2.3 基于多个部位姿态快照的状态机匹配 39
5.2.4 基于隐马尔可夫模型的手势识别 40
致 谢 43
参考文献 44
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/dzxx/dzkxyjs/2284.html