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
Ejemplo n.º 2
0
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 ()
Ejemplo n.º 3
0
    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)