下述代码摘自Kinect SDK 自带例子;KinectImageView;

先安装Kinect传感器,开发包,搭建环境;网上有;

新建WPF或C#项目;一般使用WPF;用Winform有时候会有些问题;

引用Kinect命名空间;
using Microsoft.Kinect;

private KinectSensor kinectDevice;
定义一个变量,KinectSensor代表传感器对象;

初始化;
if (this.kinectDevice.Status == KinectStatus.Connected)
{
this.kinectDevice.SkeletonStream.Enable();
this.kinectDevice.ColorStream.Enable();

this.kinectDevice.Start();
this.KinectDevice.SkeletonFrameReady += KinectDevice_SkeletonFrameReady;
}

KinectStatus,传感器状态枚举;
this.kinectDevice.SkeletonStream.Enable(),使能骨骼跟踪;
this.kinectDevice.Start();启动传感器;
this.KinectDevice.SkeletonFrameReady += KinectDevice_SkeletonFrameReady; 骨骼帧准备好事件;

Kinect的帧率为30帧/秒;Kinect传感器的识别范围为传感器前方大体数米范围的一个立体空间;此空间有X、Y、Z坐标;
站在Kinect传感器前,Kinect识别出人体后,如果开发环境都已配置好;
在程序中引入SkeletonFrameReady事件,将会在此事件中收到骨骼帧;每个骨骼帧包含人体各个关节的坐标;
每秒钟会收到30个骨骼帧,SkeletonFrameReady事件每秒自动触发30次;

基本的手势或人体姿态识别代码大体如下;可以识别手的动作,也可以识别身体其他部位的动作;
做开发的时候经常需要站起来做动作,看上去你和办公室其他人很不一样;

private void KinectDevice_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e){using (SkeletonFrame frame = e.OpenSkeletonFrame()){if (frame != null){frame.CopySkeletonDataTo(this.frameSkeletons);Skeleton skeleton = GetPrimarySkeleton(this.frameSkeletons);if (skeleton != null){Joint head = skeleton.Joints[JointType.Head];Joint leftHand = skeleton.Joints[JointType.HandLeft];Joint leftWrist = skeleton.Joints[JointType.WristLeft];Joint rightHand = skeleton.Joints[JointType.HandRight];Joint rightWrist = skeleton.Joints[JointType.WristRight];Point leftHandPos = GetPosition(leftHand);Point leftWristPos = GetPosition(leftWrist);Point rightHandPos = GetPosition(rightHand);Point rightWristPos = GetPosition(rightWrist);if (rightHandPos.Y < rightWristPos.Y && leftHandPos.Y < leftWristPos.Y){......if (rightHandTarget != null){......}if (leftHandTarget != null && rightHandTarget != null){......}}}}}}

Skeleton skeleton = GetPrimarySkeleton(this.frameSkeletons);
执行完此句将获取到一个骨骼帧数据;里面包含人体各个关节,关节的坐标;

Joint head = skeleton.Joints[JointType.Head];
获取头关节;

Joint leftHand = skeleton.Joints[JointType.HandLeft];
获取左手关节;

Joint leftWrist = skeleton.Joints[JointType.WristLeft];
获取左腕关节;

Joint代表一个关节;

获取关节中的点坐标;
Point leftHandPos = GetPosition(leftHand);
Point leftWristPos = GetPosition(leftWrist);
Point rightHandPos = GetPosition(rightHand);
Point rightWristPos = GetPosition(rightWrist);

private Point GetPosition(Joint hand)
{
Point p = new Point();
DepthImagePoint point = kinectDevice.MapSkeletonPointToDepth(hand.Position, this.kinectDevice.DepthStream.Format);
p.X = (int)((point.X * LayoutRoot.ActualWidth / kinectDevice.DepthStream.FrameWidth));
p.Y = (int)((point.Y * LayoutRoot.ActualHeight / kinectDevice.DepthStream.FrameHeight));
return p;
}

if (rightHandPos.Y < rightWristPos.Y && leftHandPos.Y < leftWristPos.Y)
通过比较关节点坐标来判断;比如右手的X坐标持续增大,则可判为右手进行了右挥或右移;

最基本的原理就是它传关节坐标给你,你根据关节坐标增大减小判断左移右移等;
如果要识别多一些,更进一步可根据关节坐标计算一些三角函数等;
开发还是有一定难度;因为并不是判断一次x坐标增大或减小,就判断人体关节进行了左移或右移;
要在每秒30帧中持续判断,才能判出姿态;

可能有的用词不太准确;凭记忆写的;

手势识别可以翻阅PPT等;有的场合可能不方便用鼠标或键盘操作电脑,离开屏幕远一些,此时一些简单操作可用手势进行;一般大屏比较适用;
体感有多种用途;见此;
https://blog.csdn.net/bcbobo21cn/article/details/105592485

