From e35961bbc1a9850e8e75d401218793652c75c4da Mon Sep 17 00:00:00 2001 From: Hobe Date: Thu, 2 May 2019 09:35:01 +0000 Subject: [PATCH] git-svn-id: http://newslabx.csie.ntu.edu.tw/svn/Ginger@19 5747cdd2-2146-426f-b2b0-0570f90b98ed --- trunk/code/readGridEye.py | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 trunk/code/readGridEye.py diff --git a/trunk/code/readGridEye.py b/trunk/code/readGridEye.py new file mode 100644 index 0000000..4dffc58 --- /dev/null +++ b/trunk/code/readGridEye.py @@ -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() + \ No newline at end of file