EyeLoop基于Python的眼动仪(超棒)

https://github.com/simonarvin/eyeloop

这个开源的眼动仪是我最喜欢的,是我主要读的一份源码:

首先是漂亮的眼动示意图

特点

  • 在非专用硬件上高速> 1000 Hz(无需专用处理单元)。

  • 模块化,可读性,可定制性。

  • 开源,完全是Python 3。

  • 可在任何平台上使用,易于安装。

它是如何运行的

EyeLoop由两个功能模块组成:引擎和可选模块。引擎执行眼动追踪,而模块执行可选任务,例如:

  • 实验

  • 数据采集

  • 将视频序列导入引擎

这些模块从引擎导入或提取数据,因此分别称为ImportersExtractors

EyeLoop最吸引人的功能之一是其模块化:通过将模块与核心引擎结合在一起,即可轻松建立实验。因此,引擎只有一项任务:根据导入的序列计算眼动数据,并提供生成的数据以进行提取

引擎

引擎按照视频流顺序处理视频的每一帧。首先,用户选择角膜反射,然后选择瞳孔。通过高斯核对帧进行二值化,滤波和平滑处理。然后,引擎利用算法检测轮廓。这将产生一个点矩阵,将其过滤以丢弃不匹配项。使用角膜反射,可以消除角膜反射和瞳孔之间的任何重叠。最后,通过拟合模型对形状进行参数化:椭圆形(适用于啮齿动物,猫等)或圆形模型(人类,非人类灵长类动物,啮齿动物等)。目标物种很容易更改:

python eyeloop/run_eyeloop.py --model circular/ellipsoid

最后,数据以JSON格式格式化,并传递给所有模块,例如用于渲染,数据采集和实验。

形状处理器

EyeLoop的引擎与Shape类进行通信,该类处理罢工轮廓检测。因此,至少两个形状的由实例化器,一个用于光瞳和定义Ñ为角膜反射:

class Engine:
def __init__(self, ...):
max_cr_processor = 3 #max number of corneal reflections
self.cr_processors = [Shape(self, type = 2) for _ in range(max_cr_processor)]
self.pupil_processor= Shape(self)
...

导入

为了使用视频序列进行眼动跟踪,我们使用导入程序类作为EyeLoop引擎的桥梁。import从摄像机或从目录中脱机获取视频序列,然后将其导入。简而言之,导入程序主类IMPORTER包括旋转,调整大小和保存视频流的功能。另外,它通过传递必要的变量来配置引擎。

为什么要使用import?

使用import类而不是视频输入“内置”的原因是为了避免不兼容。例如,虽然大多数网络摄像机都与opencv(进口商cv)兼容,但基于Vimba的摄像机(Allied Vision摄像机)却不兼容。因此,通过模块化图像帧的导入,EyeLoop可以轻松集成到明显不同的设置中。

进口商

  • 大多数相机与cv导入器兼容(默认)。

  • Allied Vision相机需要基于Vimba的进口商,即vimba

建立您的第一个自定义进口商

要构建我们的第一个自定义导入器,我们实例化Importer类:

class Importer(IMPORTER): def __init__(self) -> None: self.scale = config.arguments.scale

在这里,我们定义关键变量,例如缩放比例。然后,我们加载第一帧,获取其尺寸,最后武装引擎:

... (load image) width, height = (image dimensions) self.arm(width, height, image)

最后,该route()函数加载视频帧并将它们按顺序传递给引擎:

def route(self)-> None:

def route(self) -> None: while True: image = ... config.engine.update_feed(image)            self.frame += 1

(可选)添加一个release()函数来控制导入过程的终止:

def release(self) -> None: terminate()
https://github.com/simonarvin/eyeloop/blob/master/eyeloop/extractors/README.md

其实文章到这里就已经完结了,从这里看到的都是补的内容。补一点关于安装的内容。

我们将完整的库克隆下来后,结构是这样的

python.exe -m pip install -r .\requirements.txt

然后执行这个命令

安装这些依赖库,具体里面的库。在我其他的文章里面会有

pip install .

或者是执行这个命令也是可以的

ERROR: Package 'eyeloop' requires a different Python: 3.6.5 not in '>=3.7'

就是发生了这个事情,挺突然的

(0)

相关推荐