跳转到主要内容

Emotiv EEG Cortex 2 API的综合线程化、异步Python客户端

项目描述

Emotiv Cortex2 Python客户端

PyPI version

作者: methylDragon


Image result for emotiv epoc

Image result for emotiv logo

图片来源: Emotiv

简介

Emotiv EEG Cortex 2 API的非官方Python客户端。

特点是通过异步WebSocket进行整个JSON-RPC API通信,以提高速度。

Cortex 2应用程序用于托管WebSocket Web服务器网关接口,该接口接收JSON请求并返回JSON数据。

此Python客户端被设计为该API的包装客户端。它使用单独的异步线程流式传输多会话传感器数据!

API参考: https://emotiv.gitbook.io/cortex-api/

PyPI链接: https://pypi.ac.cn/manage/project/cortex2

支持我的努力!

Yeah! Buy the DRAGON a COFFEE!

或者留下一些小费! ヾ(°∇°*)

要求

  • Python 3.6或更高版本

安装

pip install cortex2

示例用法

请记住,通过 注册 来设置您的客户端ID和密钥。

同时确保您已启动EmotivApp,因为它托管WebSocket服务器!(您可能需要使用Windows或Mac。)

如果客户端无法连接,您可能需要使用客户端重新启动脚本。

from cortex2 import EmotivCortex2Client

url = "wss://localhost:6868"

# Remember to start the Emotiv App before you start!
# Start client with authentication
client = EmotivCortex2Client(url,
                             client_id='CLIENT_ID',
                             client_secret="CLIENT_SECRET",
                             check_response=True,
                             authenticate=True,
                             debug=False)

# Test API connection by using the request access method
client.request_access()

# Explicit call to Authenticate (approve and get Cortex Token)
client.authenticate()

# Connect to headset, connect to the first one found, and start a session for it
client.query_headsets()
client.connect_headset(0)
client.create_session(0)

# Subscribe to the motion and mental command streams
# Spins up a separate subscription thread
client.subscribe(streams=["mot", "com"])

# Test message handling speed
a = client.subscriber_messages_handled
time.sleep(5)
b = client.subscriber_messages_handled
print((b - a) / 5)

# Grab a single instance of data
print(client.receive_data())

# Continously grab data, while making requests periodically
while True:
    counter += 1
    # time.sleep(0.1)

    if counter % 5000 == 0:
        print(client.request_access())

    # Try stopping the subscriber thread
    if counter == 50000:
        client.stop_subscriber()
        break

    try:
        # Check the latest data point from the motion stream, from the first session
        print(list(client.data_streams.values())[0]['mot'][0])
    except:
        pass

您也可以通过明确指定ID来连接!

client.connect_headset(headset_id="EPOCPLUS-3B9AXXXX")
client.create_session(headset_id="EPOCPLUS-3B9AXXXX")

您可以做更多的事情!整个API都得到涵盖,并且一切通常都以相同的方式进行。

其他显著功能

  • 将WebSocket API包装在辅助函数中,以执行请求ID检查、异步消息处理和某些基本数据清理。
  • 线程用于尝试允许订阅多个会话和多个耳机。
    • 线程有一个辅助函数,可以自动分割数据流,这样您可以独立地处理流,而不是将它们全部作为一个对象处理。
  • 当调用相关方法时,将触发自动同步辅助方法以检测现有的会话和耳机。(例如,当尝试更新、连接或断开耳机时,客户端将自动查询和更新已看到的耳机字典。)

显著的类属性

名称 类型 描述 示例
debug bool 调试标志。如果设置,则会减慢数据订阅速率。
client_id str 客户端 ID
client_secret str 客户端密钥
cortex_token str Cortex 令牌
approved bool 如果访问被授权则为 True
authorized bool 如果已颁发 cortex 令牌则为 True
headsets OrderedDict() 已看到的耳机对象字典的 OrderedDict
connected_headsets OrderedDict() OrderedDict of connected headset object dicts
sessions OrderedDict() 已看到的会话对象字典的 OrderedDict
data_deque_size int 每个订阅者数据缓冲区的最大大小
data_streams dict 按会话键的传感器数据流 {session_id: {data_stream_deques_types: [data]}, ...}
subscribed_streams dict 按会话键的已订阅数据流名称和描述 {session_id: {stream_names: info}, ...}
subscriber_spinning bool 跟踪订阅者线程是否正在运行
subscriber_messages_handled int 统计已处理的订阅者消息数量
subscriber_reading threading.Event() 事件标志,用于暂停订阅者而不会终止它

类方法

类辅助函数

  • send_authed_request(method=None, params={}, request=None)
  • send_request(method=None, params={}, request=None)
  • set_client_id(client_id)
  • set_client_secret(client_secret)
  • _verify_key(key, response, field=None))
  • _exit_handler(_signo, _stack_frame)

连接到 Cortex API

  • get_cortex_info()

身份验证

  • get_user_login()

  • request_access()

  • has_access_right()

  • authorize()

  • generate_new_token()

  • get_user_information()

  • get_license_info()

  • 辅助函数

    • authenticate()

耳机

  • query_headsets(id=None, sync=True)

  • control_device(command, headset_id=None, mappings=None)

  • refresh_headsets()

  • connect_headset(headset_id_idx=0, headset_id=None, mappings=None)

  • disconnect_headset(headset_id)

  • update_headset(settings, headset_id_idx=0, headset_id=None)

  • maximise_headset(headset_id_idx=0, headset_id=None)

  • maximise_headset_no_motion(headset_id_idx=0, headset_id=None)

  • 辅助函数

    • sync_headsets(response=None, query=True)
    • _get_headset_type(headset_id)

