BCI Studio is a Desktop Application built to:
- Run Custom Experiments designed in React.js and recorded with popular consumer EEG headsets.
- Manage EEG Data using popular storage options offered by Cloud Providers.
- Train and Deploy BCI Models using TensorFlow.
You don't need an EEG Headset to get started with BCI Studio! BCI Studio comes prepacakged with a "Fake" Device that generates events every 250ms which is a similar rate to the EPOC+. With this, you should be able to explore a full end to end experiment and test the data storage and machine learning features.
- Screen Swap (breifly show a Green screen for ~1 second)
Work in Progress
In the current state of this project, your experiments have to be built with the application itself. To build your own Experiment, you'll need to create two things.
- React Components for various parts of your UI.
- Implementations of an
Event
. - Possibly implement a
Trial
or anExperiment
. The provided implementations are likely sufficient for most use cases.
Take a look at ./app/types
for more information on the current implementation details.
After, you will have to modify parts of BCI Studio that decide the "default" experiment. This functionality isn't modularized quite yet so keep track of the project before making serious modifications to your own copy of the application.
Work in Progress
The functionality proposed here was enough to get an minimum product working but very likely not finalized as there are some clear drawbacks.
After creating an Experiment
, you'll have to merge the various events that are created so that you have data that can be fed to a statistical model.
BCI Studio has the concept of fusing data.
This concept focuses on the columnar EEG data and maps events on top of these events.
The one drawback is that events don't yet specify the window of EEG events that they should fuse with.
By default, fusion maps the current state of the world onto the EEG data.
This means that fluxuations in events are the only way to create the fusion windows.
Because our brains take some time to react the exact state of the world, there is some value in augmenting the fusion time so that EEG events are labeled with what happened in the past.
At the time of this commit, augmenting the fusion time isn't implemented.
Work in Progress
This part of the project is executed manually until the previous steps have clear APIs.
- Download the default machine learning model here: TODO (based on the cloudml-template)
- Locate your fusion table in your Cloud Provider.
- Download data from the fusion table as
csv
and place in the./data
folder. - Create two copies of your file:
train-data-<something>.csv
andvalid-data-<something>.csv
. - Optional: update columns specific to your device or experiment
../scripts/local-train.sh
- Modify the sample data
./data/new-data.json
../scripts/local-predict.sh
- Based on react-electron-boilerplate.
- Written in Flow.
- Uses Redux for state management.
- UI build with material-ui
To run locally:
yarn dev
Note: sometimes webpack will serve "old" versions of your code and the application doesn't reflect the most recent "save." After changing code, you may have to refresh the Electron app (Command + R)
To run pre-commit checks (style linting):
npm run -s precommit