kinect和openNI学习资料汇总 及OpenNI+Unity Kinect开发简介

2024-03-05 08:10

本文主要是介绍kinect和openNI学习资料汇总 及OpenNI+Unity Kinect开发简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

 

 

Kinect到手快一个月了,期间查阅了很多资料,见识了很多牛人,他们的工作如此漂亮,让我大开眼界。现将自己所掌握的资料汇总于此,以便随时查阅。

首先是csdn上小斤童鞋的系列文章:

           Kinect开发教程一:OpenNI的安装与开发环境配置

           Kinect开发教程二:OpenNI读取深度图像与彩色图像并显示

           Kinect开发教程三:利用OpenNI进行手势识别

           Kinect开发教程四:用Kinect控制鼠标玩水果忍者PC版

其次是mp77技术交流频道上的系列文章,基于openNI的《user guide》来写的,简明易懂(作者自称西大学生,俺不知是哪个西大):

           Kinect内幕——解析SDK(OpenNI Framework 1)  :PrimeSense OpenNI Framework的基本架构和设计思路

           Kinect内幕——解析SDK(OpenNI Framework 2)  :工作节点的创建和销毁

           Kinect内幕——解析SDK(OpenNI Framework 3)  :openNI编程

            Kinect内幕——解析SDK(OpenNI Framework 4)  :工作节点的配置

然后是台湾牛人heresy的系列介绍文章,他好像是第一个用汉字介绍Kinect和openNI的先驱者,小斤童鞋的文章基本上是参照他的(万恶的资本主义世界的人咋就有了得天独厚的优势!):

           透過 OpneNI 讀取 Kinect 深度影像資料

           透過 OpneNI 合併 Kinect 深度以及彩色影像資料

           透過 OpenNI 建立 Kinect 3D Point Cloud

            錄製、重播 OpenNI 擷取到的資料

            透過 OpenNI / NITE 分析人體骨架(上)

           透過 OpenNI / NITE 分析人體骨架(下)

           OpenNI 的手勢偵測

           OpenNI 人體骨架分析部分補充

           讓 OpenNI 可以透過微軟 Kinect SDK 讀取 Kinect 的資料!

           OpenNI XnSkeletonJointOrientation 簡單分析

           使用 XML 設定檔來初始化 OpenNI

            OpenNI 的手部追蹤、外加簡單的滑鼠模擬

            OpenNI 的 User Generator

晨宇思远的博客,关于openNI的好像只有下面一篇文章,但他的opencv的文章有很多,很值得一读:

           OpenCV学习笔记(20)Kinect + OpenNI + OpenCV + OpenGL 组合体验

同样是牛人heresy的系列文章,只是它长在一个不和谐的地方,怎么访问大家都懂的:

              OpenNI / Kinect 相關文章目录

继续来CSDN上的童鞋博客:

              利用KINECT+OPENCV检测手势的演示程序

国内kinect开发的主要社区之一,其中有很多资源,有时间不妨多逛逛:

          kinect 体感游戏网         
cnkinect上的童鞋发起的 Kinect for PC 项目,是学习kinect的又一个好地方:
kinect for pc 项目的wiki主页

 

 

 

 

 

OpenNI结合Unity3D Kinect进行体感游戏开发(转)

 

 

 

 

1. 下载安装Unity3D(目前版本为3.4)

2. 下载OpenNI的Unity3D wrapper(目前版本为0.9.2): 

    a. 地址:http://www.openni.org/Downloads/OpenNIModules.aspx

    b. 按如下选择:

    c. 下载完解压后有2个.unitypackage文件 3. 创建新的U3D(Unity3D)工程,导入载好的unitypackage文件,先导入OpenNIUnityToolkit_0.9.2.unitypackage,再导入NITEExtensions.unitypackage     这时在工程视图里能看到导入的所有文件 4. 开始熟悉wrapper(资源都在工程视图)     a. 示例游戏:OpenNI-->Sample Scenes-->SingleSkeleton.,运行后能获得一个感性的认识。     b. 手册:OpenNI-->Documentation-->OpenNIPackageDocumentation,这个手册很重要,此后的学习都可以根据这个手册来。     c. 创建新的Scene,然后按照手册上的例子自己从零开始创建示例游戏。

