欢迎光临散文网 会员登陆 & 注册

无SD卡版,K210与串口助手进行串口通信

2023-08-01 11:41 作者:58943600083_bili  | 我要投稿



from machine import UART,Timer

from fpioa_manager import fm

import sensor, image, lcd, time

import KPU as kpu

import gc, sys



input_size = (224, 224)

labels = ['5', '6', '7', '8', '1', '2', '3', '4']

anchors = [1.88, 2.38, 1.31, 2.11, 1.69, 2.19, 1.59, 1.94, 1.53, 1.66]


#映射串口引脚

fm.register(6, fm.fpioa.UART1_RX, force=True)

fm.register(7, fm.fpioa.UART1_TX, force=True)


#初始化串口


uart = UART(UART.UART1, 9600, read_buf_len=4096)


def lcd_show_except(e):

    import uio

    err_str = uio.StringIO()

    sys.print_exception(e, err_str)

    err_str = err_str.getvalue()

    img = image.Image(size=input_size)

    img.draw_string(0, 10, err_str, scale=1, color=(0xff,0x00,0x00))

    lcd.display(img)


def main(anchors, labels = None, model_addr=0x300000, sensor_window=input_size, lcd_rotation=0, sensor_hmirror=False, sensor_vflip=False):

    sensor.reset()

    sensor.set_pixformat(sensor.RGB565)

    sensor.set_framesize(sensor.QVGA)

    sensor.set_windowing(sensor_window)

    sensor.set_hmirror(sensor_hmirror)


    sensor.set_vflip(sensor_vflip)

    sensor.run(1)

    sensor.set_vflip(1)   #设置摄像头翻转



    lcd.init(type=1)

    lcd.rotation(lcd_rotation)

    lcd.clear(lcd.WHITE)


    if not labels:

        with open('labels.txt','r') as f:

            exec(f.read())

    if not labels:

        print("no labels.txt")

        img = image.Image(size=(320, 240))

        img.draw_string(90, 110, "no labels.txt", color=(255, 0, 0), scale=2)

        lcd.display(img)

        return 1

    try:

        img = image.Image("startup.jpg")

        lcd.display(img)

    except Exception:

        img = image.Image(size=(320, 240))

        img.draw_string(90, 110, "loading model...", color=(255, 255, 255), scale=2)

        lcd.display(img)


    try:

        task = None

        task = kpu.load(model_addr)

        kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) # threshold:[0,1], nms_value: [0, 1]

        while(True):

            img = sensor.snapshot()

            t = time.ticks_ms()

            objects = kpu.run_yolo2(task, img)

            t = time.ticks_ms() - t

            if objects:

                for obj in objects:

                    pos = obj.rect()

                    img.draw_rectangle(pos)

                    OutNum=labels[obj.classid()]

                    img.draw_string(pos[0], pos[1], "%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))

                    print(OutNum)

                    uart.write(OutNum)

            img.draw_string(0, 200, "t:%dms" %(t), scale=2, color=(255, 0, 0))

            lcd.display(img)

    except Exception as e:

        raise e

    finally:

        if not task is None:

            kpu.deinit(task)




if __name__ == "__main__":

    try:

        main(anchors = anchors, labels=labels, model_addr=0x300000, lcd_rotation=0)

        # main(anchors = anchors, labels=labels, model_addr="\sd\model-11975.nncase")

    except Exception as e:

        sys.print_exception(e)

        lcd_show_except(e)

    finally:

        gc.collect()


无SD卡版,K210与串口助手进行串口通信的评论 (共 条)

分享到微博请遵守国家法律