#action #cognitive #low-latency #task #experiment #interactive-applications #run

bin+lib cog-task

通用低延迟应用程序,用于运行认知任务

21 个版本 (9 个稳定版)

1.2.0 2022年11月5日
1.1.5 2022年11月5日
1.0.1 2022年10月30日
0.2.4 2022年10月25日
0.1.1 2022年8月14日

视频 中排名 115

Download history 9/week @ 2024-03-08 3/week @ 2024-03-15 3/week @ 2024-03-29 1/week @ 2024-04-05

每月下载 64

MIT 和可能 AGPL-3.0-or-later

1MB
11K SLoC

rusty brain logo

CogTask

Crates.io Documentation License Build Status Crates.io Downloads

通用低延迟工具,用于设计认知任务。

描述

此工具提供了一种简单的方法来编写和执行在涉及认知科学实验中通常有用的不同类型的交互式操作。例如,显示图像/视频、播放声音、显示文本、测量对事件的反应(通过按键或点击)、测量动作完成时间、提问等。

此应用程序使用 Rust 编写,并使用 egui 图形框架。要生成任务,实验设计者应创建一个 rust 对象符号(RON;有关语法高亮,请参阅其 README 中的“工具”部分)格式的描述文件。任务文件包含三个主要字段:名称、配置和块(应在一次会话中运行的实验的独立部分)。每个块本身包含三个主要字段:名称、配置(覆盖任务配置)和动作。动作以树(图)的形式指定,节点类型为 Action

Action 是实验设计的根本构建块。有许多 动作类型

  • 一些动作是容器,即它们包含其他动作。容器动作是构建树的方法。例如,动作 Seq 是一个序列容器,它存储将按顺序运行的子动作列表。另一个示例是 Par 动作,它是一个并行容器,存储将同时开始(但可能在不同时间结束)的子动作列表。
  • 有些操作是无限循环的,它们不会自行结束或通过用户交互结束。这些操作应与其他非无限操作相关联。例如,Timeout 是一个容器操作,将在固定时间内运行其内部子操作。
  • 有些操作对实验没有任何影响,但会存储结果。例如,KeyLogger 存储用户的按键及其时间。另一个例子,Logger 将从其他操作接收到的任何信息存储到文件中。
  • ...

还有许多其他类型的操作,尚未得到适当的文档记录。但您可以自由探索 类型(每个文件对应于同名操作),或查看(并运行)多个 示例

安装

安装 CogTask 最可靠的方式是通过 rustup 安装 Cargo 并本地编译二进制文件(请参阅下面的要求部分)。

安装 Cargo

curl https://sh.rustup.rs -sSf | sh

构建二进制文件(选择一种)

  • 来自 crates.io 的稳定二进制文件
    cargo install cog-task [--features=...]
    
  • 来自 github 的夜间二进制文件(推荐
    cargo install --git https://github.com/menoua/cog-task [--features=...]
    

要更新安装到最新版本,您可以运行相同的命令。

功能

某些类型的操作依赖于在安装期间可以启用可选功能。这些功能默认不启用,因为它们依赖于可能没有预安装在操作系统上的额外系统库。

目前,有 5 个不同的功能可以启用

  1. rodio -- 允许在 macOS 上通过 CoreAudio 音频库和在 Linux 上通过 ALSA 播放声音。
  2. gstreamer -- 允许通过 gstreamer 后端流式传输音频/视频文件。
  3. ffmpeg不完整)-- 允许通过 ffmpeg 后端流式传输音频/视频文件。
  4. savage -- 启用使用 savage 解释器进行数学运算。
  5. python -- 启用使用 Python 代码片段进行计算。

示例

  • 具有所有功能的稳定二进制文件
    cargo install cog-task --all-features
    
  • 具有 rodiogstreamer 支持的夜间二进制文件
    cargo install --git https://github.com/menoua/cog-task --features=rodio,gstreamer
    

要求

macOS

功能 要求
必需 -
rodio -
savage -
gstreamer brew安装 gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav gst-rtsp-server
ffmpeg brew安装 ffmpeg
python (需要有效的 Python 安装;请参阅以下内容)
--all-features brew安装 gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav gst-rtsp-server ffmpeg

Linux

功能 要求
必需 sudoapt install build-essential cmake pkg-config libfontconfig1-dev
rodio sudoapt install libasound2-dev
savage -
gstreamer sudoapt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-pulseaudio
ffmpeg sudoapt install libavfilter-dev libavdevice-dev ffmpeg
python (需要有效的 Python 安装;请参阅以下内容)
--all-features sudoapt install build-essential cmake pkg-config libfontconfig1-dev libasound2-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-pulseaudio libavfilter-dev libavdevice-dev ffmpeg

