Skip to content

kirtonBCIlab/bci-essentials-python

Repository files navigation

bci-essentials-python

This repository contains python modules and scripts for the processing of EEG-based BCI. These modules are specifically designed to be equivalent whether run offline or online.

Related packages

The front end for this package can be found in bci-essentials-unity

Getting Started

Installation

BCI Essentials requires Python 3.9 or later. To install for Windows, MacOS or Linux:

pip install bci-essentials

On some systems, it may be necessary to install liblsl. Alternatively, use the Conda environment to set up dependencies that are not provided by pip:

conda env create -f ./environment.yml
conda activate bci

Offline processing

Offline processing can be done by running the corresponding offline test script (ie. mi_offline_test.py, p300_offline_test.py, etc.) Change the filename in the script to point to the data you want to process.

python examples/mi_offline_test.py

Online processing

Online processing requires an EEG stream and a marker stream. These can both be simulated using eeg_lsl_sim.py and marker_lsl_sim.py. Real EEG streams come from a headset connected over LSL. Real marker streams come from the application in the Unity frontend. Once these streams are running, simply begin the backend processing script ( ie. mi_unity_backend.py, p300_unity_bakend.py, etc.) It is recommended to save the EEG, marker, and response (created by the backend processing script) streams using Lab Recorder for later offline processing.

python examples/mi_unity_backend.py

Directory

bci_essentials

The main packge containing modules for BCI processing.

  • bci_controller.py - module for reading online/offline data, windowing, processing, and classifying EEG signals
  • classification.py - module containing relevant classifiers for bci_controller, classifiers can be extended to meet individual needs
  • signal_processing.py- module containing functions for the processing of bci_controller
  • visuals.py - module for visualizing EEG data

examples

Example scripts and data.

  • data - directory containing example data for P300, MI, and SSVEP
  • eeg_lsl_sim.py - creates a stream of mock EEG data from an xdf file
  • marker_lsl_sim.py - creates a stream of mock marker data from an xdf file
  • mi_offline_test.py - runs offline MI processing on previously collected EEG and marker streams
  • mi_unity_backend.py - runs online MI processing on live EEG and marker streams
  • p300_offline_test.py - runs offline P300 processing on previously collected EEG and marker streams
  • p300_unity_backend.py - runs online P300 processing on live EEG and marker streams
  • ssvep_offline_test.py - runs offline SSVEP processing on previously collected EEG and marker streams
  • ssvep_unity_backend_tf.py - runs online SSVEP processing on live EEG and marker streams, does not require training
  • ssvep_unity_backend.py - runs online SSVEP processing on live EEG and marker streams
  • switch_offline_test.py - runs offline switch state processing on previously collected EEG and marker streams
  • switch_unity_backend.py - runs online switch state processing on live EEG and marker streams