def main (): BoardShim.enable_board_logger () DataFilter.enable_data_logger () MLModel.enable_ml_logger () parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--timeout', type = int, help = 'timeout for device discovery or connection', required = False, default = 0) parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--streamer-params', type = str, help = 'streamer params', required = False, default = '') parser.add_argument ('--serial-number', type = str, help = 'serial number', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--file', type = str, help = 'file', required = False, default = '') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file board = BoardShim (args.board_id, params) master_board_id = board.get_board_id () sampling_rate = BoardShim.get_sampling_rate (master_board_id) board.prepare_session () board.start_stream (45000, args.streamer_params) BoardShim.log_message (LogLevels.LEVEL_INFO.value, 'start sleeping in the main thread') time.sleep (5) # recommended window size for eeg metric calculation is at least 4 seconds, bigger is better data = board.get_board_data () board.stop_stream () board.release_session () eeg_channels = BoardShim.get_eeg_channels (int (master_board_id)) bands = DataFilter.get_avg_band_powers (data, eeg_channels, sampling_rate, True) feature_vector = np.concatenate ((bands[0], bands[1])) print(feature_vector) # calc concentration concentration_params = BrainFlowModelParams (BrainFlowMetrics.CONCENTRATION.value, BrainFlowClassifiers.KNN.value) concentration = MLModel (concentration_params) concentration.prepare () print ('Concentration: %f' % concentration.predict (feature_vector)) concentration.release () # calc relaxation relaxation_params = BrainFlowModelParams (BrainFlowMetrics.RELAXATION.value, BrainFlowClassifiers.REGRESSION.value) relaxation = MLModel (relaxation_params) relaxation.prepare () print ('Relaxation: %f' % relaxation.predict (feature_vector)) relaxation.release ()
def __init__(self, serial_port='COM7', board_id=2, log='store_true', streamer_params='', ring_buffer_size=45000): # default board_id 2 for Cyton params = BrainFlowInputParams() params.serial_port = serial_port params.ip_port = 0 params.mac_address = '' params.other_info = '' params.serial_number = '' params.ip_address = '' params.ip_protocol = 0 params.timeout = 0 params.file = '' self.streamer_params = streamer_params self.ring_buffer_size = ring_buffer_size if (log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() self.board = BoardShim(board_id, params)
def main(): BoardShim.enable_dev_board_logger() logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser() parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') args = parser.parse_args() params = BrainFlowInputParams() params.mac_address = args.mac_address try: board_shim = BoardShim(BoardIds.ENOPHONE_BOARD, params) board_shim.prepare_session() board_shim.start_stream(450000, '') Graph(board_shim) except BaseException: logging.warning('Exception', exc_info=True) finally: logging.info('End') if board_shim.is_prepared(): logging.info('Releasing session') board_shim.release_session()
def main (): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--streamer-params', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger () else: BoardShim.disable_board_logger () board = BoardShim (args.board_id, params) board.prepare_session () board.start_stream () print('Session Started') for x in range(2): time.sleep (5) board.config_board ('/2') # enable analog mode only for Cyton Based Boards! time.sleep (5) data = board.get_board_data () board.stop_stream () board.release_session () """ data[BoardShim.get_other_channels(args.board_id)[0]] contains cyton end byte data[BoardShim.get_other_channels(args.board_id)[1....]] contains unprocessed bytes if end byte is 0xC0 there are accel data in data[BoardShim.get_accel_channels(args.board_id)[....]] else there are zeros if end byte is 0xC1 there are analog data in data[BoardShim.get_analog_channels(args.board_id)[....]] else there are zeros """ print (data[BoardShim.get_other_channels(args.board_id)[0]][0:5]) # should be standard end byte 0xC0 print (data[BoardShim.get_other_channels(args.board_id)[0]][-5:]) # should be analog and byte 0xC1 DataFilter.write_file (data, 'cyton_data_new.txt', 'w')
def main (): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger () else: BoardShim.disable_board_logger () board = BoardShim (args.board_id, params) board.prepare_session () # disable 2nd channel for cyton use real board to check it, emulator ignores commands if args.board_id == brainflow.board_shim.BoardIds.CYTON_BOARD.value: board.config_board ('x2100000X') board.start_stream () time.sleep (10) data = board.get_board_data () board.stop_stream () board.release_session () eeg_channels = BoardShim.get_eeg_channels (args.board_id) for count, channel in enumerate (eeg_channels): if count == 0: DataFilter.perform_bandpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 15.0, 6.0, 4, FilterTypes.BESSEL.value, 0) elif count == 1: DataFilter.perform_bandstop (data[channel], BoardShim.get_sampling_rate (args.board_id), 5.0, 1.0, 3, FilterTypes.BUTTERWORTH.value, 0) elif count == 2: DataFilter.perform_lowpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 9.0, 5, FilterTypes.CHEBYSHEV_TYPE_1.value, 1) elif count == 3: DataFilter.perform_highpass (data[channel], BoardShim.get_sampling_rate (args.board_id), 3.0, 4, FilterTypes.BUTTERWORTH.value, 0)
def main (): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--timeout', type = int, help = 'timeout for device discovery or connection', required = False, default = 0) parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--streamer-params', type = str, help = 'streamer params', required = False, default = '') parser.add_argument ('--serial-number', type = str, help = 'serial number', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout BoardShim.enable_dev_board_logger () board = BoardShim (args.board_id, params) board.prepare_session () board.start_stream () BoardShim.log_message (LogLevels.LEVEL_INFO.value, 'start sleeping in the main thread') time.sleep (10) data = board.get_current_board_data (20) # get 20 latest data points dont remove them from internal buffer board.stop_stream () board.release_session () # demo how to convert it to pandas DF and plot data # eeg_channels = BoardShim.get_eeg_channels (BoardIds.SYNTHETIC_BOARD.value) df = pd.DataFrame (np.transpose (data)) print ('Data From the Board') print (df.head (10)) # demo for data serialization using brainflow API, we recommend to use it instead pandas.to_csv() DataFilter.write_file (data, 'test.csv', 'w') # use 'a' for append mode restored_data = DataFilter.read_file ('test.csv') restored_df = pd.DataFrame (np.transpose (restored_data)) print ('Data From the File') print (restored_df.head (10))
def gen_EEG_wifi_LSL(lslname='eeg1A'): args = { "ip_port": 2190, "serial_port": "", "mac_address": "", "other_info": "", "serial_number": "", "ip_address": "192.168.4.1", #这个ip地址需要查看openbci板子的ip "ip_protocol": 2, "timeout": 0, "file": "", "log": True, "streamer_params": "", "board_id": -1, } args['board_id'] = 5 eegchannelsnums = 8 params = BrainFlowInputParams() params.ip_port = args['ip_port'] params.serial_port = args['serial_port'] params.mac_address = args['mac_address'] params.other_info = args['other_info'] params.serial_number = args['serial_number'] params.ip_address = args['ip_address'] params.ip_protocol = args['ip_protocol'] params.timeout = args['timeout'] params.file = args['file'] # self.str.set("ss" + self.eegserialport) if (args['log']): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() eegboard = BoardShim(args['board_id'], params) eegboard.prepare_session() # eegboard.config_board('~6') sample = eegboard.get_sampling_rate(eegboard.get_board_id()) #print('sample:',sample) eegboard.start_stream(45000, "") lslinfo = StreamInfo(lslname, 'EEG', eegchannelsnums, sample, 'float32', 'brain01') lsloutlet = StreamOutlet(lslinfo) sendeegThead = SendData(eegboard, lsloutlet) sendeegThead.start()
def main (): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port # https://brainflow.readthedocs.io/en/stable/SupportedBoards.html#supported-boards-label # board_id: 1 # serial_port field of BrainFlowInputParams structure # mac_address field of BrainFlowInputParams structure, if its empty BrainFlow will try to autodiscover Ganglion # optional: timeout field of BrainFlowInputParams structure, default is 15sec parser.add_argument ('--timeout', type = int, help = 'timeout for device discovery or connection', required = False, default = 0) parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--streamer-params', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout if (args.log): BoardShim.enable_dev_board_logger () else: BoardShim.disable_board_logger () board = BoardShim (args.board_id, params) board.prepare_session () # board.start_stream () # use this for default options board.start_stream (45000, args.streamer_params) # time.sleep (1) # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer data = board.get_board_data () # get all data and remove it from internal buffer board.stop_stream () board.release_session () print (data)
def main(): BoardShim.enable_dev_board_logger() logging.basicConfig(level=logging.DEBUG) parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards', required=False, default=BoardIds.SYNTHETIC_BOARD) parser.add_argument('--file', type=str, help='file', required=False, default='') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file try: board_shim = BoardShim(args.board_id, params) board_shim.prepare_session() board_shim.start_stream(450000, args.streamer_params) g = Graph(board_shim) except BaseException as e: logging.warning('Exception', exc_info=True) finally: logging.info('End') if board_shim.is_prepared(): logging.info('Releasing session') board_shim.release_session()
def main(): BoardShim.enable_dev_board_logger() parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--file', type=str, help='file', required=False, default='') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file board = BoardShim(args.board_id, params) board.prepare_session() # board.start_stream () # use this for default options board.start_stream(45000, args.streamer_params) time.sleep(10) # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer data = board.get_board_data() # get all data and remove it from internal buffer board.stop_stream() board.release_session() print(data)
def main (): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol synth_params = BrainFlowInputParams () if (args.log): BoardShim.enable_dev_board_logger () else: BoardShim.disable_board_logger () board = BoardShim (args.board_id, params) synth_board = BoardShim (brainflow.board_shim.BoardIds.SYNTHETIC_BOARD.value, synth_params) board.prepare_session () synth_board.prepare_session () board.start_stream () synth_board.start_stream () time.sleep (10) data = board.get_board_data () synth_data = synth_board.get_board_data () board.stop_stream () synth_board.stop_stream () # board.release_session () # test that we handle it correctly synth_board.release_session ()
def main(): parser = argparse.ArgumentParser() parser.add_argument('--serial-port', type=str, help='serial port', required=True) parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') args = parser.parse_args() BoardShim.enable_dev_board_logger() params = BrainFlowInputParams() params.serial_port = args.serial_port params.mac_address = args.mac_address board = BoardShim(BoardIds.GANGLION_BOARD.value, params) board.prepare_session() # expected result: 5 seconds of resistance data(unknown sampling rate) after that 5 seconds of exg data board.config_board('z') board.start_stream(45000, 'file://raw_data.csv:w') time.sleep(5) board.config_board('Z') time.sleep(5) data = board.get_board_data() board.stop_stream() board.release_session() print(data) resistance_channels = BoardShim.get_resistance_channels( BoardIds.GANGLION_BOARD.value) print(resistance_channels)
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--file', type=str, help='file', required=False, default='') parser.add_argument('--log', action='store_true') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() board = BoardShim(args.board_id, params) board.prepare_session() # board.start_stream () # use this for default options board.start_stream(45000, args.streamer_params) data = np.empty(shape=(31, 0)) print('Started streaming') start_time = time.time() while True: try: # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer new_data = board.get_board_data() print('new data shape is ' + str(new_data.shape)) data = np.concatenate( (data, new_data), axis=-1) # get all data and remove it from internal buffer except KeyboardInterrupt: f_sample = data.shape[-1] / (time.time() - start_time) print('Stopped streaming, sampling rate = ' + str(f_sample)) break board.stop_stream() board.release_session() print(data) return data
def initialise_brainflow(): BoardShim.enable_dev_board_logger() parser = ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--file', type=str, help='file', required=False, default='') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file params.board_id = args.board_id return params, args
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') parser.add_argument('--run-time', type=int, help='run time for one iteration in sec', required=True) parser.add_argument('--num-iters', type=int, help='number of iterations', default=1) parser.add_argument( '--channels', type=str, help='channels to plot in format 0,1,2 by default plot all channels', default=None) parser.add_argument('--config-file', type=str, help='file with strings to send to device', default=None) args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() # for streaming board need to use master board id master_board_id = args.board_id if args.board_id == BoardIds.STREAMING_BOARD.value: master_board_id = int(params.other_info) board = BoardShim(args.board_id, params) board.prepare_session() if args.config_file: with open(args.config_file) as file: lines = file.readlines() for line in lines: board.config_board(line) buffer_size = int( BoardShim.get_sampling_rate(master_board_id) * args.run_time * 1.2) # + 20% for safety if master_board_id in (BoardIds.CYTON_BOARD.value, BoardIds.CYTON_WIFI_BOARD.value, BoardIds.GANGLION_WIFI_BOARD.value): bytes_per_package = 33 elif master_board_id in (BoardIds.CYTON_DAISY_BOARD, BoardIds.CYTON_DAISY_WIFI_BOARD.value): bytes_per_package = 66 elif master_board_id == BoardIds.SYNTHETIC_BOARD.value: bytes_per_package = 104 elif master_board_id == BoardIds.NOVAXR_BOARD.value: bytes_per_package = 72 else: raise ValueError('unsupported board') timestamp_channel = BoardShim.get_timestamp_channel(master_board_id) package_num_channel = BoardShim.get_package_num_channel(master_board_id) try: cur_id = 0 for i in range(args.num_iters): # wait for an input input('Press Enter to continue...') BoardShim.log_message( LogLevels.LEVEL_INFO.value, '\nRunning iteration %d/%d\n' % (i, args.num_iters)) # start stream and get data board.start_stream(buffer_size, args.streamer_params) time.sleep(args.run_time) board.stop_stream() data = board.get_board_data() if data.shape[1] == 0: BoardShim.log_message(LogLevels.LEVEL_WARN.value, '\nNo data received!\n') continue # calculate some metrics total_bytes_received = bytes_per_package * data.shape[1] packages_per_sec = float(data.shape[1]) / float(args.run_time) timestamp_array = data[timestamp_channel] time_diff_array = list() for i in range(0, timestamp_array.size - 1): time_diff_array.append(timestamp_array[i + 1] - timestamp_array[i]) package_num_array = data[package_num_channel] lost_packages = 0 expected = package_num_array[0] while cur_id < package_num_array.size: if expected == 256: expected = 0 if package_num_array[cur_id] != expected: BoardShim.log_message( LogLevels.LEVEL_WARN.value, 'package loss detected: position %d package_num value %d expected value %d' % (cur_id, package_num_array[cur_id], expected)) lost_packages = lost_packages + 1 else: cur_id = cur_id + 1 expected = expected + 1 package_loss = (lost_packages / data.shape[1]) * 100 # provide results for iteration BoardShim.log_message(LogLevels.LEVEL_INFO.value, '\nResults:\n') BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'package loss percent %f' % package_loss) BoardShim.log_message( LogLevels.LEVEL_INFO.value, 'average time delta %f' % statistics.mean(time_diff_array)) BoardShim.log_message( LogLevels.LEVEL_INFO.value, 'std deviation of time delta %f' % statistics.pstdev(time_diff_array)) BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'total packages received %d' % data.shape[1]) BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'packages per sec %f' % packages_per_sec) BoardShim.log_message( LogLevels.LEVEL_INFO.value, 'total bytes received %d' % total_bytes_received) # plot data eeg_channels = BoardShim.get_eeg_channels(master_board_id) emg_channels = BoardShim.get_emg_channels(master_board_id) total_channels = list() if args.channels is not None: selected_channels = [int(x) for x in args.channels.split(',')] temp_channels = eeg_channels for ch in emg_channels: if ch not in temp_channels: temp_channels.append(ch) for i in range(len(temp_channels)): if i in selected_channels: total_channels.append(temp_channels[i]) else: # for cyton/ganglion eeg_channels and emg_channels are the same array because we can not split it # for novaxr its 2 different arrays, join them total_channels = eeg_channels for ch in emg_channels: if ch not in total_channels: total_channels.append(ch) total_channels.append(timestamp_channel) columns = list() for i in range(len(total_channels) - 1): columns.append('channel_%d' % (int(total_channels[i]) - 1)) columns.append('timestamp') df = pd.DataFrame(np.transpose(data)) df.to_csv('all_data_%d.csv' % i) df_to_plot = df[total_channels] df_to_plot.columns = columns df_to_plot.to_csv('selected_data_%d.csv' % i) df_to_plot.plot(subplots=True, x='timestamp', style='.-') plt.show() finally: # release session in the end board.release_session()
marker="o", ls="", ms=3) ax3.annotate( "{:.2f}".format(avg_freq[left_lim:right_lim][value]), (avg_freq[left_lim:right_lim][value], sum_welch[left_lim:right_lim][value] / cols.size), verticalalignment="top") plt.tight_layout() BoardShim.enable_dev_board_logger() params = BrainFlowInputParams() params.serial_port = serial_port params.mac_address = mac_address board = BoardShim(board_id, params) board.prepare_session() board.start_stream() BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'start sleeping in the main thread') if (create_csv): label_list = [None] * BoardShim.get_num_rows(board_id) label_dict = { "Battery": label_extractor(BoardShim.get_battery_channel, board_id, False), "EEG": label_extractor(BoardShim.get_eeg_channels, board_id, True), "EMG": label_extractor(BoardShim.get_emg_channels, board_id, True),
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') args = parser.parse_args() # in fact it can be CytonDaisy or Wifi Shield based boards, limit it to only Cyton in demo if args.board_id != BoardIds.CYTON_BOARD.value: raise ValueError('wrong board id, should be Cyton') params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() board = BoardShim(args.board_id, params) board.prepare_session() board.config_board('/2') # enable analog mode only for Cyton Based Boards! board.start_stream() time.sleep(10) data = board.get_board_data() board.stop_stream() board.release_session() other_channels = BoardShim.get_other_channels(args.board_id) accel_channels = BoardShim.get_accel_channels(args.board_id) analog_channels = BoardShim.get_analog_channels(args.board_id) """ data format for cyton with analog and accel data, data[get_other_channels(board_id)[0]] contains cyton end byte if end byte is 0xC0 there are accel data in data[get_accel_channels(board_id)[....]] else there are zeros if end byte is 0xC1 there are analog data in data[get_analog_channels(board_id)[....]] else there are zeros """ if not other_channels: raise ValueError('no cyton end byte foud') print('end bytes for first 20 packages:') print(data[other_channels[0]][0:20]) # we send /2 to enable analog mode so here we will see zeroes print('accel data for first 20 packages:') for count, channel in enumerate(accel_channels): print(data[channel][0:20]) # analog data are in int32 format but we return single array fron low level api so it was casted to double wo any changes print('analog data for first 20 packages:') for count, channel in enumerate(analog_channels): print(data[channel][0:20])
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() board = BoardShim(args.board_id, params) board.prepare_session() # disable 2nd channel for cyton use real board to check it, emulator ignores commands if args.board_id == brainflow.board_shim.BoardIds.CYTON_BOARD.value: board.config_board('x2100000X') board.start_stream() time.sleep(10) data = board.get_board_data() board.stop_stream() board.release_session() print(data)
def get_input(): parser = argparse.ArgumentParser() parser.add_argument('--runtime', type=int, help='max time to sleep in the main thread in seconds', default=1800, required=False) # brainflow args parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=False, default=int(BoardIds.ENOPHONE_BOARD)) parser.add_argument('--file', type=str, help='file', required=False, default='') # spotify args parser.add_argument('--redirect-uri', type=str, default=None) parser.add_argument('--client-id', type=str, default=None) parser.add_argument('--client-secret', type=str, default=None) parser.add_argument('--username', type=str, required=True) args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file token = util.prompt_for_user_token(args.username, scope='user-read-currently-playing', client_id=args.client_id, client_secret=args.client_secret, redirect_uri=args.redirect_uri) return args.board_id, params, token, args.runtime
def main(): parser = argparse.ArgumentParser () # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument ('--timeout', type = int, help = 'timeout for device discovery or connection', required = False, default = 0) parser.add_argument ('--ip-port', type = int, help = 'ip port', required = False, default = 0) parser.add_argument ('--ip-protocol', type = int, help = 'ip protocol, check IpProtocolType enum', required = False, default = 0) parser.add_argument ('--ip-address', type = str, help = 'ip address', required = False, default = '') parser.add_argument ('--serial-port', type = str, help = 'serial port', required = False, default = '') parser.add_argument ('--mac-address', type = str, help = 'mac address', required = False, default = '') parser.add_argument ('--other-info', type = str, help = 'other info', required = False, default = '') parser.add_argument ('--streamer-params', type = str, help = 'streamer params', required = False, default = '') parser.add_argument ('--serial-number', type = str, help = 'serial number', required = False, default = '') parser.add_argument ('--board-id', type = int, help = 'board id, check docs to get a list of supported boards', required = True) parser.add_argument ('--log', action = 'store_true') args = parser.parse_args () params = BrainFlowInputParams () params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout if (args.log): BoardShim.enable_dev_board_logger () else: BoardShim.disable_board_logger () board = BoardShim (args.board_id, params) board.prepare_session () board.start_stream (45000, args.streamer_params) model = P300ClassifierLDA() model.load("test-model") figlet = Figlet(font='slant') stopped = True raw = None time.sleep(3) while stopped: try: with mne.utils.use_log_level('error'): # time.sleep(MICROSECONDS_BEFORE_STIMULUS / 1000) # show_stimulus() # time.sleep(MICROSECONDS_AFTER_STIMULUS / 1000) data = board.get_current_board_data(SAMPLES_TOTAL) # TODO constant from model raw = create_raw(data, model) prediction = prepare_raw(raw, model) print_prediction(figlet, prediction) except KeyboardInterrupt: print("Got keyboard interrupt, stopping...") break board.stop_stream () board.release_session ()
def main(): # =========================================== Boiler Plate Code BoardShim.enable_dev_board_logger() parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False, default=0) parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='streamer params', required=False, default='') parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--file', type=str, help='file', required=False, default='') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file # =========================================== Experiment Setup # Change the resolution based on your machine: (height x width x channels) window_size = (960, 1920, 3) # Define the points that form the polygons of the arrow up_body_pts = [(870, 350), (870, 900), (1050, 900), (1050, 350)] up_head_pts = [(960, 50), (745, 350), (1175, 350)] # (x,y) coordinates of the center of the screen center = (960, 480) # Make an image of an arrow pointing up up_arrow = np.zeros(window_size, np.uint8) body = np.array(up_body_pts, np.int32) head = np.array(up_head_pts, np.int32) make_arrow(up_arrow, head, body) # Make an image of an arrow pointing down down_arrow = np.zeros(window_size, np.uint8) body = np.array(rotate(up_body_pts, center, 180), np.int32) head = np.array(rotate(up_head_pts, center, 180), np.int32) make_arrow(down_arrow, head, body) # Make an image of an arrow pointing left left_arrow = np.zeros(window_size, np.uint8) body = np.array(rotate(up_body_pts, center, 270), np.int32) head = np.array(rotate(up_head_pts, center, 270), np.int32) make_arrow(left_arrow, head, body) # Make an image of an arrow pointing right right_arrow = np.zeros(window_size, np.uint8) body = np.array(rotate(up_body_pts, center, 90), np.int32) head = np.array(rotate(up_head_pts, center, 90), np.int32) make_arrow(right_arrow, head, body) # Make a blank screen with black background blank_screen = np.zeros(window_size, np.uint8) # Make an image of a fixation cross on a black background blank_cross = np.copy(blank_screen) make_cross(blank_cross, 10) # Organize all images in a list visual_cues = [blank_screen, up_arrow, down_arrow, left_arrow, right_arrow] # Generate a random sequence of 48 visual cues ensuring that the cues are uniformly distributed: rand_seq = [1, 2, 3, 4] rand_seq = np.repeat(rand_seq, 4) rand_seq = np.random.permutation(rand_seq) # Show a blank screen and immediately move the window to the upper left corner so that it occupies the entire screen cv.imshow('window', blank_screen) cv.moveWindow('window', 0, 0) cv.waitKey(1) # Make a board object and let the API initialize the board board = BoardShim(args.board_id, params) board.prepare_session() # 50 trials/session * 8 sec/trial * 250 samples/sec = 100 000 * SF = 1.25 = 125000 samples in buffer board.start_stream(125000, args.streamer_params) # =========================================== Running the Experiment for code in rand_seq: # Display blank screen for 2 seconds board.insert_marker(6) cv.imshow('window', blank_screen) cv.waitKey(2000) # Display blank screen with fixation cross for 2 seconds board.insert_marker(5) cv.imshow('window', blank_cross) cv.waitKey(2000) # Display visual cue with fixation cross for 1.25 seconds followed by fixation cross for 2.75 seconds board.insert_marker(code) cv.imshow('window', visual_cues[code]) cv.waitKey(1250) cv.imshow('window', blank_cross) cv.waitKey(2750) cv.destroyAllWindows() # Get all the data stored in the buffer and terminate all background processes data = board.get_board_data() board.stop_stream() board.release_session()
def _start(): """Start the module This uses the global variables from setup and adds a set of global variables """ global parser, args, config, r, response, patch global monitor, debug, delay, ft_host, ft_port, ft_output, board_id, streamer_params, params, board # this can be used to show parameters that have changed monitor = EEGsynth.monitor(name=name, debug=patch.getint("general", "debug")) # get the general options from the configuration file debug = patch.getint("general", "debug") delay = patch.getfloat("general", "delay") try: ft_host = patch.getstring("fieldtrip", "hostname") ft_port = patch.getint("fieldtrip", "port") monitor.success("Trying to connect to buffer on %s:%i ..." % (ft_host, ft_port)) ft_output = FieldTrip.Client() ft_output.connect(ft_host, ft_port) monitor.success("Connected to output FieldTrip buffer") except: raise RuntimeError("cannot connect to output FieldTrip buffer") # get the options that are specific for BrainFlow board_id = patch.getint("brainflow", "board_id", default=-1) streamer_params = patch.getstring("brainflow", "streamer_params", default=None) params = BrainFlowInputParams() params.ip_port = patch.getint("brainflow", "ip_port", default=0) params.serial_port = patch.getstring("brainflow", "serial_port", default="/dev/cu.usbmodem11") params.mac_address = patch.getstring("brainflow", "mac_address", default="") params.other_info = patch.getstring("brainflow", "other_info", default="") params.serial_number = patch.getstring("brainflow", "serial_number", default="") params.ip_address = patch.getstring("brainflow", "ip_address", default="") params.ip_protocol = patch.getint("brainflow", "ip_protocol", default=0) params.timeout = patch.getint("brainflow", "timeout", default=0) params.file = patch.getstring("brainflow", "file", default="") monitor.success("Starting BrainFlow ...") BoardShim.disable_board_logger() # BoardShim.enable_board_logger() # BoardShim.enable_dev_board_logger() board = BoardShim(board_id, params) board.prepare_session() board.start_stream(45000, streamer_params) # get all data and remove it from internal buffer board.get_board_data() monitor.success("Connected to " + board.get_device_name(board_id)) monitor.info("fsample =", board.get_sampling_rate(board_id)) monitor.info("nchans =", board.get_num_rows(board_id)) ft_output.putHeader(board.get_num_rows(board_id), float(board.get_sampling_rate(board_id)), FieldTrip.DATATYPE_FLOAT32) # there should not be any local variables in this function, they should all be global if len(locals()): print("LOCALS: " + ", ".join(locals().keys()))
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') parser.add_argument('--run-time', type=int, help='run time in sec', required=True) args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() # for streaming board need to use master board id master_board_id = args.board_id if args.board_id == BoardIds.STREAMING_BOARD.value: master_board_id = int(params.other_info) board = BoardShim(args.board_id, params) board.prepare_session() buffer_size = int( BoardShim.get_sampling_rate(master_board_id) * args.run_time * 1.2) # + 20% for safety board.start_stream(buffer_size, args.streamer_params) time.sleep(args.run_time) board.stop_stream() data = board.get_board_data() board.release_session() if master_board_id in (BoardIds.CYTON_BOARD.value, BoardIds.CYTON_WIFI_BOARD.value, BoardIds.GANGLION_WIFI_BOARD.value): bytes_per_package = 33 elif master_board_id in (BoardIds.CYTON_DAISY_BOARD, BoardIds.CYTON_DAISY_WIFI_BOARD.value): bytes_per_package = 66 elif master_board_id == BoardIds.SYNTHETIC_BOARD.value: bytes_per_package = 104 elif master_board_id == BoardIds.NOVAXR_BOARD.value: bytes_per_package = 72 else: raise ValueError('unsupported board') total_bytes_received = bytes_per_package * data.shape[1] packages_per_sec = float(data.shape[1]) / float(args.run_time) timestamp_channel = BoardShim.get_timestamp_channel(master_board_id) timestamp_array = data[timestamp_channel] time_diff_array = list() for i in range(0, timestamp_array.size - 1): time_diff_array.append(timestamp_array[i + 1] - timestamp_array[i]) package_num_channel = BoardShim.get_package_num_channel(master_board_id) package_num_array = data[package_num_channel] lost_packages = 0 expected = 0 cur_id = 0 while cur_id < package_num_array.size: if expected == 256: expected = 0 if package_num_array[cur_id] != expected: BoardShim.log_message( LogLevels.LEVEL_WARN.value, 'package loss detected: position %d package_num value %d expected value %d' % (cur_id, package_num_array[cur_id], expected)) lost_packages = lost_packages + 1 else: cur_id = cur_id + 1 expected = expected + 1 package_loss = (lost_packages / data.shape[1]) * 100 BoardShim.log_message(LogLevels.LEVEL_INFO.value, '\nResults:\n') BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'package loss percent %f' % package_loss) BoardShim.log_message( LogLevels.LEVEL_INFO.value, 'average time delta %f' % statistics.mean(time_diff_array)) BoardShim.log_message( LogLevels.LEVEL_INFO.value, 'std deviation of time delta %f' % statistics.pstdev(time_diff_array)) BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'total packages received %d' % data.shape[1]) BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'packages per sec %f' % packages_per_sec) BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'total bytes received %d' % total_bytes_received) eeg_channels = BoardShim.get_eeg_channels(master_board_id) emg_channels = BoardShim.get_emg_channels(master_board_id) total_channels = eeg_channels # for cyton/ganglion eeg_channels and emg_channels are the same array because we can not split it # for novaxr its 2 different arrays, join them for ch in emg_channels: if ch not in total_channels: total_channels.append(ch) df = pd.DataFrame(np.transpose(data)) df[total_channels].to_csv('eeg_emg_data.csv') df.to_csv('all_data.csv') plt.figure() df[total_channels].plot(subplots=True) plt.show()
def main(): """Main method to start the app and responsible to receive and process args""" BoardShim.enable_dev_board_logger() parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser.add_argument( "--timeout", type=int, help="timeout for device discovery or connection", required=False, default=0, ) parser.add_argument("--ip-port", type=int, help="ip port", required=False, default=0) parser.add_argument( "--ip-protocol", type=int, help="ip protocol, check IpProtocolType enum", required=False, default=0, ) parser.add_argument("--ip-address", type=str, help="ip address", required=False, default="") parser.add_argument("--serial-port", type=str, help="serial port", required=True, default="") parser.add_argument("--mac-address", type=str, help="mac address", required=False, default="") parser.add_argument("--other-info", type=str, help="other info", required=False, default="") parser.add_argument( "--streamer-params", type=str, help="streamer params", required=False, default="", ) parser.add_argument("--serial-number", type=str, help="serial number", required=False, default="") parser.add_argument( "--board-id", type=int, help="board id, check docs to get a list of supported boards", required=True, ) parser.add_argument("--file", type=str, help="file", required=False, default="") args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.serial_number = args.serial_number params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol params.timeout = args.timeout params.file = args.file global board global input board = BoardShim(args.board_id, params) input = args.streamer_params start_test()
def return_prediction(): #ms = post_id # Lines 27-65 copied from https://brainflow.readthedocs.io/en/stable/Examples.html # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port params = BrainFlowInputParams() params.board_id = 1 params.serial_port = "COM4" params.mac_address = "DC:3D:46:E5:10:99" board = BoardShim(1, params) board.prepare_session() board.start_stream() # use this for default options data = board.get_current_board_data( 256 ) # get latest 256 packages or less, doesnt remove them from internal buffer board.stop_stream() board.release_session() # return 'a string' # CONNECT THE DATA TO THE MODEL FOR PREDICTIONS # Test Sample Data # data = 'https://archlife.org/wp-content/uploads/2020/03/OpenBCI-RAW-right0.txt' # column_names = ['index', 'channel1','channel2', 'channel3', 'channel4', 'accel1', 'accel2', 'accel3', 'timestamp', 'aux'] # dropped_row_indices = [0, 1, 2, 3, 4, 5] # df = pd.DataFrame(data=data, columns=column_names) # df = df.drop(dropped_row_indices, axis=0).reset_index() # df = df.drop(['level_0', 'index', 'timestamp'], axis=1) df = pd.DataFrame({ 'channel1': data[0], 'channel2': data[1], 'channel3': data[2], 'channel4': data[3], 'accel1': data[4], 'accel2': data[5], 'accel3': data[6], 'aux': data[8] }) df = df.dropna(axis=0) model = joblib.load('flask_test/rfc.joblib') commands_proba = model.predict_proba(df) commands_pred = model.predict(df) commands_df = pd.DataFrame({ 'index': df.index, 'predictions': commands_pred }) commands_df['predictions'] = commands_df['predictions'].astype('int64') command_count = commands_df['predictions'].value_counts() ccdf = pd.DataFrame({ 'index': command_count.index, 'predictions': command_count }) preds = ccdf['index'].values command_pred = preds[0] return str(command_pred)
def main(): parser = argparse.ArgumentParser() # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port, parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() # demo how to read data as 2d numpy array board = BoardShim(args.board_id, params) board.prepare_session() board.start_stream() BoardShim.log_message(LogLevels.LEVEL_INFO.value, 'start sleeping in the main thread') time.sleep(10) # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer data = board.get_board_data( ) # get all data and remove it from internal buffer board.stop_stream() board.release_session() # demo how to convert it to pandas DF and plot data eeg_channels = BoardShim.get_eeg_channels(args.board_id) df = pd.DataFrame(np.transpose(data)) print('Data From the Board') print(df.head()) plt.figure() df[eeg_channels].plot(subplots=True) plt.savefig('before_processing.png') # demo for data serialization DataFilter.write_file(data, 'test.csv', 'w') restored_data = DataFilter.read_file('test.csv') restored_df = pd.DataFrame(np.transpose(restored_data)) print('Data From the File') print(restored_df.head()) # demo how to perform signal processing for count, channel in enumerate(eeg_channels): if count == 0: DataFilter.perform_bandpass( data[channel], BoardShim.get_sampling_rate(args.board_id), 15.0, 6.0, 4, FilterTypes.BESSEL.value, 0) elif count == 1: DataFilter.perform_bandstop( data[channel], BoardShim.get_sampling_rate(args.board_id), 5.0, 1.0, 3, FilterTypes.BUTTERWORTH.value, 0) elif count == 2: DataFilter.perform_lowpass( data[channel], BoardShim.get_sampling_rate(args.board_id), 9.0, 5, FilterTypes.CHEBYSHEV_TYPE_1.value, 1) elif count == 3: DataFilter.perform_highpass( data[channel], BoardShim.get_sampling_rate(args.board_id), 3.0, 4, FilterTypes.BUTTERWORTH.value, 0) df = pd.DataFrame(np.transpose(data)) print('Data After Processing') print(df.head()) plt.figure() df[eeg_channels].plot(subplots=True) plt.savefig('after_processing.png')
def return_prediction(): #ms = post_id # Lines 27-65 copied from https://brainflow.readthedocs.io/en/stable/Examples.html # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port parser = argparse.ArgumentParser() parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0) parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False, default=0) parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='') parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='') parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='') parser.add_argument('--other-info', type=str, help='other info', required=False, default='') parser.add_argument('--streamer-params', type=str, help='other info', required=False, default='') parser.add_argument( '--board-id', type=int, help='board id, check docs to get a list of supported boards', required=True) parser.add_argument('--log', action='store_true') args = parser.parse_args() params = BrainFlowInputParams() params.ip_port = args.ip_port params.serial_port = args.serial_port params.mac_address = args.mac_address params.other_info = args.other_info params.ip_address = args.ip_address params.ip_protocol = args.ip_protocol if (args.log): BoardShim.enable_dev_board_logger() else: BoardShim.disable_board_logger() board = BoardShim(args.board_id, params) board.prepare_session() board.start_stream() # use this for default options board.start_stream(ms, args.streamer_params) time.sleep(3000 / 1000) data = board.get_current_board_data( 256 ) # get latest 256 packages or less, doesnt remove them from internal buffer data = board.get_board_data( ) # get all data and remove it from internal buffer board.stop_stream() board.release_session() # CONNECT THE DATA TO THE MODEL FOR PREDICTIONS # Test Sample Data #data = 'https://archlife.org/wp-content/uploads/2020/03/OpenBCI-RAW-right0.txt' column_names = [ 'index', 'channel1', 'channel2', 'channel3', 'channel4', 'accel1', 'accel2', 'accel3', 'timestamp', 'aux' ] dropped_row_indices = [0, 1, 2, 3, 4, 5] df = pd.read_csv(data, sep=',', header=None, names=column_names) df = df.drop(dropped_row_indices, axis=0).reset_index() df = df.drop(['level_0', 'index', 'timestamp'], axis=1) df = df.dropna(axis=0) model = joblib.load('flask_test/rfc.joblib') commands_proba = model.predict_proba(df) commands_pred = model.predict(df) commands_df = pd.DataFrame({ 'index': df.index, 'predictions': commands_pred }) commands_df['predictions'] = commands_df['predictions'].astype('int64') command_count = commands_df['predictions'].value_counts() ccdf = pd.DataFrame({ 'index': command_count.index, 'predictions': command_count }) preds = ccdf['index'].values command_pred = preds[0] return str(command_pred)