这篇手册需要通读的是第一部分:Unity OpenNI Unity Toolkit Overview---> OpenNI Package Overview,包括以下内容:

1. OpenNI Module Main Capabilities  

2. Samples Overview

3. Additional Topics

第一节包含了所有需要理解的东西,第二节是例程讲解,第三节是附加话题。

可以先从第二节开始,边照着创建例程边查阅第一节的相关内容:

a. Single Skeleton Sample

这个例程介绍怎么创建单一角色,包括怎么让Sensor运行起来,怎么让玩家用自己的躯体去控制游戏角色的骨架。

* Single Skeleton Sample

1. 在Unity中创建一个空的scene

2. 往scene里添加object (如果不知道怎么添加:在Project视图中搜索object的名字,然后直接将object拖到Hierarchy视图)

a. 第一个就是OpenNISettings。加了这个后点击运行,正常的话应该可以看到sensor亮了。这个object实现的是驱动sensor,封装了OpenNI相应的函数。

该obejct有3个子项,我们目前只关心"OpenNI configuration", 选中后在Inspector窗口能看到不同的选项:

Mirror behavior  // 表示是否要将深度数据进行左右镜像。勾上。

XML file // 通过XML 文件来定制一些参数,比如分辨率,帧率,Production Node等;也可以通过XML文件来导入录制好的深度视频,在需要识别特定动作的时候可以用来调试。

Use image generator? // 表示是否需要产生RGB图像。不勾。

Use user and skeleton? // 表示是否需要识别用户和骨骼。勾上。

Smoothing factor  // 滤波参数,暂时用默认值0.5

如果想深入了解这个object,

1)阅读手册里相应的解释:在OpenNI Module Main Capabilities-->Centralized Initialization and Configuration-->OpenNISettings Prefab

2)看脚本代码,有2个脚本:OpenNISettingsManager,NIOpenNISettingsManagerInspector

OpenNISettingsManager - 主要是接受上面解释的参数,进行初始化和销毁的工作。这里关键的是NIContext,这是一个singleton,在脚本NIContext里。实际上NIContext就是对OpenNI的context的封装。如果不了解什么是context,可以参阅OpenNI的文档。

NIOpenNISettingsManagerInspector - 主要是实现在Inspector显示相关选项。需要做扩展的时候可以看看。

b. 接着添加NIDepthViewer,这时候运行,就能看到右上角多了一个视窗,里面显示的是深度视频。(注:视频里人的动作是反的,你往左,视频里的自己往右。如果不勾上上一个object的"Mirror behavior",就不会反了,这里先不理会)有了这个,就能清楚地看到镜头能看到的范围。

c. 再添加NIRadarViewer, 运行,在游戏的左上角能看到"User Radar", 当有用户被检测到的时候,会出现一个红色的方块,方块里面有数字(比如1)代表用户号。

d. 添加角色。这个比较有趣。添加ConstructionWorkerPrefab,然后在Hierarchy中选中这个object,再将鼠标移到Scene窗口,按”F“键,这时候就可以看到工人模型了。运行,会看到工人模型以校正姿势站在屏幕中间(看起来比较小,以后可以调整)。这时候自己做校正动作,会看到左上角RadarViewer里的小方块会从红色变成黄色最后变成绿色,绿色就表示校正成功了,但工人模型却没有动起来,因为我们还缺少一个object,看下一步:

e. 添加NISkeletonPrefab,运行,校正,工人模型驱动起来了!这个object的功能就是实现用户驱动角色。里面包含了2个脚本:

1) NIUsers To Player Mapper: 用来管理user和player之间的映射,实际上很简单,先识别出来的user给分配一个小的player ID。

2) NISkeleton Users Manager: 用来连接player和skeleton controller。默认会自动搜索Skeleton controller,也可以手动指定(在多玩家的场合用得上,比如player1映射到skeleton controller1,player2映射到skeleton controller2)。skeleton controller:是用来驱动character的,比如工人模型,你可以在ConstructionWorkerPrefab里找到这个脚本。

总结起来,NISkeletonPrefab实现了user(玩家)到player(游戏里的玩家)到skeleton controller(可以control不同的模型)的连接。会有user,player和skeleton controller的原因:每个use可以驱动不同的player,比如你和朋友一起玩游戏,你和朋友都是user,各自驱动自己的player,而每个player又可以有不同的外观,就象赛车游戏,你可以选择不同的车型。

