基于跟踪注视点的眼跳反应时间和持续时间的最小二乘优化方法

saccademodel的Python项目详细描述


一种从被跟踪的注视点寻找扫视反应时间和扫视持续时间的最小二乘优化离线方法。

您已经跟踪了以下事件序列的注视点:

  1. 一个人看(a)点。图像出现在(b)处。
  2. 该人对图像作出反应,并开始将目光移向(b)。saccade开始。
  3. 凝视到达(b)。眼跳结束了。
  4. 那个人看了看(b)点。

现在您要确定:

  1. 事件1和事件2之间的时间,称为saccadic reaction timesrt
  2. 事件2和3之间的时间,称为saccade durationsd

saccademodel算法通过将理想的注视路径拟合到数据来计算时间。理想的凝视路径具有以下结构。从t=0到t=saccade_开始,理想的凝视正好在(a)点。从t=saccade_start到t=saccade_end理想的凝视以恒定的速度从(a)移动到(b)。从t=saccade_end到t=n,凝视停留在(b)。算法发现这样的时刻saccadesaccade使得理想注视路径和给定的跟踪注视点之间的均方误差最小化。换言之,该算法将数据分割为三个片段:源注视、眼跳和目标注视。

作为最大的优势,与基于速度的眼跳识别方法相比,数据不需要预先过滤,因为平方误差方法本身就可以做到这一点。即使过滤会产生较小的总平方误差,它也不会影响saccade_startsaccade_end的估计。但是,如果数据中的噪声是非平稳的,可能需要一些特殊的噪声滤波方法。

由于最大的缺点,因此saccademodel算法仅适用于脱机分析,因此不能用于实时设置。

一。安装

使用pip

$ pip install 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

  1. 创建未打包的sdist:$ python setup.py sdist
  2. C类创建一个通用轮:$ python setup.py bdist_wheel --universal
  3. 通过上载转到PyPI and register the project by filling the package formsaccademodel.egg-info/PKG_INFO文件。
  4. 用绳线上传包裹:
    1. 在距离上签名:$ gpg --detach-sign-adist/saccademodel-1.2.3*
    2. 上传:twine upload dist/saccademodel-1.2.3*(将询问您的pypi密码)
  5. 包已发布!

更新软件包的步骤与第三步相同。

5个。版本控制

Semantic Versioning 2.0.0

6.许可证

MIT License

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
http POST请求Java CouchDB   java删除带有大量尾随0的浮点字符串上的科学符号   JavaEE5和Hibernate   java如何在Spring Social中获得比特定id更早的tweet   java是框架。revalidate()在事件后获取输出是否重要?   java为什么不能返回通用映射?   java如何理解和优化工厂方法的高自时间   java Eclipse 202006错误由于项目的生成路径不完整,因此未生成该项目   多线程是java。util。向量序列化线程安全?   在Eclipse和java中使用不同的构建配置。属性文件   编译Java:从命令行运行的问题   java如何知道消息是否已确认/取消?   Java铸造一套   java Android Seekbar progress已更改变量,给出错误