//@ python

启用 python 功能可能有些棘手。您需要一个有效的 Python3 安装,这通常在 macOS 和 Linux 的最新版本中预安装。如果您使用 anaconda 安装了 Python,通常不需要做任何事情。如果您使用其他方法安装了 Python,您可能需要手动设置 PYTHONHOME 环境变量。变量需要设置为所需 Python 环境的位置

export PYTHONHOME=path_to_python_env

这应该在运行 cog-launchercog-server 之前在同一 shell 环境中设置。可能需要进行一些尝试和错误才能使其工作。

用法

此软件包安装了两个二进制文件: cog-launchercog-server

cog-launcher 是一个启动器,提供图形界面以从磁盘查找和加载任务。

cog-server /path/to/task 通过提供任务目录的路径来运行特定任务。cog-launcher 在启动任务时运行此二进制文件,因此请确保这两个二进制文件位于同一目录中。

例如,要运行此存储库中的 Basic 任务,请执行以下操作

git clone https://github.com/menoua/cog-task
cog-server cog-task/example/basic

或者,您可以运行

cog-launcher

然后使用最左边的控制图标加载 example/basic/ 目录。或者,您可以使用第二个按钮打开包含所有示例任务的父目录 example/。前者直接在所选任务上运行 cog-server。后者显示所选目录中所有任务的列表,可以通过单击相应的按钮启动。

更新日志

SemVer 版本将遵循以下指南:如果新版本向后兼容(为最后一个版本编写的任务在新版本上表现相同),即使有(1)新操作类型,或者(2)引入了现有操作类型的新属性,则第三个数字将增加。如果完全删除了现有操作类型,或者现有操作(或其默认值)的属性已更改,以至于不再向后兼容,则第二个数字将增加。如果程序结构发生根本变化(任务/操作的定义或执行方式),则第一个数字将增加。通常,错误修复会增加第三个数字,除非它们很大,在这种情况下,它们会增加第二个数字。

v1.2.0:

  • 新增操作 Until,它包装另一个(通常是无限期的)操作,并在接收到信号或满足条件时结束。
  • 新增操作 Repeat,它包装另一个有限操作,并在操作结束后立即重新启动。
  • KeyLogger 现在有一个 out_key 属性,它以字符串的形式发出按下的键的名称。
  • KeyLogger 现在以映射形式存在而不是元组形式,因此应将 group 作为键值对提供。

v1.1.5:

  • 修复了在 v1.1.4 中引入的错误,即如果 Process 在操作开始之前结束,则块会崩溃。

v1.1.4:

  • Process 现在有一个 drop_early 属性,如果设置,则在相应的操作开始之前丢弃/忽略所有传入的响应。这与 raw_all 的响应类型不兼容。
  • 修复了 Porcess 中的错误,如果操作开始之前收到了多个响应,则只会消耗一个,并永远保留未消费的响应列表。

v1.1.3:

  • 如果使用 anaconda 安装了 python,则不再需要手动设置 PYTHONHOME 环境变量来使用 python 函数。

v1.1.2:

  • 新增操作 Stack,并行运行操作,并以水平或垂直堆叠显示它们。
  • 新增操作 Horizontal 是水平 Stack 的简写。
  • 新增操作 Vertical 是垂直 Stack 的简写。

v1.1.1:

  • Process 现在有一个 passive 属性,如果设置,则不会向子进程发送任何内容。
  • Process 现在有一个 response_type 属性,用于确定响应内容是否应读取:(a) 值 = 读取一行并将其转换为声明类型,(b) raw = 读取一行并将其视为字符串,(c) raw_all = 读取全部输出并将其视为单个字符串。

v1.1.0:

  • 新增了一个可以以阻塞或非阻塞模式运行外部编译的二进制文件的 Process 操作。
  • Function 现在有一个 lo_response 属性,如果设置,将以非阻塞模式运行。
  • Functionpersistent 属性被相反的属性 once 替换,如果为真,则函数只运行一次(无论是启动还是更新)。
  • 修复了 Delayed 中的错误。

v1.0.1:

  • Clock 现在在其输出信号中发送递增的滴答数,而不是发送空值。
  • Clock 有一个 on_start 属性,用于确定是否在操作开始时发出“零”信号。

依赖项

~33–70MB
~1M SLoC