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()