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 (): params = BrainFlowInputParams () params.board_id = 1 board_id = 1 params.serial_port = 'COM3' sampling_rate = BoardShim.get_sampling_rate (board_id) time_thres = 100 max_val = -100000000000 vals_mean = 0 num_samples = 5000 samples = 0 BoardShim.enable_dev_board_logger () board = BoardShim (board_id, params) board.prepare_session () if board_id == brainflow.board_shim.BoardIds.GANGLION_BOARD.value: board.config_board ('x1060000X') board.start_stream (45000) print("starting calibration") time.sleep(5) data = board.get_board_data() print("start blinking") while(samples < num_samples): data = board.get_board_data() if(len(data[1]) > 0): DataFilter.perform_rolling_filter (data[1], 2, AggOperations.MEAN.value) vals_mean += sum([data[1,i]/num_samples for i in range(len(data[1]))]) samples += len(data[1]) if(np.amax(data[1]) > max_val): max_val = np.amax(data[1]) blink_thres = 0.5*((max_val - vals_mean)**2) print("mean value") print(vals_mean) print("max value") print(max_val) print("threshold") print(blink_thres) print("CALIBRATION DONE START PLAYING") prev_time = int(round(time.time() * 1000)) while True: data = board.get_board_data() if(len(data[1]) > 0): DataFilter.perform_rolling_filter (data[1], 2, AggOperations.MEAN.value) if((int(round(time.time() * 1000)) - time_thres) > prev_time): prev_time = int(round(time.time() * 1000)) for element in data[1]: if(((element - vals_mean)**2) >= blink_thres): pydirectinput.press('space') break board.stop_stream () board.release_session ()
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)