Initial draft
Esse commit está contido em:
+18
@@ -0,0 +1,18 @@
|
||||
# OpenBCI Experimenter
|
||||
|
||||
Node.js app for recording experiments based on OpenBCI Data samples
|
||||
|
||||
This project is under development, this is just a first draft.
|
||||
|
||||
## Setup
|
||||
|
||||
* npm install
|
||||
* Plug in OpenBCI dongle
|
||||
* Turn on OpenBCI board
|
||||
* Run:
|
||||
|
||||
``` bash
|
||||
node experimenter with [subject_name] about [keyword] for [time_milliseconds]
|
||||
```
|
||||
|
||||
The recorded JSON data for experiments can be found at ./data/[keyword].json
|
||||
@@ -0,0 +1,77 @@
|
||||
var path = require('path');
|
||||
var fs = require('fs');
|
||||
var argv = require('yargs').argv;
|
||||
var jsonfile = require('jsonfile');
|
||||
var OpenBCIBoard = require('openbci-sdk');
|
||||
|
||||
// Experiment Model
|
||||
var experiment = {
|
||||
name: argv._[3],
|
||||
subject: argv._[1],
|
||||
duration: argv._[5],
|
||||
filePath: path.join(__dirname, 'data', argv._[3] + '-' + argv._[1] + '.json'),
|
||||
patternsTotal: 0,
|
||||
patterns: []
|
||||
};
|
||||
|
||||
console.log(experiment);
|
||||
|
||||
// OpenBCI
|
||||
|
||||
const board = new OpenBCIBoard.OpenBCIBoard();
|
||||
|
||||
board.autoFindOpenBCIBoard()
|
||||
.then(onBoardFind);
|
||||
|
||||
// Board find handler
|
||||
function onBoardFind (portName) {
|
||||
if (portName) {
|
||||
console.log('board found', portName);
|
||||
board.connect(portName)
|
||||
.then(onBoardConnect);
|
||||
}
|
||||
}
|
||||
|
||||
// Board connect handler
|
||||
function onBoardConnect () {
|
||||
board.on('ready', onBoardReady);
|
||||
}
|
||||
|
||||
// Board ready handler
|
||||
function onBoardReady () {
|
||||
console.log(experiment.name + ' experiment started');
|
||||
board.streamStart();
|
||||
board.on('sample', addPattern);
|
||||
setTimeout(endExperiment, experiment.duration);
|
||||
}
|
||||
|
||||
// Add pattern
|
||||
function addPattern (sample) {
|
||||
var pattern = {
|
||||
input: {},
|
||||
output: {}
|
||||
};
|
||||
sample.channelData.forEach(function (channel, index) {
|
||||
pattern.input[index + 1] = channel;
|
||||
});
|
||||
pattern.output[experiment.name] = 1;
|
||||
experiment.patternsTotal++;
|
||||
experiment.patterns.push(pattern);
|
||||
console.log('pattern', pattern);
|
||||
}
|
||||
|
||||
// End Experiment
|
||||
function endExperiment () {
|
||||
board.streamStop()
|
||||
.then(board.disconnect());
|
||||
jsonfile.writeFile(experiment.filePath, experiment, { spaces: 2 }, function (error) {
|
||||
if (!error) {
|
||||
console.log(experiment.name + ' experiment finished with ' + experiment.patternsTotal + ' patterns');
|
||||
console.log('Experiment path: ' + experiment.filePath);
|
||||
} else {
|
||||
console.log(experiment.name + ' experiment failed. sucks to be you.');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"name": "openbci-experimenter",
|
||||
"private": false,
|
||||
"version": "0.0.1",
|
||||
"description": "Node.js app for recording experiments based on OpenBCI data samples",
|
||||
"main": "experimenter.js",
|
||||
"license": "MIT",
|
||||
"keywords": [
|
||||
"openbci",
|
||||
"experiment",
|
||||
"machine-learning"
|
||||
],
|
||||
"author": "Alex Castillo",
|
||||
"scripts": {
|
||||
},
|
||||
"dependencies": {
|
||||
"jsonfile": "^2.2.3",
|
||||
"openbci-sdk": "^0.2.0",
|
||||
"yargs": "^4.3.2"
|
||||
}
|
||||
}
|
||||
Referência em uma Nova Issue
Bloquear um usuário