BciPy 通过 Lab Streaming Layer(LSL)协议实现多设备同步采集:
from bcipy.acquisition import LslStreamer
# 初始化LSL流采集器
streamer = LslStreamer()
streamer.connect() # 连接到EEG设备流
data = streamer.read() # 读取实时数据
滤波处理:支持带通滤波(如 8-30Hz 提取 EEG alpha/beta 波)
特征提取:实现 P300 响应的时域 / 频域特征提取
模型训练:内置PCARDAKDE算法用于 EEG 信号分类
刺激呈现基于 PsychoPy 实现,关键特性包括:
时序精确控制:毫秒级刺激呈现与间隔控制
多模态刺激:支持视觉(字母 / 图形)、听觉(音调)刺激
范式化设计:内置 RSVP(快速序列视觉呈现)等经典范式
BciPy 将实验逻辑封装为任务类,典型使用方式:
from bcipy.task import RSVPKeyboardTask
# 初始化RSVP键盘任务
task = RSVPKeyboardTask()
# 配置任务参数
task.configure(parameters={"stimulus_duration": 0.1})
# 运行任务
task.run()
RSVP(Rapid Serial Visual Presentation)键盘是基于 P300 响应的拼写系统,操作步骤如下:
bcipy --user "test_user" --task "RSVP Calibration"
注视屏幕中心注视点,等待字母序列呈现
当目标字母出现时,大脑聚焦该字母以诱发 P300 响应
系统自动记录并分析 EEG 信号中的 P300 特征
校准完成后,使用以下命令启动拼写:
bcipy --user "test_user" --task "RSVP Free Spelling"
矩阵拼写器通过行列高亮诱发 P300 响应,核心原理:
字母按矩阵排列(如 6x6 网格)
行列随机高亮,当目标字母所在行列高亮时产生 P300
系统通过多轮高亮数据融合确定用户选择
# 启动矩阵拼写器任务
bcipy --user "test_user" --task "Matrix Speller"
事件相关电位(ERP)分析是 BCI 数据处理的核心环节:
# 启动矩阵拼写器任务
bcipy --user "test_user" --task "Matrix Speller"
LSL 与刺激系统的时间同步至关重要,偏移校正步骤:
使用光电二极管采集触发信号:
python bcipy/helpers/offset.py -r # 自动分析偏移量
应用推荐的偏移值:
python bcipy/helpers/offset.py --offset "0.1" -p # 假设推荐偏移为0.1秒
from bcipy.task import BciTask
class CustomTask(BciTask):
def __init__(self):
super().__init__()
self.task_name = "Custom Task"
def run(self):
"""实现自定义任务逻辑"""
self.display_stimuli()
self.collect_data()
self.analyze_results()
def display_stimuli(self):
"""定义刺激呈现逻辑"""
pass
def collect_data(self):
"""定义数据采集逻辑"""
pass
from bcipy.main import register_task
register_task(CustomTask, "Custom Task")
如需添加新的信号处理算法,可继承SignalProcessor类:
from bcipy.signal import SignalProcessor
class MyFilter(SignalProcessor):
def process(self, data):
"""实现自定义滤波算法"""
# 示例:带通滤波实现
return self.butter_bandpass_filter(data, lowcut=8, highcut=30, fs=250)
BciPy 采用 pytest 框架管理测试:
# 运行所有测试
py.test
# 运行指定模块测试(如acquisition)
py.test acquisition
项目遵循 PEP8 规范,使用 flake8 进行代码检查:
# 自动格式化代码
autopep8 --in-place --aggressive -r bcipy
# 运行lint检查
flake8 bcipy
使用 mypy 确保类型安全:
mypy bcipy # 命令行检查
mypy --html-report bcipy # 生成HTML报告
Fork 项目仓库并创建分支
实现功能或修复问题(需添加测试用例)
运行测试并确保全部通过
提交 Pull Request 并说明变更内容
技术问题:发送邮件至 [email protected]
开发交流:加入 BciPy 开发团队 Slack
贡献指南:遵循 Contributor Covenant 行为准则
硬件准备:EEG 设备(如 OpenBCI)、光电二极管触发装置
参数配置:
刺激时长:100ms
刺激间隔:50ms
校准试次数:每个字母 10 次
数据采集:记录 EEG 信号与刺激触发标记
from bcipy.task import P300SpellerTask
from bcipy.signal import P300Classifier
class P300RSVPSpeller(P300SpellerTask):
def __init__(self):
super().__init__()
self.classifier = P300Classifier() # 初始化P300分类器
def train_model(self, training_data):
"""训练P300分类模型"""
self.classifier.fit(training_data.eeg, training_data.labels)
def predict(self, eeg_data):
"""使用训练好的模型预测用户意图"""
return self.classifier.predict(eeg_data)
八、进阶学习资源
BciPy 官方文档:https://bcipy.github.io
硬件配置指南:BciPy Hardware and OS Configuration | BciPy Documentation
模块 API 参考:https://bcipy.readthedocs.io
Memmott, T. 等 (2021). BciPy: brain–computer interface software in Python,《Brain-Computer Interfaces》
Orhan, U. 等 (2012). RSVP Keyboard: An EEG Based Typing Interface,ICASSP 会议论文
Farwell, L. A. 与 Donchin, E. (1988). Talking off the top of your head,《Electroencephalography and clinical Neurophysiology》
社区:NeuroTechX 论坛、BCI 竞赛官网
公众号:BCIduino脑机接口社区
脑电设备技术支持:Weixh_God
通过上下两篇的系统介绍,初学者已掌握 BciPy 从环境搭建到应用开发的全流程。脑机接口技术正处于快速发展期,BciPy 作为开源工具为研究者提供了低门槛的实验平台。建议读者从运行内置演示任务开始,逐步尝试自定义任务开发,在实践中深入理解 BCI 系统的信号采集、处理与交互逻辑。随着技术的深入,可进一步探索多模态信号融合、深度学习模型集成等进阶方向,为 BCI 技术的创新应用贡献力量。