| @ -0,0 +1,100 @@ | |||
| import cv2 | |||
| import serial | |||
| import threading | |||
| import time | |||
| class Frame(): | |||
| def __init__(self, time, data): | |||
| self.time = time | |||
| self.data = data | |||
| class GridEye(): | |||
| def __init__(self, serialPort, baudrate): | |||
| self.port = serial.Serial(serialPort, baudrate) | |||
| self.frames = [] | |||
| self.reading = True | |||
| self.thread = threading.Thread(target = self.reader) | |||
| self.thread.setDaemon(True) | |||
| def start(self): | |||
| self.thread.start() | |||
| def stop(self): | |||
| self.reading = False | |||
| self.thread.join() | |||
| def reader(self): | |||
| data = [] | |||
| data_time = 0; | |||
| while (self.reading): | |||
| line = b'' | |||
| while (self.reading): | |||
| c = self.port.read() | |||
| if c == b'\r': | |||
| c = self.port.read() | |||
| break | |||
| if c == b'\n': | |||
| break | |||
| line += c | |||
| #line = self.port.readline()#.decode('utf-8') | |||
| # if line: | |||
| # print (line) | |||
| # time.sleep(0.01) | |||
| # if self.port.in_waiting > 0: | |||
| # print (self.port.in_waiting) | |||
| if b'#' in line: | |||
| if len(data) == 8: | |||
| print (data_time) | |||
| #print (data) | |||
| self.frames.append(Frame(data_time, data)) | |||
| if len(self.frames) > 100: | |||
| self.frames.pop(0) | |||
| else: | |||
| print ('something wrong', len(data)) | |||
| data_time = time.time() | |||
| data = [] | |||
| else: | |||
| try: | |||
| row = [float(x) for x in line.split()] | |||
| if len(row) == 8: | |||
| data.append(row) | |||
| except ValueError as e: | |||
| print ('error', e) | |||
| data_time = time.time() | |||
| data = [] | |||
| if len(data) > 8: | |||
| data.pop(0) | |||
| if __name__ == '__main__': | |||
| import cv2 | |||
| import numpy as np | |||
| SIZE = 128 | |||
| overlap = 120 | |||
| grideye = GridEye('COM12', 115200) | |||
| grideye.start() | |||
| cv2.imshow('sample', np.empty((SIZE*2,SIZE*2), np.uint8)) | |||
| while True: | |||
| if len(grideye.frames) > 0: | |||
| frame = grideye.frames.pop(0) | |||
| img = (np.array(frame.data)-15)*10 | |||
| img = cv2.resize(img.astype(np.uint8), (SIZE,SIZE), interpolation = cv2.INTER_LINEAR) | |||
| img2 = np.copy(img) | |||
| out = np.empty((SIZE*2, SIZE*2), dtype=np.uint16) | |||
| out[:SIZE, :SIZE] = img | |||
| out[:SIZE, SIZE:] = img2 | |||
| out[SIZE:, :SIZE] = img | |||
| out[SIZE:, (SIZE-overlap):SIZE] += img2[:,:overlap] | |||
| out[SIZE:, (SIZE-overlap):SIZE] = out[SIZE:, (SIZE-overlap):SIZE]/2 | |||
| out[SIZE:, SIZE:SIZE+(SIZE-overlap)] = img2[:,overlap:SIZE] | |||
| out = out.astype(np.uint8) | |||
| cv2.imshow('sample', out) | |||
| if cv2.waitKey(1) == ord('q'): | |||
| break | |||
| time.sleep(0.001) | |||
| grideye.stop() | |||