想深入了解这个object,同样有2种方法:

1. 看手册:OpenNI Module Main Capabilities-->Skeleton Control-->NISKeletonPrefab

2. 读脚本:NIUsersToPlayerMapper, NISkeletonUsersManager
-------------------------------------------------------------------------------------------

本篇基于最新的wrapper v0.9.7.4(该版本已经不需要做校准姿势)介绍怎么从零开始把自己的人物模型驱动起来,目的是给读者一个能运行的示例,在这过程中不会对概念做过多的解释,详细请参照wrapper的帮助文档。

 

1. 安装Unity3.4

2. 下载v0.9.7.4的wrapper (解压得到的是一个文件:OpenNI_Unity_Toolkit-0.9.7.4.unitypackage)

3. 打开Unity创建一个空的工程

4. 导入OpenNI_Unity_Toolkit-0.9.7.4.unitypackage 

 

  • 按默认的,导入全部文件
  • 导入后看到如下图所示文件结构

 

 

 

5. 导入你自己的人物模型,这里以asset store上的战士模型为例

 

  • 进入asset store(Unity里Ctril+9),当然前提是你注册了账户(免费)
  • Asset Store页面的Categories里选择3D Models-->Characters-->Humanoids-->Humans,然后在左侧的列表里选择Soldier Character Pack(免费的)
  • 导入Soldier Character Pack
  • 导入后看到多了如下文件

6. 加入人物模型

 

 

  • 将上图文件目录里的soldier直接拖到Hierarchy窗口
  • 这时在scene窗口看不到战士模型,先在Hierarchy窗口选中soldier,然后将鼠标移到Scene窗口,按F键,便可看到。
  • 这时如果运行游戏,看到的只是静止的战士,摄像头也不会亮

7. 驱动3D摄像头(Kinect或ASUS Xtion Pro,看你用的是什么设备)

 

  • 将Project窗口的OpenNI-->OpenNISettings(如下左图)拖动到Hierarchy窗口(如下右图)
  •      
  • 这时运行游戏,你会看到3D摄像头亮了,说明设备已经驱动起来了(当然,这一步你必须先插好3D摄像头)
  • 为了对设备运行状态有个更直观的认识,这里加入一些辅助的东西
    • 将Project窗口的NIIDepthViewer和NIRadarViewer拖到Hierarchy窗口
    •      
    • 运行游戏,会看到窗口的左上角和右上角分别多了一个小窗
    •          
    • 左边的是NIRadarViewer,显示的是当前是否有人进入摄像头的视野并被识别出来;右边的是NIDepthViewer,显示的是摄像头看到的实际场景。这时如果你站在摄像头的视野范围内稍微动一下,就可以被识别出来,同时在Users Radar上面多了一个红色的小方格,方格里面显示数字1. 小方格显示红色表示用户仅仅是被识别出来了,但还没有开始骨架跟踪;而数字1表示当前用户的ID。当你走动的时候,红色方格也会相应地动。
    • 那怎样开始骨架跟踪呢?
      • 创建一个空的game object(Unity的菜单GameObject-->Create Empty),然后在Inspector窗口将其重命名为player manager。
      • 然后将脚本NIPlayerManagerCOMSelection拖到player manager
      • 在Inspector窗口将Max allowed players改成1
      • 这时运行游戏,当你站在摄像头的视野范围内稍微走动的时候,就可以看到Users Radar窗口的小方格是绿色的,这表明算法已经开始跟踪你的骨架了因为这个版本的wrapper封装了比较新的OpenNI,所以这里你不再需要做校准姿势就可以自动跟踪骨架

