第一部分 准备篇 2
引言 从科幻电影谈起 2
第1章 自然人机交互技术漫谈 10
1.1自然人机交互技术的发展 10
1.1.1第六感设备:技术的组合创新 10
1.1.2追影技术:摄像头也疯狂 12
1.1.3虚拟现实:真实的体验场景 13
1.1.4增强现实:真实与虚拟的叠加 14
1.1.5多点触摸:信息就在指尖 15
1.1.6语音识别:从ViaVoice到Siri 16
1.1.7眼球跟踪:从霍金的座椅谈起 17
1.1.8人脸识别:Photo DNA 19
1.1.9体感操作:达·芬奇手术机器人 20
1.1.10脑机界面:霍金座待的升级版 20
1.2“你就是控制器”——Kinect宣言 21
1.2.1 Kinect销售记录及命名来历 21
1.2.2未来照进现实 22
第二部分 原理篇 26
第2章 揭开Kinect的神秘面纱——硬件设备解剖 26
2.1两款Kinect传感器对比 26
2.2 Kinect传感器的硬件组成 28
2.2.1 Kinect的“心脏”——PS 1080 SoC 30
2.2.2 Kinect的“三只眼”——投影机和两个摄像头 32
2.2.3 Kinect的“四只耳朵”——麦克风阵列 34
2.2.4会摇摆的“相控雷达”——传动马达 35
2.2.5姿态控制——三轴加速度计 36
2.2.6 USB接口及电源 37
2.2.7 Kinect风扇控制 38
2.3 Kinect相关技术规格 38
2.3.1 Kinect近景模式 39
2.3.2 Kinect放大镜 40
2.4本章小结 40
第3章Kinect工作原理大揭秘 41
3.1 Kinect for Xbox 360的产品设计 42
3.2基于“管道”的系统架构 43
3.2.1骨骼跟踪 45
3.2.2动作识别 46
3.2.3人脸识别 48
3.2.4语音识别 49
3.3 Kinect眼里的三维世界 50
3.3.1深度数据是Kinect的精髓 51
3.3.2 2D视觉与3D视觉 55
3.4深度图像成像原理 56
3.4.1 ToF光学测距与结构光测量 56
3.4.2 Light Coding技术 57
3.4.3激光散斑原理 58
3.4.4光源标定 59
3.5从深度图像到骨骼图 60
3.5.1动静分离,识别人体 60
3.5.2人体部位分类 62
3.5.3从人体部位识别关节 63
3.5.4会“机器学习”的“Kinect大脑” 65
3.5.5骨骼跟踪的精度和效率 68
3.6创建你的Avatar 70
3.6.1“有骨有肉” 70
3.6.2泊松方程噪声滤除 70
3.6.3粗糙变平滑、缺陷自动补齐 71
3.7本章小结 71
第三部分 基础篇 74
第4章Kinect for Windows SDK导读 74
4.1什么是Kinect SDK 74
4.1.1 Kinect SDK的发展历程 74
4.1.2 SDK v1.5的新特性 75
4.1.3 SDK v1.5尚未提供的API 76
4.1.4从底层进行封装 76
4.2 Kinect for Windows体系架构 78
4.3应用层API详解 80
4.3.1 Kinect的核心NUI API 80
4.3.2 Kinect Audio DMO 82
4.3.3 Windows Speech SDK 83
4.4数据流概述 84
4.4.1彩色图像数据 84
4.4.2用户分割数据 85
4.4.3深度图像数据 86
4.4.4如何获取数据流 87
4.5骨骼跟踪 89
4.5.1骨骼信息检索 90
4.5.2主动跟踪和被动跟踪 90
4.5.3骨骼跟踪对象选择 91
4.6 NUI坐标转换 92
4.6.1深度图像空间坐标 93
4.6.2骨骼空间坐标 93
4.6.3坐标变换 93
4.6.4传感器阵列和倾斜补偿 95
4.6.5地面测量 95
4.6.6骨骼镜像 95
4.7本章小结 96
第5章Kinect用户交互设计的若干思考 97
5.1 Xbox 360 Kinect Hub界面和Metro风格 97
5.1.1什么是Metro风格 97
5.1.2 Kinect Hub手势原型设计 98
5.1.3“悬停选择”和“翻页控制” 99
5.2体感游戏的优势及局限性 100
5.2.1更多的自由度 101
5.2.2关节点重叠的处理办法 102
5.2.3情感因素和心理暗示 102
5.2.4 Kinect体感操作的局限性及对策 103
5.3用户交互的趋势和新特性 104
5.3.1 Kinect使交互“柔软化” 105
5.3.2用户交互设计也可能是一项专利 106
5.4 Kinect“体感操作”交互设计的七条军规 106
5.4.1控制手势集符合人类自然手势 107
5.4.2让用户的肢体移动幅度尽可能小 107
5.4.3操作界面的对象采用Metro风格 109
5.4.4“确认操作”保持简单、一致 109
5.4.5手势操作尽可能在同一个平面内 110
5.4.6从三维的视角去看交互设计 110
5.4.7配有简单明了的手势说明 111
5.5本章小结 112
第四部分 开发篇 114
第6章 开发前的准备工作 114
6.1开发Kinect应用所需的技能 114
6.2系统要求 115
6.3下载和安装Kinect SDK 116
6.3.1 Kinect for Windows SDK v1.5 118
6.3.2 Developer Toolkit 118
6.3.3 Kinect快速开发工具箱 119
6.3.4 XNA开发环境 119
6.4加载驱动、检验及测试 120
6.5配置开发环境 122
6.6要点和故障排除 122
6.7本章小结 123
第7章Hello,Kinect! 124
7.1一行代码的“Hello,Kinect!” 124
7.1.1创建WPF工程 124
7.1.2添加KinectDiagnosticViewer控件 126
7.1.3编写一行代码 127
7.1.4编译运行 127
7.2控制台界面HelloKinectMatrix 128
7.2.1创建Console工程 128
7.2.2编写代码 129
7.2.3运行效果 130
7.3 KinectContrib快速工程模板 130
7.4 KinectWpfViewers工具控件 131
7.5本章小结 132
第8章Kinect开发循序渐进 133
8.1一个简单的编程模型 133
8.1.1初始化、启用Kinect设备 134
8.1.2彩色图像流事件处理 136
8.1.3深度数据捕获 138
8.1.4骨骼跟踪 141
8.1.5关闭Kinect设备 145
8.1.6 Kinect设备状态管理及异常处理 145
8.2更专业的深度图 146
8.2.1改进转换方法 146
8.2.2事件处理 148
8.3控制Kinect仰角 148
8.3.1“你的塑身”游戏 149
8.3.2垂直调整Kinect仰角 150
8.4本章小结 151
第9章Kinect深度数据测量技术及应用 152
9.1什么是Kinect视角场 152
9.2深度值与实际距离的对比 153
9.3深度图像的直方图 155
9.3.1直方图统计信息的价值 156
9.3.2深度图像直方图的意义 158
9.4 Kinect深度数据测量的应用 159
9.4.1近景模式:自动锁屏工具 159
9.4.2 Kinect视角场几何推导:测量人体身高 163
9.4.3近距离探测:制作地形电子沙盘 169
9.5本章小结 170
第五部分 实例篇 172
第10章用Kinect表演“变脸” 172
10.1在人的面部变换脸谱 172
10.2代码实现 173
10.2.1 WPF工程、控件及初始化 173
10.2.2骨骼跟踪 176
10.2.3变脸及坐标变换 178
10.3合理暂停骨骼跟踪 181
10.4道具平滑跟随 181
10.5调整幕布大小 183
10.6练习作业 184
第11章用Kinect唤起“红白机”的回忆 185
11.1用身体控制马里奥 185
11.2代码实现 185
11.2.1 WPF工程、控件及初始化 185
11.2.2模拟键盘输入工具类 188
11.2.3肢体语言映射到键盘事件 192
11.3副产品:PPT演示“空手道” 193
11.4练习作业 195
第12章用Kinect玩PC版的《水果忍者》 197
12.1空气鼠标设计思路 197
12.1.1找到离Kinect最近的那个人 198
12.1.2兼容左手习惯和右手习惯 199
12.1.3从骨骼坐标系到鼠标坐标系 199
12.1.4模拟鼠标工具类 200
12.1.5让“空气鼠标”移动自如 202
12.1.6模拟鼠标左键事件 203
12.2在PC中用Kinect玩《水果忍者》 203
12.2.1核心代码示例 203
12.2.2如何双手挥刀 206
12.3更多游戏:《割绳子》 206
12.4练习作业 207
第13章 创建你的Kinect Hub Demo界面 208
13.1 Metro风格界面设计 208
13.2使用Kinect骨骼跟踪 209
13.3使用Coding4Fun Kinect Toolkit开发加速器 210
13.4悬停选择 210
13.5本章小结 213
第14章用Kinect导播天气预报 214
14.1天气预报是这样炼成的 214
14.1.1绘制幕布,定义前景图片 214
14.1.2对象定义及初始化 215
14.1.3实现“画中画”效果 216
14.2一些优化的话题 219
14.2.1使用Using及时回收资源 219
14.2.2使用WriteableBitmap优化图片显示性能 219
14.2.3多线程和“轮询模型” 220
14.2.4使用中值滤波边缘去噪 220
14.3 Kinect语音导播切换 221
14.3.1引用Microsoft.Speech命名空间 221
14.3.2音频数据流和语音识别引擎 221
14.3.3语音识别事件 223
14.4本章小结 224
第15章 基于Kinect的家庭监控系统 225
15.1通过Kinect进行目标探测 225
15.2使用计算机视觉库 226
15.2.1 Open CV程序库 226
15.2.2 Emgu CV引用 226
15.2.3保存快照 227
15.2.4录制视频 227
15.3目标人体探测和影像录制 228
15.4扩展功能和更多应用场景 231
15.5本章小结 231
第16章“Kinect牌”梦境录音笔 232
16.1 Kinect音频采集 232
16.1.1使用音频数据流 232
16.1.2“波束跟踪”信心值的另类用法 233
16.2音频录制 233
16.2.1 WAV文件 233
16.2.2 WAVEFORMATEX结构体 234
16.2.3梦境录音笔的实现 234
16.3练习作业 240
第六部分 进阶篇 242
第17章 再谈姿态识别和手势识别 242
17.1姿态和手势 242
17.2动作与算法 243
17.2.1如何设定动作集合 243
17.2.2借鉴正则表达式和状态机 244
17.2.3转换为几何三角问题 245
17.3常见手势识别 245
17.3.1挥手激活 245
17.3.2悬停按钮 246
17.3.3磁石悬停 247
17.3.4划动手势 247
17.3.5滑动解锁 248
17.3.6推按钮 249
17.3.7通用暂停 249
17.4工具介绍 250
17.4.1动作录制和识别GesturePak 250
17.4.2手和手指的“空气多点触摸” 251
17.5本章小结 253
第18章Kinect在手术室的应用原型 254
18.1原型设计 254
18.2交互设计 255
18.2.1“悬停选择”进行功能导航 255
18.2.2“空气鼠标”的激活和隐藏 256
18.2.3通过“划动”手势翻阅医学影像 257
18.2.4放大、缩小医学影像病灶部位 257
18.2.5“垂直摆动”翻阅病历 258
18.2.6体感操作结合语音控制 258
18.3体感操作的实现 259
18.3.1基于SwipeGestureRecognizer 259
18.3.2基于单个部位运动序列的轨迹分析匹配 262
18.3.3基于多个部位姿态快照的状态机匹配 266
18.4利用SDK v1.5的新特性 280
18.4.1近景模式下的上半身骨骼跟踪 280
18.4.2利用关节点朝向信息进行手势识别和三维操作 280
18.4.3人脸识别用于手术登录验证 283
18.4.4调试工具Kinect Studio 283
18.5本章小结 284
第19章Hello,Kinect 3D World! 285
19.1点、面、云 285
19.1.1像素和彩色图像帧 285
19.1.2深度图像帧和点云 285
19.1.3多Kinect设备的接入 286
19.2 Kinect体感应用开发工具简介 287
19.2.1软件开发平台XNA 287
19.2.2游戏引擎Unity 3D 288
19.2.3 3D场景重建工具ReconstructMe 289
19.3本章小结 289
第七部分 展望篇 292
第20章 奇思妙想——Kinect效应 292
20.1四旋翼飞行器的“导航雷达” 292
20.2宠物看护机器人 292
20.3空气吉他 293
20.4倒车雷达系统 294
20.5 Kinect购物车 294
20.6魔术道具 295
20.7本章小结 295
第21章Kinect企业级应用 296
21.1思维导图 296
21.2体感操作应用 297
21.2.1手术室 297
21.2.2体育运动竞技研究 297
21.2.3动作捕捉、CG动画制作 298
21.2.4虚拟试衣镜 298
21.2.5课堂 299
21.2.6虚拟汽车展厅 299
21.2.7管理你的银行账户 300
21.2.8聋哑人的同声翻译 300
21.3深度数据应用 301
21.3.1老年人监护 301
21.3.2康复训练 301
21.3.3家庭监控系统 302
21.3.4道路交通稽查 302
21.3.5冰川消融研究 303
21.3.6给宇航员称体重 304
21.4实物3D建模应用 304
21.4.1实物3D数字化 304
21.4.2文物3D模型“数字敦煌”计划 305
21.4.3 3D扫描和打印 306
21.5机器人视觉与控制 306
21.5.1地震搜救机器人 307
21.5.2深海探测机器人 307
21.5.3工程机械臂控制 307
21.6本章小结 308
第22章 下一代人机交互技术 309
22.1下一代Kinect技术若干猜想 309
22.2未来惊鸿一瞥 310
第八部分 附录 312
附录A Kinect SDK命名空间速查手册 312
附录B推荐阅读及网络资源 328
后记 338
参考资料 339