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