0
本文作者: AI研习社-译站 | 2018-08-24 10:44 |
本文为 AI 研习社编译的技术博客,原标题 Use your eyes and Deep Learning to command your computer — A.I. Odyssey part. 2,作者为 Julien Despois。
翻译 | 陶玉龙、老赵 校对 | Lamaric 审核 | Lamaric
你有没有过这样的经历,当你在吃东西的时候,发现自己没有多余的手来调节电影的音量,或者调节屏幕的亮度?在本文,我们将看到如何使用最先进的人工智能技术来解决这个问题,通过眼球运动把相应命令下达到你的计算机。
注:在你阅读完本文之后,我邀请你继续阅读那些后续专为实现细节而写的帖子(https://medium.com/@juliendespois/a-i-odyssey-part-2-implementation-details-f126f18bd320#.t4gpenon3)。
引言
我们想要实现什么
这个项目的目标是用我们的眼睛来触发计算机上的动作。这是一个非常综合的问题,所以我们首先需要明确我们想要实现的内容。
例如,我们可以检测眼睛什么时候朝向特定的角落,然后从那个角度进行工作。然而,这是非常有限的,并不是很灵活,加上它需要我们对角落组合。所以作为替代,我们使用递归神经网络来学习识别完整的眼球运动。
数据
我们不想使用外部数据集进行工作,作为替代的,我们自己制作数据集。我们在模型的训练和预测阶段用了相同的数据源以及处理方式,这对于我们这个项目而言具有非常大的益处。
毫无疑问,从我们的眼睛中提取信息的最有效的方法是使用专用的特写镜头。借助于这样的硬件,我们可以直接跟踪瞳孔中心,从而做出各种各样的令人惊叹的数据资料。
我不想使用外部相机,所以我决定使用我笔记本电脑破旧的720P摄像头。
工作流程
在我们直接进入技术讨论之前,让我们回顾一下这个过程的步骤。这里是我提出的流程:
用摄像头拍一张照片并找到眼睛。
对图像进行预处理并提取重要的特征(你是想说是利用神经网络来实现吗?)。
保持最后几帧特征提取的运行记录。
基于运行记录实现眼球动作的预测。
我们将使用管道法处理图像。
我们将通过本文下述步骤来实现,让我们开始吧!
获取眼睛图片
探测眼睛
直接通过摄像头,对图像降采样并将其转换为灰度图像(多颜色通道会产生大量冗余信息),这会使得接下来的操作更加快速,有助于模型实时运行。
对于探测,我们将使用 HAAR Cascades(Haar 基于特征的级联分类器)(http://docs.opencv.org/trunk/d7/d8b/tutorial_py_face_detection.html),因为它们快捷,通过简单调整,我们可以得到良好结果,但在直接探测眼睛时会导致许多误报。为了消除这些影响,我们在图像中检测人脸而不是眼睛,然后可以在人脸上找到眼睛。
一旦获得含有眼睛的边界框,我们可以从最初的全尺寸摄像头抓拍中提取图像,这样就不会丢失任何信息了。
预处理数据
一旦找到了双眼,我们就需要为我们的数据集处理它们。 要做到这一点,我们可以简单地将双眼重塑为固定正方形,24px 大小,并使用直方图归一化来消除阴影。
提取眼睛的步骤
然后我们可以直接使用标准化图片作为输入,但我们有机会做更多有用的工作。 我们计算当前帧和前一帧中眼睛之间的差异来代替使用眼睛图像。 这是一种非常有效的动作编码方式,这是我们最终需要的。
**注意除了下面的 GIF 之外的所有图表,我将使用眼睛图片来表示眼睛差异,因为屏幕上的差异看起来很糟糕。**
标准化帧与帧差异之间的比较
现在我们已经处理了双眼,我们可以选择将它们分别视为同一类的两个代表,或者将它们一起使用,就像它们是单个图像一样。 我选择后者,因为即使眼睛应该遵循完全相同的运动,两个输入都会使模型更加健壮。
*尽管如此,我们要做的还是比将图像拼接在一起更聪明一点。
把双眼合在一起
创建数据集
记录
我已经分别为两个单独的动作记录了 50 个样本(一个看起来像“gamma”,另一个看起来像“Z”)。 我试图改变样本的位置、比例和速度,以帮助模型的推广。 我还添加了 50 个“idle”的例子,其中包含大致一般的无图案的眼睛动作和静止帧。
动作示例 - 'gamma'、'mount'、'Z'、'idle'
不幸的是,150 个样本对于这样的任务来说很小,所以我们需要用新样本来扩充数据集。
数据扩充
我们可以做的第一件事就是修复任意序列长度—100 帧。从那里,我们可以减慢较短的样本,加快较长的样本。因为速度不能定义运动,所以这是可能的。
与此同时,因为在100帧的窗中可以随时检测到低于100帧的序列,我们可以增加填充示例。
用于滑动窗口填充低于100帧的样本。
通过这些技术,我们可以扩充数据集大约到 1000—2000 个示例。
最终数据集
......
想要继续阅读,请移步至我们的AI研习社社区:https://club.leiphone.com/page/TextTranslation/756
更多精彩内容尽在 AI 研习社。
不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。
雷锋网雷锋网(公众号:雷锋网(公众号:雷锋网))
雷峰网原创文章,未经授权禁止转载。详情见转载须知。