体感Kinect手势识别开发基本原理相关推荐

  1. 体感(Kinect)开发要点总结一

    体感(Kinect)开发要点总结一 Kinect有两类摄像头,近红外摄像头和普通的视频摄像头.视频摄像头提供了一般摄像头类似的彩色影像.       Kinect的彩色摄像头默认每秒产生30副Colo ...

  2. 体感游戏 | 手势识别玩飞机大战游戏(三) 使用OpenCV实现手势识别玩飞机大战游戏

    后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简单手势识别 使用OpenCV实现手势识别玩飞机大战游 ...

  3. 体感游戏 | 手势识别玩飞机大战游戏(二) Python+OpenCV实现简易手势识别功能

    后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简单手势识别 使用OpenCV实现手势识别玩飞机大战游 ...

  4. 体感游戏 | 手势识别玩飞机大战游戏(一) 用pygame实现飞机大战小游戏

    Color Space OpenCV与AI深度学习 后面将分四篇文章来介绍实现手势识别控制飞机大战游戏的功能,它们分别是: 使用Pygame实现简易飞机大战小游戏 使用Python+OpenCV实现简 ...

  5. 工作经验(体感开发篇)

    我的工作是C++开发,主要是做体感方面的开发,以下是开发时候遇到的一些坎,希望不会重蹈覆辙 NITE1.5及以后,内部通过一定的步骤,允许任何姿势下进行骨架校准,可用NeedPoseForCalibr ...

  6. 春节假期和幺儿一起玩xbox360的体感游戏

    很多年前,我在商场就看到过体感游戏,大大电视,面前有几个小孩,玩得很熟练,看起来蛮有意思. 当时我在想,为什么个体商家愿意拿出设备摆摊,难道这里面有很丰厚的利润? 今年我终于有一个想法,在春节假期和幺 ...

  7. 体感(Kinect)技术开发和应用简介

    体感有多种:Kinect是微软做的: 一 微软 Kinect 技术简介 Kinect使人机交互从二维扩展到三维,进入到非接触的交互体验.     Kinect硬件基本组成:传动马达,用于仰角控制:彩色 ...

  8. Kinect结合Unity3D引擎开发体感游戏(二)

    这篇接着<Kinect结合Unity3D引擎开发体感游戏(一)>,时隔3个月才出这篇,在此期间还有不少机油们,要求出续集,期间在公司那边事情太多,一直帮公司前人做的项目擦屁股,到目前为止, ...

  9. [Kinect]Kinect结合Unity3D引擎开发体感游戏

    最近公司项目需要做科技馆的体感游戏,以前也没接触过游戏,虽然以前自己也是想做游戏,我想大部分都是学编程出来来做游戏,哈哈(请允许我淫笑一下,终于可以做这方面).虽然以前没接触过体感游戏,看到的体验也是 ...

最新文章

  1. React 打怪笔记
  2. SpringBoot 项目tomcat插件启动报错 java.lang.NoClassDefFoundError: javax/el/ELManager
  3. 丰田chr优惠5万_精打细算还是英朗划算,优惠5万入手英朗,落地8.8万买贵了吗...
  4. 使用Scrapy构建一个网络爬虫
  5. 部署HDFS HA的环境
  6. nodejs中require的路径是一个文件夹时发生了什么
  7. 【FICO 汇率】汇率
  8. java编程实现素数环_结对编程(JAVA实现)
  9. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
  10. 科技长廊声光电计算机,科技展示长廊 孩子探索乐园
  11. Fixcel电子表格——报表模块(二)
  12. Web Dev领域:2017精彩事件和 2018预测
  13. 反转单链表的几种方法
  14. 大数据分析平台建设项目需求报告与技术方案
  15. MIUI9修改手机机型 修改王者荣耀版本
  16. Scala安装教程(windows和linux)
  17. 邯郸php,邯郸php程序员培训,邯郸php程序员培训费用,邯郸php程序员培训完工作好找吗...
  18. L Norms 范数
  19. MP4文件格式简要解析
  20. 机智云AIoT开发平台,物联网开发和运营从未如此简单

热门文章

  1. Leetcode 208. 实现 Trie (前缀树) 解题思路及C++实现
  2. sklearn快速入门教程:(五)集成学习
  3. matelab的安装
  4. 利用iptables来配置linux禁止所有端口登陆和开放指定端口
  5. python中如何打开csv文件_在Python中从CSV文件读取数据
  6. axios 发送 AJAX请求
  7. 用JavaScript实现简单的excel列转sql字符串
  8. PyQt5 技术篇-scrollArea不显示滚动条解决方法,Qt Designer不显示滚动条,滚动条的显示和隐藏
  9. jquery/css实现步骤条
  10. CTFshow 反序列化 web263