OpenNI体感应用开发实战
作者:任侃 著
出版时间:2014年版
内容简介
本书是国内首本关于OpenNI的实战性著作,也是首本基于Xtion设备的体感应用开发类著作。具有权威性,由国内体感应用开发领域的专家撰写,华硕官方和CNKinect社区提供支持;具有针对性,深入调研OpenNI社区开发者的需求,据此对内容进行编排;全面且系统地讲解了Xtion和OpenNI的功能使用、技术细节和工作原理,以及体感应用开发的各种知识和技巧;实战性强,包含多个有趣的综合性案例,详细分析和讲解案例的实现过程,确保读者通过本书掌握体感应用开发的技术和方法是本书的宗旨。 全书共19章,分为五个部分:基础篇(第1~3章)介绍了自然人机交互技术、Xtion硬件设备的功能和原理、OpenNI的功能和应用;准备篇(第4~6章)讲解了如何搭建OpenNI+Xtion的体感应用开发环境,以及OpenNI的一些基本功能;进阶篇(第7~13章)详细讲解了人体骨骼追踪、手势识别、手部追踪、录制与重播、生产节点的建立、声音数据的获取和使用、彩色图像数据的获取和贴图等OpenNI的重要功能及其应用方法;实战篇(第14~17章)详细讲解了4个有趣且具有代表性的案例,通过这部分内容读者将能掌握体感应用开发的流程与方法;高级篇(第18~19章)讲解了体感应用开发中会用到的多种高级功能,如运动捕捉和OpenNI Unity工具包等。
目录
前 言
第一部分 基础篇
第1章 自然人机交互 2
1.1 什么是自然交互 2
1.2 科幻电影场景的人机交互 3
1.3 自然人机交互技术发展现状 4
1.4 本章小结 8
第2章 Xtion硬件设备 9
2.1 Xtion设备简介 9
2.1.1 Xtion设备的类型 9
2.1.2 Xtion设备的功能 10
2.1.3 Xtion设备的规格 10
2.2 Xtion设备的优势 11
2.2.1 Xtion和Kinect的区别 11
2.2.2 硬件设备的软件支持 12
2.3 深度感应器原理 14
2.3.1 感应器架构 14
2.3.2 深度感应器工作原理 15
2.3.3 深度精确度分析 16
2.3.4 无法侦测物体深度 17
2.4 本章小结 19
第3章 OpenNI开发方案 20
3.1 初识OpenNI 20
3.1.1 OpenNI架构 20
3.1.2 OpenNI支持的模块 22
3.1.3 OpenNI的功能 23
3.1.4 OpenNI中的对象 24
3.1.5 OpenNI版本更新说明 25
3.2 OpenNI生产节点 27
3.2.1 生产节点的类型 28
3.2.2 生产节点概念图 28
3.2.3 生成和读取数据 30
3.2.4 OpenNI接口的配置 31
3.3 OpenNI应用 31
3.3.1 Xtion Controller应用 31
3.3.2 INOUT应用 31
3.3.3 Artec Studio应用 31
3.3.4 体感技术在初音未来上的应用 33
3.4 本章小结 33
第二部分 准备篇
第4章 Xtion开发准备工作 36
4.1 下载OpenNI及相应程式 36
4.1.1 下载SDK 36
4.1.2 下载Middleware 37
4.1.3 下载OpenNI以及相应的NITE 38
4.2 安装OpenNI 38
4.2.1 Windows环境下的准备工作 38
4.2.2 OpenNI档案及相关环境 39
4.2.3 加载设备驱动 40
4.2.4 检测Xtion设备 40
4.2.5 NiViewer基本控制方法 41
4.3 使用Xtion的注意事项 41
4.4 本章小结 42
第5章 搭建基础的Xtion体感开发环境 43
5.1 创建控制台工程 43
5.2 配置工程OpenNI环境 45
5.3 本章小结 49
第6章 初识Xtion体感开发 50
6.1 OpenNI基础应用 50
6.1.1 上下文对象初始化 50
6.1.2 创建生产节点 51
6.1.3 使用XML文档中的生产节点 52
6.1.4 错误信息返回 53
6.1.5 开始产生数据 54
6.1.6 停止产生数据 54
6.1.7 上下文对象资源释放 55
6.1.8 更新数据 55
6.1.9 镜像设置 56
6.1.10 图像位置校正 57
6.2 图生成器 58
6.2.1 获取支持图输出模式 58
6.2.2 图生成器输出模式 59
6.2.3 获取和设置图输出模式 59
6.2.4 获取图像素字节数 60
6.3 深度生成器 61
6.3.1 获取深度元数据对象 61
6.3.2 获取深度图 61
6.3.3 获取设备最大深度 62
6.3.4 获取设备视野范围 62
6.3.5 绝对坐标和相对坐标转换 63
6.3.6 获取用户位置功能 64
6.4 用户生成器 64
6.4.1 获取用户数量 65
6.4.2 获取用户 65
6.4.3 获取用户质心 66
6.4.4 获取用户像素 66
6.4.5 注册用户回调函数 67
6.4.6 获取骨架功能 68
6.4.7 获取姿势侦测功能 68
6.5 场景分析器 69
6.5.1 获取场景元数据对象 69
6.5.2 获取场景地板 69
6.5.3 获取场景标识段 70
6.6 图生成器的概念及功能 70
6.6.1 图元数据对象 71
6.6.2 输出模式设定 72
6.7 OpenNI程序流程 73
6.7.1 初始化Context 75
6.7.2 建立Production Node 75
6.7.3 开始产生资料 75
6.7.4 更新、读取资料 76
6.7.5 处理读取的资料 76
6.7.6 结束和错误侦测 76
6.8 本章小结 77
第三部分 进阶篇
第7章 人体骨架追踪 80
7.1 坐标系 80
7.1.1 绝对坐标 80
7.1.2 相对坐标 81
7.1.3 相对坐标和绝对坐标的转换 81
7.2 关节 82
7.2.1 OpenNI可侦测的关节点 82
7.2.2 读取关节资料函数 83
7.2.3 关节位置的平滑化 84
7.3 人体骨架追踪流程 85
7.3.1 需要特定姿势的骨架追踪 85
7.3.2 不需要特定姿势的骨架追踪 86
7.3.3 使用现有校正资料 87
7.4 人体骨架追踪程序搭建流程 87
7.4.1 创建并初始化设备上下文 88
7.4.2 创建并设定生产节点 88
7.4.3 注册回调函数 89
7.4.4 开始侦测数据 92
7.4.5 更新数据 92
7.4.6 得到用户信息 93
7.5 人体骨架识别范例 94
7.6 本章小结 97
第8章 手势识别与手部追踪 98
8.1 手势识别原理 99
8.1.1 OpenNI支持的手势 99
8.1.2 遍历NITE支持的手势 99
8.1.3 添加手势与回调函数 99
8.1.4 手势识别范例 102
8.2 NITE控制 104
8.2.1 NITE Control函数详解 104
8.2.2 NITE Control范例 106
8.3 手部追踪原理 110
8.3.1 手心生成器回调函数注册 110
8.3.2 手部追踪初始化 110
8.4 本章小结 111
第9章 录制与重播 112
9.1 录制 112
9.1.1 创建录制器 113
9.1.2 设置录制目标档案 113
9.1.3 获取录制目标档案 113
9.1.4 添加录制节点 114
9.1.5 删除录制节点 114
9.2 重播 115
9.2.1 设置重复播放 115
9.2.2 设置和获取播放源资料 115
9.2.3 设置重播起始时间 116
9.2.4 获取当前播放位置信息 117
9.2.5 检索播放器中的节点 118
9.2.6 判断是否播放结束 118
9.2.7 注册播放到结尾事件回调函数 118
9.2.8 设置回放速率 119
9.3 本章小结 119
第10章 限制生产节点的建立条件 120
10.1 有条件地建立生产节点 120
10.1.1 添加限制条件 121
10.1.2 设置限制条件 121
10.1.3 建立生产节点 121
10.2 通过限制条件列举符合条件的生产节点 122
10.3 根据节点信息建立生产节点 122
10.4 本章小结 123
第11章 使用XML文档初始化 124
11.1 XML文档设定参数 124
11.1.1 XML文档基本架构 124
11.1.2 XML文档中的节点 126
11.1.3 XML文档使用范例 127
11.2 使用XML文档配置功能 128
11.2.1 强制录制ONI文档的XML配置 128
11.2.2 资料产生 129
11.3 本章小结 129
第12章 声音数据的获取与使用 130
12.1 声音生成器 130
12.1.1 创建声音生成器 130
12.1.2 获取声音数据 131
12.1.3 设置声音设备的输出模式 132
12.1.4 注意事项 132
12.2 声音数据的处理 132
12.2.1 声音录制 133
12.2.2 声音播放 134
12.3 本章小结 136
第13章 彩色图像的获取和贴图 137
13.1 OpenNI框架支持的图像格式 137
13.2 图像生成器 138
13.2.1 创建图像生成器 138
13.2.2 获取图像数据 139
13.2.3 设置及获取图像生成器的输出格式 140
13.3 获取RGB影像及贴出RGB影像 141
13.4 本章小结 143
第四部分 实战篇
第14章 体感鼠标模拟 146
14.1 手部追踪与鼠标模拟 146
14.2 程序编写前的准备工作 146
14.2.1 环境准备 146
14.2.2 界面准备 149
14.2.3 鼠标相关参数配置准备 149
14.3 初始化 149
14.3.1 对话框初始化 150
14.3.2 载入ini文档中的配置 151
14.3.3 OpenNI程序环境初始化 151
14.4 程序设计 154
14.4.1 获取深度图 154
14.4.2 获取用户数据 155
14.4.3 鼠标左右手模式的选择及切换 156
14.4.4 滚轮控制放大和缩小 157
14.4.5 左手控制鼠标 158
14.4.6 右手控制鼠标 159
14.4.7 鼠标事件指令发送 161
14.4.8 悬停状态设计 163
14.5 本章小结 165
第15章 Xtion玩《街头霸王》 166
15.1 用身体控制游戏人物 166
15.1.1 人物基本操控动作 167
15.1.2 通用招式动作设计 167
15.1.3 游戏人物的特有招式设计 168
15.2 创建工程、配置工程环境 169
15.3 初始化 171
15.3.1 读取深度数据 172
15.3.2 处理深度数据 172
15.3.3 获取骨架 173
15.3.4 骨架数据的初步处理 174
15.4 Ken人物动作的表述 176
15.4.1 轻拳 176
15.4.2 跳起 178
15.4.3 波动拳 180
15.4.4 神龙拳 183
15.5 虚拟按键机制 186
15.6 本章小结 188
第16章 体感方向盘玩赛车类游戏 189
16.1 体感方向盘设计 189
16.1.1 操控方向盘基本动作 189
16.1.2 虚拟线性手柄模拟方向盘 189
16.2 体感方向盘程序开发初始化 191
16.2.1 环境初始化 191
16.2.2 虚拟手柄初始化 193
16.3 模拟方向盘操控 196
16.3.1 获取用户信息 196
16.3.2 左右方向的控制 197
16.3.3 油门与刹车 199
16.3.4 发送指令给虚拟线性手柄 200
16.4 本章小结 201
第17章 Xtion控制机器人 202
17.1 体感控制机器人需求分析 202
17.1.1 了解机器人构造 202
17.1.2 如何用身体操控机器人 203
17.1.3 机器人操控程序界面设计 203
17.2 初始化 204
17.2.1 界面初始化 204
17.2.2 体感追踪初始化 206
17.2.3 回调函数 207
17.3 控制机器人 207
17.3.1 连接机器人 207
17.3.2 发送指令 208
17.4 机器人程序代码实现 209
17.4.1 骨骼数据的初步获取 209
17.4.2 左肩的体感控制 211
17.4.3 大臂转动的控制 213
17.4.4 肘部角度计算 215
17.4.5 手部角度计算 215
17.4.6 小手臂转动 222
17.5 本章小结 222
第五部分 高级篇
第18章 BVH骨架转换 224
18.1 运动捕捉技术简介 224
18.1.1 典型的运动捕捉设备组成 225
18.1.2 传统捕捉技术 225
18.1.3 运动捕捉技术应用 228
18.1.4 运动捕捉技术优缺点 229
18.2 动作捕获数据 230
18.2.1 解析BVH文件 230
18.2.2 骨架结构 231
18.2.3 解读数据 232
18.3 旋转 233
18.3.1 基础2D旋转 233
18.3.2 3D坐标轴旋转 234
18.4 欧拉角 237
18.4.1 从欧拉角转换到矩阵 238
18.4.2 从矩阵转换到欧拉角 238
18.4.3 从骨架数据中提取欧拉角 239
18.5 本章小结 241