Skip to content

本次实践基于 Yahboom 的 K 210 开发套件。链接在此

|375

本次实录主要是实现在 k 210 开发板上实现训练好的模型进行调用。

训练平台使用 Maixhub

开发板介绍我在这里就不过多说明了。官网文档上都有。

安装必备文件\软件

本次示例以 python 开发为主。如果要使用 c 开发,需要配置 cmake 以及使用 toolchain 文件,这里就不再说明了。

IMPORTANT

注意,要想生成后面使用的“bin” 文件,需要使用 cmake 以及上述文件进行编译,所以,如果想要自己做次相关开发,还是需要安装配置。

c 开发说明文档

CH 340

CH 340 驱动是一个串口驱动,如果有其他开发板的开发经验,基本这个驱动都是安装过的。

点击下载

解压CH340压缩包Uart drive(CH340).zip,并且双击打开CH341SER.EXE程序

安装完成之后,用Type-C数据线将K210开发板和电脑进行连接,然后依次右击桌面的‘此电脑’->‘属性’->‘设备管理器’->‘端口(COM和CPT)’,就会识别到相应的CH340端口。

NOTE

注:每台电脑的端口号都会不一样,只要是识别到了CH340就是我们需要的端口。

Kflash

K210的烧录工具为kflash,下载地址

下载完之后解压到本地。

打开K-Flash.exe,通过type-C数据线连接电脑与K210开发板。Device选择K210开发板的串口号。

Baud rate选择波特率。

Chip选择烧录到芯片还是烧录到SRAM,如果选择in-Chip则烧录到芯片,开机自动启动,断电保存;选择in-Memory则烧录到SRAM,断电后不会保存。

Firmware选择程序固件(.bin文件),这里我们选择之前编译生成的hello_world.bin文件。

勾选Open terminal after flash表示烧录完成后自动打开终端。

点击Flash开始烧录固件。

NOTE

这里的烧录过程后续会说到,这里只是简单的使用说明

CanMV IDE开发软件

这个软件就是主要的开发 IDE。

下载链接

NOTE

请注意版本号,应该下载 v 2.9.2-1

因为后面的版本不再支持 k-210

下载后得到canmv-ide-windows-vx.x.x-gxxxxxx.exe文件,双击打开安装包。

具体安装过程不再赘述。

正式开发

烧录出厂固件

如果想要使用 python 开发程序,比如视觉相关的项目,就需要使用这个固件。

固件下载

下载完成之后,要进行固件烧录。

打开上面下载的 Kflash ,选择这个固件,然后烧录。

如果失败,请检查设备管理器中是否正常识别到 K 210,以及核对 kflash 中的端口号是否正确。

烧录模型文件

如果你是自己训练的模型文件,一般格式要转换 nncase 形式。文件扩展名为 kmodel

注意,由于 k 210 内存有限,模型文件不要太大。

本次实践模型下载链接

下载后则需要将模型文件导入到 TF 卡中,请提前准备读卡器

将 TF 卡接入电脑之后请不要急着将模型导入。请先将 TF 卡格式化

|208

IMPORTANT

注意,一定要将分配单元大小设置为32K

格式化之后再将模型文件放到根目录不需要创建任何文件夹!

然后将内存卡弹出后插回 k 210 上。

IDE 连接 k 210

打开之前下载好的 CanmvIDE

打开之后先连接 K 210

在下面的弹窗中选择正确的端口号(在设备管理器中可以查看)

IMPORTANT

注意,需要打开“高级设置”,并将模式设置为 Mode-2

如果之前你正确的烧录了固件文件,并且保证端口号正确,这一步应该不会有什么问题。

写代码

再写代码之前需要注意的是,下面运行的代码并没有真正意义上的写入到 k 210 中,只是以缓存的形式运行。

代码如下:

python
import sensor, image, time, lcd

from maix import KPU

lcd.init()

sensor.reset()

sensor.set_pixformat(sensor.RGB565)

sensor.set_framesize(sensor.QVGA)

sensor.skip_frames(time = 100)

clock = time.clock()

obj_name = ("aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor")


od_img = image.Image(size=(320,256))

anchor = (1.3221, 1.73145, 3.19275, 4.00944, 5.05587, 8.09892, 9.47112, 4.84053, 11.2364, 10.0071)

kpu = KPU()

print("ready load model")

# 这里的位置一定是“/sd/”后面加上路径(根目录开始)


<NolebasePageProperties />




kpu.load_kmodel("/sd/voc20_detect.kmodel")

kpu.init_yolo2(anchor, anchor_num=5, img_w=320, img_h=240, net_w=320 , net_h=256 ,layer_w=10 ,layer_h=8, threshold=0.7, nms_value=0.2, classes=20)

while True:

    clock.tick()

    img = sensor.snapshot()

    od_img.draw_image(img, 0,0)

    od_img.pix_to_ai()

    kpu.run_with_output(od_img)

    dect = kpu.regionlayer_yolo2()

    fps = clock.fps()

    if len(dect) > 0:

        print("dect:",dect)

        for l in dect :

            img.draw_rectangle(l[0],l[1],l[2],l[3], color=(0, 255, 0))

            img.draw_string(l[0],l[1], obj_name[l[4]], color=(0, 255, 0), scale=1.5)

    img.draw_string(0, 0, "%2.1ffps" %(fps), color=(0, 60, 128), scale=2.0)

    lcd.display(img)

kpu.deinit()

上面的模型文件路径如果你按照我所说的将模型放到了根目录,上面的代码不需要更改。

具体的代码解释就不再赘述了

在连接成功的情况下,点击下面的运行,就可以直接运行当前查看的代码。

不出意外的话,k 210 上即可看到画面,并且模型运行成功。

将运行代码保存到 k 210

在连接的情况下,在上面的工具中选择 保存当前打开的脚本为(main.py)到 CanMV. Cam

将文件写入之后,将下面的连接断开即可实现开机即检测。

结果如下:

|450

贡献者

文件历史