def blinks_detector(quit_program, blink, blink_det, blinks_num): def detect_blinks(sample): smp = sample.channels_data[0] smp_flted = frt.filterIIR(smp, 0) #print(smp_flted) brt.blink_detect(smp_flted, -38000) # report it the new blink is spotted if brt.new_blink: if brt.blinks_num == 1: # First detected blink is in fact artifact from filter # settling. Correct blink number by subtracting 1. # First "blink" successfully detected - device is connected. connected.set() print('CONNECTED. Speller starts detecting blinks.') else: blink_det.put(brt.blinks_num) blinks_num.value = brt.blinks_num blink.value = 1 print('BLINK!') if quit_program.is_set(): print('Disconnect signal sent...') board.stop_stream() if __name__ == '__main__': # filtering in real time object creation frt = flt.FltRealTime() # blink detection in real time object creation brt = blk.BlinkRealTime() board = OpenBCIGanglion(mac=mac_adress) board.start_stream(detect_blinks)
def blinks_detector( quit_program, blink_det, blinks_num, blink, ): def detect_blinks(sample): if SYMULACJA_SYGNALU: smp_flted = sample else: smp = sample.channels_data[0] smp_flted = frt.filterIIR(smp, 0) #print(smp_flted) brt.blink_detect(smp_flted, -38000) if brt.new_blink: if brt.blinks_num == 1: #connected.set() print('CONNECTED. Speller starts detecting blinks.') else: blink_det.put(brt.blinks_num) blinks_num.value = brt.blinks_num blink.value = 1 print("sss") if quit_program.is_set(): if not SYMULACJA_SYGNALU: print('Disconnect signal sent...') board.stop_stream() #################################################### SYMULACJA_SYGNALU = False #################################################### mac_adress = 'e5:32:b4:53:55:ba' #################################################### clock = pg.time.Clock() frt = flt.FltRealTime() brt = blk.BlinkRealTime() if SYMULACJA_SYGNALU: df = pd.read_csv('dane_do_symulacji/data.csv') for sample in df['signal']: if quit_program.is_set(): break detect_blinks(sample) clock.tick(200) print('KONIEC SYGNAŁU') quit_program.set() else: board = OpenBCIGanglion(mac=mac_adress) board.start_stream(detect_blinks)
def blinks_detector( quit_program, blink_det, blinks_num, blink, ): def detect_blinks(sample): if SYMULACJA_SYGNALU: smp_flted = sample else: smp = sample.channels_data[0] smp_flted = frt.filterIIR(smp, 0) brt.blink_detect(smp_flted, -38000) if brt.new_blink: if brt.blinks_num == 1: #connected.set() print('CONNECTED. Speller starts detecting blinks.') else: blink_det.put(brt.blinks_num) blinks_num.value = brt.blinks_num blink.value = 1 if quit_program.is_set(): if not SYMULACJA_SYGNALU: print('Disconnect signal sent...') board.stop_stream() def draw_signal(sample): for event in pg.event.get(): pass detect_blinks(sample) if not SYMULACJA_SYGNALU: smp = sample.channels_data[0] sample = frt.filterIIR(smp, 0) oldview = screen.copy() screen.fill(WHITE) screen.blit(oldview, toleft) values["all"].append(sample) if values["all"][0] == values["range"][0]: values["range"][0] = min(values["all"][1:]) redraw_all(screen, values) if values["all"][0] == values["range"][1]: values["range"][1] = max(values["all"][1:]) redraw_all(screen, values) values["all"] = values["all"][1:] if sample < values["range"][0]: values["range"][0] = sample redraw_all(screen, values) if sample > values["range"][1]: values["range"][1] = sample redraw_all(screen, values) zero = int(map_value(0, values["range"], RANGE)) pg.draw.line(screen, BLACK, (WIDTH - 2, zero), (WIDTH - 1, zero), 1) sample = int(map_value(sample, values["range"], RANGE)) pg.draw.line(screen, BLUE, (WIDTH - 2, values["last"]), (WIDTH - 1, sample), 3) pg.display.update() values["last"] = sample def map_value(x, a, b): return (x - a[0]) * ((b[1] - b[0]) / (a[1] - a[0])) + b[0] def redraw_all(display, values): display.fill(WHITE) mapped = [] for v in values["all"]: mapped.append(map_value(v, values["range"], RANGE)) zero = int(map_value(0, values["range"], RANGE)) pg.draw.line(screen, BLACK, (0, zero), (WIDTH - 1, zero), 1) for i in range(len(mapped) - 2): pg.draw.line(screen, BLUE, (i, mapped[i]), (i + 1, mapped[i + 1]), 3) pg.display.update() #################################################### SYMULACJA_SYGNALU = True #################################################### RYSOWANIE_WYKRESU = True #################################################### mac_adress = 'd2:b4:11:81:48:ad' #################################################### clock = pg.time.Clock() frt = flt.FltRealTime() brt = blk.BlinkRealTime() if RYSOWANIE_WYKRESU: WIDTH, HEIGHT = 900, 550 RANGE = (HEIGHT - 20, 20) WHITE = (0xff, 0xff, 0xff) BLACK = (0x00, 0x00, 0x00) BLUE = (0x00, 0x00, 0xff) pg.init() pg.display.set_caption("graph") screen = pg.display.set_mode((WIDTH, HEIGHT)) screen.fill(WHITE) toleft = pg.Rect(-1, 0, WIDTH, HEIGHT) values = { "last": 0, "range": [0, 0], "all": [0] * WIDTH, } main_func = draw_signal else: main_func = detect_blinks if SYMULACJA_SYGNALU: df = pd.read_csv('dane_do_symulacji/data.csv') for sample in df['signal']: if quit_program.is_set(): break main_func(sample) clock.tick(200) print('KONIEC SYGNAŁU') quit_program.set() else: board = OpenBCIGanglion(mac=mac_adress) board.start_stream(main_func)