Return to Video

12.1: What is the Kinect? - Kinect and Processing Tutorial

  • 0:01 - 0:06
    大家伙,这个视频是我正在制作的关于Microsoft Kinect系列视频的第一集
  • 0:06 - 0:07
    当当当
  • 0:07 - 0:08
    就是这玩意儿 哈哈哈
  • 0:08 - 0:10
    所以这是个什么东西呢
  • 0:10 - 0:10
    他是怎么工作的
  • 0:10 - 0:13
    如何能使用它写出你自己的程序
  • 0:13 - 0:15
    如何能制作一系列各式各样有趣的玩意儿
  • 0:16 - 0:20
    现在,有很多的编程语言,编译环境,框架,库
  • 0:20 - 0:22
    来帮你实现Kinect的运用
  • 0:22 - 0:25
    我现在要做的就是使用这个叫Processing的玩意儿
  • 0:25 - 0:28
    使用的这个版本是Processing 3 算起来是第三个代的Processing吧
  • 0:28 - 0:31
    这是一个基于java的编译环境
  • 0:31 - 0:32
    一个非常开放的环境
  • 0:33 - 0:35
    它有着各种各样相关的函数库
  • 0:35 - 0:39
    最后我希望能够制作一个视频是关于P5.js的
  • 0:39 - 0:44
    这是一个可以在浏览器中编译创意代码的JavaScript框架
  • 0:44 - 0:48
    你也可以通过它从Kinect中得到需要的数据
  • 0:48 - 0:51
    搞明白这个叫Kinect的玩意儿在浏览器中又是什么
  • 0:51 - 0:53
    我想也是一件有意思的事情
  • 0:53 - 0:56
    但是!在这第一期视频中,我并不想讲这些
  • 0:56 - 0:58
    我们将在下一期视频中深入探讨接触代码
  • 0:58 - 0:59
    而我在这期视频中想做的
  • 0:59 - 1:00
    是给大家做一个概述
  • 1:00 - 1:02
    所以我今天将会给大家讲到的是
  • 1:02 - 1:04
    不同版本的Kinect之间的差别
  • 1:04 - 1:06
    因为你能买到一大堆不同型号的Kinect
  • 1:06 - 1:08
    又不知道哪一款是你需要的
  • 1:08 - 1:10
    也不知道怎样能获得相应的库来调用Kinect
  • 1:10 - 1:11
    这些都是我们要面对的问题
  • 1:11 - 1:12
    你可以看到我身后
  • 1:12 - 1:13
    运行的是一个最基本的范例程序
  • 1:13 - 1:15
    这是一个基于Kinect V2的程序
  • 1:15 - 1:18
    所以,我将从讲解这段代码开始今天的视频
  • 1:18 - 1:19
    所以
  • 1:19 - 1:20
    让我们先来看一下
  • 1:20 - 1:22
    不同型号的Kinect
  • 1:22 - 1:23
    诶嘿,我手里的这台
  • 1:23 - 1:24
    没错 就是这台
  • 1:24 - 1:25
    我需要拿掉我的眼镜看一下
  • 1:26 - 1:29
    这一台的型号是1414
  • 1:29 - 1:31
    这一台是。。。。。
  • 1:31 - 1:32
    额 我需要走到这边来
  • 1:32 - 1:34
    噢 我还得试着不让线绊倒自己
  • 1:34 - 1:34
    额。。。
  • 1:34 - 1:36
    (即将消失 马上回来)
  • 1:36 - 1:38
    额 我还得来拿一下这个叫什么来着。。。白板擦
  • 1:38 - 1:39
    等我几秒 马上回来
  • 1:39 - 1:40
    额么~~~~
  • 1:40 - 1:42
    让我们在这儿来列一张表
  • 1:42 - 1:43
    首先
  • 1:43 - 1:45
    你要确定的两个重要的信息是
  • 1:45 - 1:49
    你正在使用的是kinect一代
  • 1:49 - 1:53
    还是kinect二代
  • 1:53 - 1:54
    啊~~~~~
  • 1:54 - 1:57
    可能我在这里会犯很多的小错误
  • 1:57 - 1:58
    还希望你们能够帮忙指正
  • 1:58 - 2:01
    我也会在YouTube上注释并修复他们
  • 2:01 - 2:02
    当然 我希望他们尽可能都是正确的
  • 2:02 - 2:03
    OK 所以呢
  • 2:03 - 2:05
    最早期的Kinect V1
  • 2:05 - 2:07
    型号是1414
  • 2:07 - 2:08
    如果我没记错的话
  • 2:08 - 2:10
    是在2011年12月发布的或者2012年发布的
  • 2:10 - 2:13
    大概是在那个时间吧 我是记不清了
  • 2:13 - 2:14
    我只记得Kinect发布的那个周末
  • 2:14 - 2:15
    人们都迫切的想要破解它
  • 2:15 - 2:19
    但是我现在要做的,只是使用开源的驱动
  • 2:19 - 2:21
    来读取Kinect的数据
  • 2:21 - 2:25
    只需要让你的电脑和硬件实现通讯即可
  • 2:25 - 2:26
    额~~~~
  • 2:26 - 2:28
    当kinect一代出来的时候
  • 2:28 - 2:30
    我写了一个库,一直在为这个库而努力
  • 2:30 - 2:35
    这个库叫Open Kinect for Processing
  • 2:35 - 2:38
    那为什么这个库要叫Open Kinect呢
  • 2:38 - 2:39
    是因为
  • 2:39 - 2:46
    它使用了开源的Kinect驱动
  • 2:46 - 2:53
    这就是被人们熟知的libfreenet
  • 2:53 - 2:56
    所以,这才是所有我所做的这些的起源
  • 2:56 - 2:58
    而我为Processing所做的一切
  • 2:58 - 3:02
    仅仅是在许许多多人贡献的基础上很微不足道的一层
  • 3:02 - 3:05
    这让我们能够从Kinect获取数据
  • 3:05 - 3:05
    好了 现在
  • 3:05 - 3:07
    让我们回到Kinect上来
  • 3:07 - 3:08
    喔~~它在这里
  • 3:08 - 3:10
    现在让我们来讲讲kinect
  • 3:10 - 3:12
    我手上拿的这台
  • 3:12 - 3:13
    就是最早版本的Kinect
  • 3:13 - 3:15
    你可以看到这里
  • 3:15 - 3:17
    在这上面有三个小孔
  • 3:17 - 3:21
    就像一个有着三个眼睛的新朋友
  • 3:21 - 3:23
    那么 这三个眼睛分别是起什么作用的呢
  • 3:25 - 3:30
    oh 天哪 我的相机 糟糕透了
  • 3:30 - 3:32
    好的 我刚刚讲到哪儿了
  • 3:32 - 3:35
    好的 这就是一台Kinect
  • 3:35 - 3:38
    它有着三个小眼睛
  • 3:38 - 3:43
    其中一个是红外投影仪
  • 3:44 - 3:46
    这个是我们所讲的1414所拥有的
  • 3:46 - 3:50
    将会讲述一下如果你使用的是Kinect V2
  • 3:50 - 3:53
    它的工作原理将会有什么区别
  • 3:54 - 3:54
    咳咳~~
  • 3:54 - 3:56
    它拥有一个红外投影仪
  • 3:56 - 3:58
    向房间内发射红外光
  • 3:59 - 3:59
    然后
  • 4:00 - 4:03
    它有一个传感器 也可以叫做相机
  • 4:03 - 4:05
    其实是一个红外摄像头
  • 4:05 - 4:09
    来读取房间内的红外反射光
  • 4:09 - 4:10
    那什么是红外光呢
  • 4:10 - 4:11
    它其实就在我们的身边
  • 4:11 - 4:12
    但它是不可见的光
  • 4:12 - 4:15
    或许那些拥有物理学硕士学位的人可以解释得更好
  • 4:15 - 4:19
    这个红外摄像头读取的是四射的红外光
  • 4:19 - 4:22
    所以这么做的重要性是什么呢
  • 4:22 - 4:23
    有趣的事情是
  • 4:23 - 4:28
    投影出来的其实是无数个红外散斑
  • 4:28 - 4:31
    红外投影仪向房间内投射出无数个红外散斑
  • 4:31 - 4:32
    就像这样子
  • 4:32 - 4:35
    这是一种非常特别的光斑
  • 4:36 - 4:39
    Kinect自己知道这些光斑应该是什么样的
  • 4:39 - 4:41
    所以如果说这些光斑。。。。
  • 4:41 - 4:43
    额 如果我这里有一台Kinect
  • 4:43 - 4:44
    它投射出红外光
  • 4:44 - 4:46
    落在一个平面上
  • 4:46 - 4:48
    红外摄像头会通过识别这些光斑的反射光
  • 4:48 - 4:51
    来确定它们的落点
  • 4:51 - 4:55
    如果说 这些光斑与已知的光斑模式极其一致
  • 4:55 - 4:57
    那 这就是一个平面
  • 4:57 - 4:59
    不过 如果这个面是弯曲的
  • 4:59 - 5:01
    这些光斑就会弯曲
  • 5:01 - 5:02
    Kinect通过分析这些变形
  • 5:02 - 5:06
    就可以分辨出 哪些东西距离较近
  • 5:06 - 5:08
    哪些东西较远
  • 5:08 - 5:10
    所以 这项技术的重要性就是
  • 5:10 - 5:13
    你可以把它看作是一个深度相机
  • 5:13 - 5:14
    或者说是一个深度传感器
  • 5:14 - 5:17
    这就是红外投影仪和红外摄像机所做的事情
  • 5:17 - 5:22
    他们会检测房间内每一个像素点的深度信息
  • 5:22 - 5:24
    但如果是一个普通的网络摄像头
  • 5:24 - 5:26
    它会给你一个640x480的图像
  • 5:26 - 5:29
    每一个像素点都会有红、绿、蓝三个值
  • 5:29 - 5:33
    多美呀! 就像这幅图片里的彩虹
  • 5:34 - 5:35
    但是 Kinect会说
  • 5:35 - 5:38
    我没有看到RGB色彩图像
  • 5:38 - 5:40
    我看到的是一个个像素点
  • 5:40 - 5:42
    并且我不会告诉你每个像素点是什么颜色的
  • 5:42 - 5:46
    我会告诉你我看到的像素点与传感器之间的距离
  • 5:46 - 5:48
    这在计算机视觉中具有无可厚非的重要性
  • 5:48 - 5:52
    要知道传统计算机视存在着一个人们一直想解决的问题
  • 5:52 - 5:54
    这个问题就是 排除背景
  • 5:54 - 5:56
    这就是为什么我要使用这块绿幕
  • 5:56 - 5:58
    oh 我不得不蹲下去一下
  • 5:58 - 5:59
    OK~~
  • 5:59 - 6:01
    在我办公室里行动有些障碍
  • 6:01 - 6:03
    我需要重新打开我这个相机
  • 6:03 - 6:05
    啊 我回来了 各位
  • 6:05 - 6:09
    在我身后就是这块绿幕
  • 6:09 - 6:10
    大家可以看到
  • 6:11 - 6:14
    所以相机会去除每一个绿色的像素点
  • 6:14 - 6:16
    然后在电脑上替换这些像素点
  • 6:16 - 6:18
    但是 如果我有一台Kinect
  • 6:18 - 6:20
    我不需要让相机寻找我身后这些绿色的像素点
  • 6:20 - 6:24
    我只需要让它寻找任何一个距离传感器2尺以外的像素点
  • 6:24 - 6:27
    或者用厘米来说是。。。
  • 6:28 - 6:30
    啊~~我也想试着使用米制来说
  • 6:30 - 6:31
    我也想用 米 这个度量标准
  • 6:31 - 6:32
    但很显然 我还做不到诶
  • 6:33 - 6:35
    所以说 你可以很容易的去除背景
  • 6:35 - 6:39
    你可以很简单的在房间里寻找到人
  • 6:39 - 6:41
    因为人都有一个特定的外形
  • 6:41 - 6:44
    这使得3D扫描成为一件非常快捷简单的事情
  • 6:44 - 6:46
    一单你能够采集深度信息
  • 6:46 - 6:48
    你就拥有了许许多多的可能性 来实现你的想法
  • 6:48 - 6:51
    好了 现在让我们来看一下这第三颗眼睛
  • 6:51 - 6:52
    这一颗
  • 6:52 - 6:55
    仅仅是一颗RGB摄像头
  • 6:55 - 6:55
    所以说
  • 6:55 - 7:00
    Kinect也可以识别房间内的色彩
  • 7:00 - 7:03
    所以,除了红外摄像头之外,它也拥有一个RGB摄像头
  • 7:03 - 7:05
    那么问题来了!
  • 7:06 - 7:07
    大家注意到
  • 7:07 - 7:11
    这两个摄像头并不在同一位置
  • 7:12 - 7:13
    所以说
  • 7:13 - 7:15
    红外摄像头在一个不同的位置
  • 7:15 - 7:18
    接收像素的深度信息
  • 7:18 - 7:20
    这与RGB摄像头看到的彩色图像不一致
  • 7:20 - 7:20
    所以
  • 7:20 - 7:21
    就涉及到了一个视觉对准的问题
  • 7:21 - 7:23
    以及视觉差异的校准
  • 7:23 - 7:27
    这造成彩色像素点并不能与深度信息做到完全一致的匹配
  • 7:28 - 7:30
    所以 这其中有着很多的奥秘
  • 7:30 - 7:31
    来解决这个问题
  • 7:32 - 7:34
    有很多的程序框架结构 和 库
  • 7:34 - 7:37
    尤其是官方的Microsoft SDK
  • 7:37 - 7:40
    已经在底层为你做好了这一切
  • 7:40 - 7:42
    但是好的事情是
  • 7:42 - 7:47
    Kinect V2拥有一种叫Registered image的图像
  • 7:48 - 7:52
    他可以使深度像素信息与彩色像素信息排列整合到一起
  • 7:52 - 7:54
    OK 这就是Kinect所做的事情
  • 7:54 - 7:58
    我已经在这里介绍了Kinect V1
  • 7:59 - 8:02
    当然这一代kinect还有一款型号是1473的
  • 8:02 - 8:04
    大概是在第一款发布后的一两年后推出的
  • 8:05 - 8:11
    而这一款在Processing上运行时 会有一些小BUG
Title:
12.1: What is the Kinect? - Kinect and Processing Tutorial
Description:

more » « less
Video Language:
English
Duration:
16:34

Chinese, Simplified subtitles

Incomplete

Revisions