会话

  • create_session(headset_id_idx=0, headset_id=None)

  • create_activated_session(headset_id_idx=0, headset_id=None)

  • update_session(status, session_id_idx=0, session_id=None)

  • activate_session(session_id_idx=0, session_id=None)

  • close_session(session_id_idx=0, session_id=None)

  • query_sessions(sync=True)

  • 辅助函数

    • sync_sessions(response=None, query=True)

数据订阅

  • subscribe(streams, session_id_idx=0, session_id=None)

  • unsubscribe(streams, session_id_idx=0, session_id=None)

  • 辅助函数

    • receive_data()
    • spin_subscriber()
    • stop_subscriber()
    • pause_subscriber()
    • resume_subscriber()
    • _subscriber_thread()
    • _create_data_streams(session_id)
    • _delete_data_streams(session_id)
    • _split_and_update_data_streams(data_sample)

记录

  • create_record(title, session_id_idx=0, session_id=None, description=None, subject_name=None, tags=None)
  • stop_record(title, session_id_idx=0, session_id=None)
  • update_record(record_id, description=None, tags=None)
  • delete_record(record_ids)
  • export_record(record_ids, folder, format, stream_types, version=None)
  • export_edf(record_ids, folder, stream_types)
  • export_csv_v1(record_ids, folder, stream_types)
  • export_csv_v2(record_ids, folder, stream_types)
  • query_records(query, order_by={'startDatetime': "DESC"}, limit=0, offset=0, include_markers=False)
  • get_record_infos(record_ids)

标记

  • inject_marker(time, value, label, session_id_idx=0, session_id=None, port=None, extras=None)
  • update_marker(标记_id, 时间, 会话_id_idx=0, 会话_id=None, 附加信息=None)

BCI

  • 查询配置文件()
  • 获取当前配置文件(耳机_id_idx=0, 耳机_id=None)
  • 设置配置文件(状态, 配置文件, 耳机_id_idx=0, 耳机_id=None, 新配置文件名=None)
  • 创建配置文件(配置文件)
  • 加载配置文件(配置文件, 耳机_id_idx=0, 耳机_id=None)
  • 卸载配置文件(配置文件, 耳机_id_idx=0, 耳机_id=None)
  • 保存配置文件(配置文件)
  • 重命名配置文件(配置文件, 耳机_id_idx=0, 耳机_id=None, 新配置文件名=None)
  • 删除配置文件(配置文件)
  • 加载访客配置文件(耳机_id_idx=0, 耳机_id=None)
  • 获取检测信息(检测)
  • 获取心理命令信息()
  • 获取面部表情信息()
  • 训练(检测, 状态, 动作, 会话_id_idx=0, 会话_id=None)
  • 开始训练(检测, 动作, 会话_id_idx=0, 会话_id=None)
  • 接受训练(检测, 动作, 会话_id_idx=0, 会话_id=None)
  • 拒绝训练(检测, 动作, 会话_id_idx=0, 会话_id=None)
  • 重置训练(检测, 动作, 会话_id_idx=0, 会话_id=None)
  • 擦除训练(检测, 动作, 会话_id_idx=0, 会话_id=None)

高级BCI

  • 获取训练签名动作(检测, 配置文件=None, 会话=None)
  • 获取训练时间(检测, 会话_id_idx=0, 会话_id=None)
  • 面部表情签名类型(状态, 配置文件=None, 会话=None, 签名=None)
  • 获取面部表情签名类型(配置文件=None, 会话=None)
  • 设置面部表情签名类型(配置文件=None, 会话=None, 签名=None)
  • 面部表情阈值(状态, 动作, 配置文件=None, 会话=None, 值=None)
  • 获取面部表情阈值(动作, 配置文件=None, 会话=None)
  • 设置面部表情阈值(动作, 配置文件=None, 会话=None, 值=None)
  • 心理命令活动动作(状态, 配置文件=None, 会话=None, 动作=[])
  • 获取心理命令活动动作(配置文件=None, 会话=None)
  • 设置心理命令活动动作(配置文件=None, 会话=None, 动作=[])
  • 心理命令大脑映射(配置文件=None, 会话=None)
  • 心理命令获取技能评级(配置文件=None, 会话=None, 动作=None)
  • 心理命令训练阈值(配置文件=None, 会话=None)
  • 心理命令动作等级(状态, 配置文件=None, 会话=None, 等级=None)
  • 获取心理命令动作等级(配置文件=None, 会话=None)
  • 设置心理命令动作等级(配置文件=None, 会话=None, 等级=None)
  • 心理命令动作灵敏度(状态, 配置文件=None, 会话=None, 值=[])
  • 获取心理命令动作灵敏度(状态, 配置文件=None, 会话=None)
  • 设置心理命令动作灵敏度(状态, 配置文件=None, 会话=None, 值=[])

EmotivCortex2Client 更新日志

v1.0.1 - 2019_07_09

更改

  • 修复子模块导入错误

v1.0.0 - 2019_07_09

新增

  • 初始发布
    • 带有测试异步性的WebsocketClient
    • 带有完整API的EmotivCortex2Client

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

cortex2-1.0.1.tar.gz (18.6 kB 查看哈希值)

上传时间

构建分布

cortex2-1.0.1-py3-none-any.whl (27.6 kB 查看哈希值)

上传时间 Python 3

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页