用深度学习技术,让你的眼睛可以控制电脑

家电
腾讯数码
2018年11月29日 09:02

本文为 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 研习社。

不同领域包括计算机视觉,语音语义,区块链,自动驾驶,数据挖掘,智能控制,编程语言等每日更新。

雷锋网雷锋网(:雷锋网(:雷锋网))

家电之家©部分网站内容来自网络,如有侵权请联系我们,立即删除!
眼睛 我们可以
你该读读这些:一周精选导览
更多内容...

TOP

More