人工智能学习

记一次应用神经网络进行眼球追踪设想的失败实现

本文主要是介绍记一次应用神经网络进行眼球追踪设想的失败实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

本文首发于我的博客huanghaozi.cn原链接

想法的产生

最近总康到一些眼球追踪仪的评测视频,可以直接用人眼当鼠标,可是一上网搜这玩意儿的价格,发现都是上千的,于是就想着自己的电脑摄像头能不能实现这个功能,在网上搜索了一番后,只搜到了一个Lookie Lookie的repo能实现这个功能,尝试了一下赶脚不太精准,于是产生了写程序的邪恶念头

思路

首先要让摄像头定位到眼睛,那就需要人脸的检测模型,用现成的轮子是最为省事的方法。在全球最大的同性恋网站搜索实践了一番后,发现TadasBaltrusaitis的OpenFace检测最为精准(注意不是cmusatyalab的,链接) 不过这个项目是用C++写的,为了建神经网络方便,我还是准备用Python**(程序对接就成了一大难题)** 获取了人脸、眼睛数据后,还需要获取输出部分的原始数据以进行训练。这里我参考前文提到的Lookie Lookie,使用鼠标的坐标作为输出数据,通过鼠标点击进行数据的采集,这样在进行模型训练的时候就得眼睛盯着鼠标的坐标点击左键 因为需要一边进行数据的采集,一边进行神经网络的训练,所以我使用了PyTorch模块建立神经网络模型

人脸数据采集

在查阅了TadasBaltrusaitis的OpenFace的wiki后,我基本确定了在python中使用这个程序的思路。 首先,此程序可以使用命令进行单帧图像的数据采集,命令格式很简单,只需要确定输入图片以及输出路径即可。结合Python的cv2模块和subprocess模块,我编写了一个将摄像头图像保存,再使用openface进行处理输出数据,完毕后再使用python将输出的csv数据文件进行读取,并保存至全局变量data中。 在此之后我又仔细阅读了openface的wiki,弄懂了csv数据文件的各个部分,又写了筛数据、归一化的函数。 程序对接、人脸数据采集问题就此解决

鼠标点击坐标数据采集

这一部分相对较为简单,我使用了pywin32、PyHook3模块进行鼠标点击事件的监听以及坐标数据的获取。

神经网络模型建立及训练

这一部分我将归一化、预处理后的data作为输入,鼠标点击坐标作为输出,建立了一个BP神经网络,使用的是Relu激活函数,我整了六层,输入层有17个节点,隐含层有20个节点,输出层就是辣两个坐标。 每点击一次鼠标即进行一次训练,会输出模型预测的坐标和真实的坐标,已衡量模型的优劣

结果

结果GG了,训练时模型的输出几乎就是我历史点击坐标的平均值,起初我觉得是激活函数问题,在进行过几次更换之后还是不行

本篇文章由一文多发平台ArtiPub自动发布

这篇关于记一次应用神经网络进行眼球追踪设想的失败实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!