V831提供物体识别功能
在这里插入图片描述


物体识别功能

基于事先训练好的模型,对1000种物体进行分类,屏幕显示类别标签和置信度。

文件地址 :https://github.com/sipeed/MaixPy3_scripts/blob/master/scripts/nn_resnet.py
注意自己的V831有没有 resnet.param", resnet.bin模型。新版镜像自带的,不用管。老版镜像在/home/res/路径下查看一下。

参数说明

该脚本使用人脸识别模块 maix.nn。使用方法请参考:模块 maix.nn

实例代码

#!/usr/bin/python3
# 分类例程
# 用于物体分类
# 时间:2021年9月16日
# 作者:Neutree dianjixz
from maix import nn
from PIL import Image, ImageFont, ImageDraw
from maix import display
import time
from maix import camera
import threading
try:
    from classes_label import labels
except:
    import os
    os.system("cp ./res/classes_label.py ./")
    from classes_label import labels

class funation:
    model = {
        "param": "home/res/resnet.param",
        "bin": "home/res/resnet.bin"
    }
    options = {
        "model_type":  "awnn",
        "inputs": {
            "input0": (224, 224, 3)
        },
        "outputs": {
            "output0": (1, 1, 1000)
        },
        "first_layer_conv_no_pad": False,
        "mean": [127.5, 127.5, 127.5],
        "norm": [0.00784313725490196, 0.00784313725490196, 0.00784313725490196],
    }
    fun_status = 0
    def __init__(self,device=None):
        self.fun = [self.wait_run,self.run]
        self.event = self.fun[self.fun_status]
        self.font = ImageFont.truetype("./res/baars.ttf",30, encoding="unic")
        threading.Thread(target=self.load_mode).start()
        print("resnet start!")
    def __del__(self):
        del self.m
        print("resent exit")
    def load_mode(self):
        print("-- load model:", self.model)
        self.m = nn.load(self.model, opt=self.options)
        print("-- load ok")
        self.fun_status += 1
        self.event = self.fun[self.fun_status]
    def wait_run(self):
        tmp = camera.read(video_num = 1)
        display.show()
    def run(self):
        img = camera.read(video_num = 1)
        t = time.time()
        out = self.m.forward(img, quantize=True)
        t = time.time() - t
        print("-- forward time: {}s".format(t))
        t = time.time()
        out2 = nn.F.softmax(out)
        t = time.time() - t
        print("-- softmax time: {}s".format(t))
        msg = "{:.2f}: {}".format(out.max(), labels[out.argmax()])
        print(msg)
        draw = display.get_draw()
        draw.text((0, 0), msg, (255, 0, 0), self.font)
        display.show()


if __name__ == "__main__":
    import signal
    def handle_signal_z(signum,frame):
        print("APP OVER")
        exit(0)
    signal.signal(signal.SIGINT,handle_signal_z)
    camera.config(size=(224,224))
    start = funation()
    while True:
        start.event()

更多推荐