Software to stream EEG data, perform preprocessing, and train machine learning models to build real-time BCI applications.
Project description
OpenCortex
OpenCortex is a fully-featured EEG streamer that includes a classifier and a GUI to visualize the data in real-time.
Via the LabStreamingLayer (LSL) protocol, it can receive and send data to any compatible device or software and be used
to build real-time neural applications (BCI, neurofeedback, etc.).
Features
- GUI to plot EEG in real-time
- Signal real-time filtering (bandpass, notch)
- Signal quality estimators
- Save custom markers on the data
- Inlet stream to mark the data with external triggers
- Outlet stream that can send raw EEG to an external receiver
- General-purpose classifier interface that can be initialized with any model from Scikit-Learn
- Cross-validation plots with ROC curve and Confusion Matrix
Table of Contents
Supported Devices
- Any EEG board listed on Brainflow documentation
- (Coming Soon) Emotiv Epoc and other consumer EEG devices
Getting Started
These instructions will help you get a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites
List any software or dependencies that need to be installed before setting up the project.
- Python 3.8 or higher (earlier versions might work, but they are not tested)
- Microsoft C++ Build Tools
# Example:
# Python 3
sudo apt-get install python3
Installation and Usage with pip
You can install the package using command:
pip install opencortex
To run the OpenCortex Streamer:
python -m opencortex
or even just:
opencortex
[!Important] The package is still in development, so it is recommended to install it in a virtual environment.
Local Installation
If you want to install the package locally, for example to modify the source code, follow these steps:
- Clone the repository
git clone https://github.com/BRomans/OpenCortex.git
cd OpenCortex
- Create a virtual environment
# Using venv
python3 -m venv venv
# Activate the virtual environment
source venv/bin/activate # On Linux/Mac
venv\Scripts\activate # On Windows
- Install the required packages
pip install -r requirements.txt
- Solve issues with PyBluez
The base requirement for bluetooth scanning is pybluez2, which is a Python wrapper for the BlueZ Linux Bluetooth stack.
There might be issues installing the package from pip, so it is recommended to install it from the source.
pip install git+https://github.com/airgproducts/pybluez2.git@0.46
Alternatively, you can install pybluez, which should silently be called instead of pybluez2.
If you encounter issues installing PyBluez, please refer to the latest comments on the project issues page.
Usage
To run any example, use the following command:
cd examples
python <example_name>.py
To run the EEG Streamer app, use the following command:
python opencortex/__main__.py
Examples
The examples folder contains single runnable scripts that demonstrate how to handle data collected using g.tec hardware.
Notebooks
The notebooks folder contains some examples on how to use the utilities provided in this repository. You can run the notebooks using Jupyter, Jupyter Lab or Google Colab.
Building
This project can be built as pip package using the following commands
Source Distribution
If you want to build a source distribution, run the following command:
python setup.py sdist
Copy the content of the dist folder to the desired location and install the package using pip:
pip install <package_name>.tar.gz
Wheel Distribution
Afterwards, to build a wheel distribution, run the following command:
python setup.py sdist bdist_wheel
Copy the content of the dist folder to the desired location and install the package using pip:
pip install <package_name>.whl
Contributing
If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are warmly welcome.
- Fork the project.
- Create a new branch.
- Make your changes and commit them.
- Push to the branch and create a pull request.
Credits
This project is freely available to anyone and is not intended for commercial use. If you use this project for academic purposes, please cite the original authors.
License
This project is licensed under the GPLv3 License - see the LICENSE file for details. Packages used in this project are licensed under their respective licenses, as stated in the Acknowledgments section.
Authors
Please make sure to update the AUTHORS file if you are contributing to the project.
Acknowledgments
- Brainflow, distributed under the MIT License.
- LabStreamingLayer distributed under the MIT License.
- MNE distributed under the BSD 3-Clause License.
- Scikit-learn distributed under the BSD 3-Clause License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file opencortex-0.1.5.tar.gz.
File metadata
- Download URL: opencortex-0.1.5.tar.gz
- Upload date:
- Size: 40.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a35dc5a55716f2a8b5714a3bd0538baa39fb01fd7eb44d3443ec17dba16214fb
|
|
| MD5 |
d84a7055364b00df112039d339fa81b7
|
|
| BLAKE2b-256 |
a1ce1c052d087d1c19b5994c4fff0eac0e5037cc67f0972276752d1a18773f00
|
File details
Details for the file opencortex-0.1.5-py3-none-any.whl.
File metadata
- Download URL: opencortex-0.1.5-py3-none-any.whl
- Upload date:
- Size: 102.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25e49485783518fad0a845213c75fdd4d72456e56d043155cc61354a18abff03
|
|
| MD5 |
082b4bf87d2db37ad204c9f5e76470c1
|
|
| BLAKE2b-256 |
5b6979f434c5c2e089c435a67f8f1277cb9e2beff03c3e7bbdb5de49d0f0cc75
|