基于跟踪注视点的眼跳反应时间和持续时间的最小二乘优化方法
saccademodel的Python项目详细描述
一种从被跟踪的注视点寻找扫视反应时间和扫视持续时间的最小二乘优化离线方法。
您已经跟踪了以下事件序列的注视点:
- 一个人看(a)点。图像出现在(b)处。
- 该人对图像作出反应,并开始将目光移向(b)。saccade开始。
- 凝视到达(b)。眼跳结束了。
- 那个人看了看(b)点。
现在您要确定:
- 事件1和事件2之间的时间,称为saccadic reaction time或srt。
- 事件2和3之间的时间,称为saccade duration或sd。
saccademodel算法通过将理想的注视路径拟合到数据来计算时间。理想的凝视路径具有以下结构。从t=0到t=saccade_开始,理想的凝视正好在(a)点。从t=saccade_start到t=saccade_end理想的凝视以恒定的速度从(a)移动到(b)。从t=saccade_end到t=n,凝视停留在(b)。算法发现这样的时刻saccade和saccade使得理想注视路径和给定的跟踪注视点之间的均方误差最小化。换言之,该算法将数据分割为三个片段:源注视、眼跳和目标注视。
作为最大的优势,与基于速度的眼跳识别方法相比,数据不需要预先过滤,因为平方误差方法本身就可以做到这一点。即使过滤会产生较小的总平方误差,它也不会影响saccade_start和saccade_end的估计。但是,如果数据中的噪声是非平稳的,可能需要一些特殊的噪声滤波方法。
由于最大的缺点,因此saccademodel算法仅适用于脱机分析,因此不能用于实时设置。
2.用法
彻底使用了数据结构pointlist。它是一个点列表,其中每个点都是一个列表[x,y]。
用法很简单:
>>> import saccademodel >>> rawdata = [ [130.012, 404.231], [129.234, 403.478], [None, None], [133.983, 450.044], ... ] >>> results = saccademodel.fit(rawdata) >>> print(results) { 'source_points': [[344.682, 200.115], ...], 'saccade_points': [[324.233, 202.393], ...], 'target_points': [[556.423, 112.607], ...], 'mean_squared_error': 0.000166802 }
注意,返回列表的长度可用于确定囊状反应的时间和持续时间。例如,给定刺激出现时的点,在source_points的长度中捕捉到扫视反应时间,在saccade_points中捕捉到扫视持续时间。如果帧速率已知,您可以通过以下方式将长度转换为秒:
>>> framerate = 300.0 # samples per second >>> saccadic_reaction_time = len(results.source_points) / framerate >>> saccade_duration = len(results.saccade_points) / framerate
三。API
3.1条。眼跳模型.fit(gazepointlist)
参数:
- gazepointlist:x,y点的列表,即列表的列表。
用以下键返回dict:
- 震源点:眼跳前的点
- 眼跳点:眼跳中的点
- 目标点:扫视后的点。
- 均方误差:点模型的均方误差。
3.2条。眼跳模型.版本
当前版本字符串:
>>> saccademodel.version '1.2.3'
四。对于开发人员
4.1条。virtualenv
使用virtualenv:
$ virtualenv -p python3.5 saccademodel-py $ cd saccademodel-py $ source bin/activate ... $ deactivate
4.2条。Jupyter笔记本
用法:
$ cd explore $ jupyter notebook
安装要求:
$ pip install --editable .[notebook]
4.3条。测试
按照instructions to install pyenv操作,然后运行快速测试:
$ python3.5 setup.py test
或者在tox.ini:
中对多个python版本进行全面测试$ pyenv local 2.6.9 2.7.10 3.1.5 3.2.6 3.3.6 3.4.3 3.5.0 $ eval "$(pyenv init -)" $ pyenv rehash $ tox
通过以下方式安装新的pyenv环境:
$ pyenv install 3.4.5
在http://rst.ninjs.org/处验证readme.rst
4.4条。发布到pypi
跟随python packaging instructions:
- 创建未打包的sdist:$ python setup.py sdist
- C类创建一个通用轮:$ python setup.py bdist_wheel --universal
- 通过上载转到PyPI and register the project by filling the package formsaccademodel.egg-info/PKG_INFO文件。
- 用绳线上传包裹:
- 在距离上签名:$ gpg --detach-sign-adist/saccademodel-1.2.3*
- 上传:twine upload dist/saccademodel-1.2.3*(将询问您的pypi密码)
- 包已发布!
更新软件包的步骤与第三步相同。