从0开始:win10系统下基于V831的目标检测

从0开始:win10系统下基于V831的目标检测

文章目录

  • 从0开始:win10系统下基于V831的目标检测
  • 开发板介绍
  • 开发环境配置
    • 系统镜像烧录
      • 烧录过程
    • 配置IDE
    • 一些可用工具
  • 开发相关
    • 开发板连接网络
    • 部署模型

开发板介绍

Maix-II-Dock 是一款边缘级 AIOT 开发板, 基于全志V831芯片,支持常规 Linux 开发, 能够进行硬件AI加速,并且拥有Sipeed 提供的完整的软件生态。

全志 V831芯片, 单核 Cortex-A7 800MHz,64MiB 片内 DDR2 内存, 可以当作Linux 的SOC使用,拥有0.2Tops 算力。

开发环境配置

系统镜像烧录

购买了官方启动卡的可以略过此步骤。

在烧录前请先完成以下准备:

  • 烧录工具 PhoenixCard

  • 系统镜像

    • 镜像文件中后缀带有maixhub为MaixPy3专用,且带有Maixhub app

    • 后缀带有maixpy3为MaixPy3专用,且不带有Maixhub app

    • 下文所有描述均基于v831-m2dock-maixhub-0.5.2-20220726镜像

  • TF卡格式化工具 SD Card Formatter(可选)

烧录过程

  1. 固件 选择 下载的镜像文件
  2. 制作卡的种类 选择 启动卡
  3. 点击 烧录
  4. 一般情况下,烧录前PhoenixCard会要求你进行格式化,按需进行格式化就行。烧录完成后,若状态栏为绿色则为成功,红色则为失败,若多次失败,请使用SD Card Formatter对TF卡进行格式化后,再尝试烧录

配置IDE

  1. 将TF插入开发板卡槽,使用TypeC-USB数据线,连接开发板的OTG口和电脑。正常情况下,power灯将亮起,开机显示image capture。
  2. 下载IDE并安装。对于安装时弹出的驱动安装程序,如果电脑能识别开发板(弹出新的U盘选项),则可以不安装,如果安装了该驱动,请重启电脑,并在设备管理器中,卸载Android ADB Interface(注意勾选删除此设备的驱动程序软件),然后再次打开IDE。
  3. 正常来说,IDE会自动打开adb终端和jupyter notebook,如果没有,可以去任务栏找到一个盾牌图标,启用相应服务。

一些可用工具

  • adb SDK

    #一些常用指令
    adb devices #查看可用设备
    adb shell   #进入终端
    adb pull <设备里的文件路径> [电脑上的目录] #从设备下载
    adb push <电脑上的文件路径> <设备里的目录> #从电脑上传
    
  • MobaXterm 终端管理工具

开发相关

开发板连接网络

当以上操作均成功完成之后,打开电脑上的开发板对应的u盘,找到wpa_supplicant.conf文件,更改network字典中的键值对的值,其中ssid为WIFI名称,psk为WIFI密码。如果没能连接,则无法完成之后的无线图传。

部署模型

home文件夹下,yolo2_20class_awnn.py即为目标检测例程程序,加入无线图传相关代码,就可以通过http://localhost:18811在线查看检测结果,最后的代码见下,如果没有相关例程,可以去官方模型库查找,需要自己训练也可以进行在线训练。

from maix import nn, camera, image, display, mjpg, utils
from maix.nn import decoder
import time

#配置图传的IP、端口和传输序列
queue = mjpg.Queue(maxsize=8)
mjpg.MjpgServerThread(
    "0.0.0.0", 18811, mjpg.BytesImageHandlerFactory(q=queue)).start()

#设置模型位置
model = {
    "param": "/home/model/yolo2_20class_awnn.param",
    "bin": "/home/model/yolo2_20class_awnn.bin"
}
options = {
    "model_type":  "awnn",
    "inputs": {
        "input0": (224, 224, 3)
    },
    "outputs": {
        "output0": (7, 7, (1+4+20)*5)
    },
    "mean": [127.5, 127.5, 127.5],
    "norm": [0.0078125, 0.0078125, 0.0078125],
}

#20类分类
labels = ["aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]
anchors = [5.4, 5.38, 1.65, 2.09, 0.8, 1.83, 2.45, 4.14, 0.46, 0.8]

m = nn.load(model, opt=options)
yolo2_decoder = decoder.Yolo2(len(labels), anchors, net_in_size=(options["inputs"]["input0"][0], options["inputs"]["input0"][1]), net_out_size=(7, 7))

while True:
    img = camera.capture()
    AI_img = img.copy().resize(224, 224)
    out = m.forward(AI_img.tobytes(), quantize=True, layout="hwc")
    boxes, probs = yolo2_decoder.run(out, nms=0.3, threshold=0.3, img_size=(options["inputs"]["input0"][0], options["inputs"]["input0"][1]))

    if len(boxes):
        for i, box in enumerate(boxes):
            class_id = probs[i][0]
            prob = probs[i][1][class_id]
            disp_str = "{}:{:.2f}%".format(labels[class_id], prob*100)
            img.draw_rectangle(box[0], box[1], box[0] + box[2], box[1] + box[3], color = (0, 255, 0), thickness=2)
            x = box[0]
            y = box[1] - 20
            if y < 0:
                y = 0
            img.draw_string(x, y, disp_str, 1.5, color = (255, 0, 0), thickness=2)

    #设定显示格式,推流
    jpg = utils.rgb2jpg(img.convert("RGB").tobytes(), img.width, img.height)
    queue.put(mjpg.BytesImage(jpg))

    display.show(img)

最后从检测的效果看,该模型仍有较大提升空间。

你可能感兴趣的:(目标检测,人工智能,计算机视觉)