GithubHelp home page GithubHelp logo

andrewjsauer / muse-lsl Goto Github PK

View Code? Open in Web Editor NEW

This project forked from alexandrebarachant/muse-lsl

1.0 3.0 0.0 38.93 MB

Python script to stream EEG data from the muse 2016 headset

License: BSD 3-Clause "New" or "Revised" License

Python 100.00%

muse-lsl's Introduction

Muse LSL

A Python package for streaming, visualizing, and recording EEG data from the Muse 2016 headband.

Blinks

Requirements

The code relies on pygatt or BlueMuse for BLE communication and works differently on different operating systems.

  • Windows: On Windows 10, we recommend installing BlueMuse and using its GUI to find and start streaming from Muses. Alternatively, if you have a BLED112 dongle you can try Muse LSL's bgapi backend (i.e. $ muselsl stream -b bgapi).
  • Mac: BLED112 dongle required. Use the bgapi backend (default option on Mac)
  • Linux: No dongle or separate install required. Use the pygatt backend (default option on Linux) and make sure to read the Common Issues

Compatible with Python 2.7 and Python 3.x

Only compatible with the 2016 model of the Muse headband

Note: if you run into any issues, first check out out Common Issues and then the Issues section of this repository

Getting Started

Installation

Install Muse LSL with pip

pip install muselsl

Setting Up a Stream

On Windows 10, we recommend using the BlueMuse GUI to set up an LSL stream. On Mac and Linux, the easiest way to get Muse data is to use Muse LSL directly from the command line. Use the -h flag to get a comprehensive list of all commands and options.

To print a list of available muses:

$ muselsl list

To begin an LSL stream from the first available Muse:

$ muselsl stream  

In order to connect to a specific Muse, pass the name of the device as an argument. The name of the Muse can be found on the inside of the left earpiece (e.g. Muse-41D2)

$ muselsl stream --name YOUR_DEVICE_NAME

You can also directly pass the MAC address of your Muse (this is the fastest and most reliable way):

$ muselsl stream --address YOUR_DEVICE_ADDRESS

Working with Streaming Data

Once a stream is up and running, you now have access to the following commands in another prompt:

To view data:

$ muselsl view

If the visualization freezes or is laggy, you can also try the alternate version 2 of the viewer. Note: this will require the additional vispy and mne dependencies

$ muselsl view --version 2

To record EEG data into a CSV:

$ muselsl record --duration 60  

Note: this command will also save data from any LSL stream containing 'Markers' data, such as from the stimulus presentation scripts in EEG Notebooks

Alternatively, you can record data directly without using LSL through the following command:

$ muselsl record_direct --duration 60

Note: direct recording does not allow 'Markers' data to be recorded

Running Experiments

Muse LSL was designed so that the Muse could be used to run a number of classic EEG experiments, including the P300 event-related potential and the SSVEP and SSAEP evoked potentials.

The code to perform these experiments is still available, but is now maintained in the EEG Notebooks repository by the NeuroTechX community.

Integration into other projects

If you want to integrate Muse LSL into your own Python project, you can import and use its functions as you would any Python package. Examples are available in the examples folder:

from muselsl import stream

muses = stream.list_muses()
stream.stream(muses[0]['address'])

# Note: Streaming is synchronous, so code here will not execute until after the stream has been closed
print('Stream has ended')

What is LSL?

Lab Streaming Layer or LSL is a system designed to unify the collection of time series data for research experiments. It has become standard in the field of EEG-based brain-computer interfaces for its ability to make seperate streams of data available on a network with time synchronization and near real-time access. For more information, check out this lecture from Modern Brain-Computer Interface Design or the LSL repository

Common Issues

Mac and Windows

  1. Connection issues with BLED112 dongle:
  • You may need to use the --interface argument to provide the appropriate COM port value for the BLED112 device. The default value is COM9. To setup or view the device's COM port go to your OS's system settings

Linux

  1. pygatt.exceptions.BLEError: Unexpected error when scanning: Set scan parameters failed: Operation not permitted (Linux)
  • This is an issue with pygatt requiring root privileges to run a scan. Make sure you have libcap installed and run sudo setcap 'cap_net_raw,cap_net_admin+eip' `which hcitool`
  1. pygatt.exceptions.BLEError: No characteristic found matching 273e0003-4c4d-454d-96be-f03bac821358 (Linux)
  • There is a problem with the most recent version of pygatt. Work around this by downgrading to 3.1.1: pip install pygatt==3.1.1
  1. pygatt.exceptions.BLEError: No BLE adapter found (Linux)
  • Make sure your computer's Bluetooth is turned on.
  1. pygatt.exceptions.BLEError: Unexpected error when scanning: Set scan parameters failed: Connection timed out (Linux)
  • This seems to be due to a OS-level Bluetooth crash. Try turning your computer's bluetooth off and on again

muse-lsl's People

Contributors

jdpigeon avatar alexandrebarachant avatar kowalej avatar urish avatar pdpino avatar

Stargazers

Andrew  Sauer avatar

Watchers

James Cloos avatar Andrew  Sauer avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.