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:03OK 所以呢
-
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:30oh 天哪 我的相机 糟糕透了
-
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:39Kinect自己知道这些光斑应该是什么样的
-
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:02Kinect通过分析这些变形
-
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:58oh 我不得不蹲下去一下
-
5:58 - 5:59OK~~
-
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:00Kinect也可以识别房间内的色彩
-
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:47Kinect V2拥有一种叫Registered image的图像
-
7:48 - 7:52他可以使深度像素信息与彩色像素信息排列整合到一起
-
7:52 - 7:54OK 这就是Kinect所做的事情
-
7:54 - 7:58我已经在这里介绍了Kinect V1
-
7:59 - 8:02当然这一代kinect还有一款型号是1473的
-
8:02 - 8:04大概是在第一款发布后的一两年后推出的
-
8:05 - 8:11而这一款在Processing上运行时 会有一些小BUG
Show all