8. 一切准备工作做好了,现在可以开始驱动人物模型了

 

 

  • 在Hierarchy窗口选中soldier,将Project窗口的脚本NISkeletonController拖到Inspector
  • 拖动过去后会看到弹出一个提示,选continue。
  • 这时Inspector窗口是这样的
  • 现在开始骨架匹配
    • 在Inspector(如上图)的“Joints to control”里选择Head,然后点击最右边的小圆圈,在弹出的“Select Transform”对话框里选择“Head”      
    • 选好后的情形如下
    • 这时点击,会在Hierarchy窗口看到其所在的位置
    • 这样战士模型的头就和OpenNI算法识别出来的玩家骨架的头匹配起来了,其它骨架的匹配方法类同,下面是全部匹配好的“Joints to control”截图,可对照其骨架的名字一一匹配。
    • 这里要说明的是,不同的人物模型对骨架各关节的命名可能不一样,怎么命名无所谓,关键是要找对关节。以这个战士模型为例,见下面两张图,第一张是Left Shoulder的位置,第二张是Left Arm的位置,很明显,我们必须选择的肩关节应该是Left Arm而不是Left Shoulder。
  • 骨架匹配好了,现在运行游戏,你会看到在初始状态战士的双手是举起来的
  • 这时如果你出现在摄像头的可见范围内,你会发现战士模型的手脚会跟着你的手脚在动,你转身,战士模型也会转身。这时,你的人物模型已经驱动起来了!
  • 此时你可能会发现一个问题:你走动的时候战士模型并没有跟着移动,请在soldier的Inspector窗口将Update Root Position?勾上,再运行游戏,这时战士模型就会跟着你走动了

9. 现在模型已经完全驱动起来了,为了好看,你可以加入灯光,同时把战士模型放大一些。

 

 

 

建议初学者对本篇的每一步为什么能工作思考一下,然后从文档OpenNIPackageDocumentation中找答案。

 

本系列关于OpenNI的Unity wrapper就介绍到这里,近期不会再有更新。谢谢阅读。
以上文章转自: http://blog.csdn.net/coker 

 

 

 

 

 

这篇关于kinect和openNI学习资料汇总 及OpenNI+Unity Kinect开发简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/775844

相关文章

Spring Boot 处理带文件表单的方式汇总

《SpringBoot处理带文件表单的方式汇总》本文详细介绍了六种处理文件上传的方式,包括@RequestParam、@RequestPart、@ModelAttribute、@ModelAttr... 目录方式 1:@RequestParam接收文件后端代码前端代码特点方式 2:@RequestPart接

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

Agent开发核心技术解析以及现代Agent架构设计

《Agent开发核心技术解析以及现代Agent架构设计》在人工智能领域,Agent并非一个全新的概念,但在大模型时代,它被赋予了全新的生命力,简单来说,Agent是一个能够自主感知环境、理解任务、制定... 目录一、回归本源:到底什么是Agent?二、核心链路拆解:Agent的"大脑"与"四肢"1. 规划模

Python+wxPython开发一个文件属性比对工具

《Python+wxPython开发一个文件属性比对工具》在日常的文件管理工作中,我们经常会遇到同一个文件存在多个版本,或者需要验证备份文件与源文件是否一致,下面我们就来看看如何使用wxPython模... 目录引言项目背景与需求应用场景核心需求运行结果技术选型程序设计界面布局核心功能模块关键代码解析文件大

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

C++多线程开发环境配置方法

《C++多线程开发环境配置方法》文章详细介绍了如何在Windows上安装MinGW-w64和VSCode,并配置环境变量和编译任务,使用VSCode创建一个C++多线程测试项目,并通过配置tasks.... 目录下载安装 MinGW-w64下载安装VS code创建测试项目配置编译任务创建 tasks.js

交换机救命命令手册! 思科交换机排障命令汇总指南

《交换机救命命令手册!思科交换机排障命令汇总指南》在交换机配置与故障排查过程中,总会遇到那些“关键时刻靠得住的命令”,今天我们就来分享一份思科双实战命令手册... 目录1. 基础系统诊断2. 接口与链路诊断3. L2切换排障4. L3路由与转发5. 高级调试与日志6. 性能与QoS7. 安全与DHCP8.

故障定位快人一步! 华为交换机排障命令汇总

《故障定位快人一步!华为交换机排障命令汇总》在使用华为交换机进行故障排查时,首先需要了解交换机的当前状态,通过执行基础命令,可以迅速获取到交换机的系统信息、接口状态以及配置情况等关键数据,为后续的故... 目录基础系统诊断接口与链路诊断L2切换排障L3路由与转发高级调试与日志性能、安全与扩展IT人无数次实战

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注