from serial import Serial
from serial.tools.list_ports import comports
import time
import re
import base64
from PIL import Image
from io import BytesIO
import numpy as np
import cv2


def base642img(strs):
    imgdata = base64.b64decode(strs)
    img = Image.open(BytesIO(imgdata))
    img = np.array(img)
    img = cv2.resize(img, dsize=(240, 240))
  
    cv2.imshow('img', cv2.cvtColor(img, cv2.COLOR_RGB2BGR))
    cv2.waitKey(5)


if __name__ == '__main__':
    port_list = list(comports())
    for device in port_list:
        print(device.name)
    ser = Serial(port_list[1].name, 921600, timeout=2000)

    text = 'AT+RUNIMPULSEDEBUG=y\r\n'
    result = ser.write(text.encode("utf8"))
    all = 0
    err = 0
    data = b''
    while True:
        rev_num = ser.inWaiting()
        if rev_num:
            data += ser.read(rev_num)
        if data:
            a = re.findall('Framebuffer:(.*?)Predictions', data.__str__())
            if len(a) == 0:
                continue
            all += 1
            try:
                print(a[0])
                #a = a[0].replace(' ', '').replace('\\r', '').replace('\\n', '')
                #print(a)
                base642img(a[0])
            except:
                err+=1
                print(err/all)
            data = b''