立创·庐山派-K230-CanMV(嘉楠勘智)开发板使用体验

立创·庐山派-K230-CanMV开发板使用体验

环境:

测试环境为Windows11,CPU 型号为Intel®Core ™ i7-12700H CPU,运行内存为16 GB。

1.开发准备:

(1):硬件

①开发板

立创·庐山派-K230-CanMV开发板 主板

②摄像头

GC2093||OV5647 摄像头(22P 0.5mm间距)

③TF卡

TF卡(2G以上 class10等级以上)我使用的是闪迪128G内存卡(https://detail.tmall.com/item.htm?_u=43sromnvc92c&id=43974132709&sku_properties=1627207%3A23470321194&spm=a1z09.2.0.0.58462e8du0UuWk)
在这里插入图片描述

④数据线

Type-C数据线(用来连接电脑)

⑤读卡器

TF 卡读卡器(把固件烧录进TF卡)

(2):软件(K230IDE)

安装CanMV IDE K230,下载链接,写本文时最新版本为4.0.7,大家下载时下载最新的就可以了,下载地址:https://kendryte-download.canaan-creative.com/developer/common/canmv-ide-4.0.7.exe点击链接就可以把安装包下载到本地进行安装了。

打开下载的exe文件,按照提示进行安装就可以了,注意安装路径,建议不要安装到C盘,我是装到了D盘。

安装成功之后可以在win11系统左下角的搜索栏中点击搜索找到CanMV IDE K230,我电脑这里的 CanMV IDE是给K210使用的,如果大家也用过k210的话在打开IDE的时候需要注意,只有后面带K230 标识的才支持我们的立创·庐山派-K230-CanMV开发板。如果搜索不到大家也可以直接去自己的安装目 录的 bin 目录下的 canmvide.exe 文件。

(3):固件

①固件文件:

【从Github仓库获取最新固件】 点击这个链接https://github.com/kendryte/canmv_k230/releases/tag/v1.1,下载这个固件CanMV-K230_LCKFB_micropython_v1.1-0- g5a6fc54_nncase_v2.9.0.img.gz,注意需要下载里面带 LCKFB 字符的固件。

【从嘉楠开发者社区获取最新固件】(*推荐) 点击这个链接https://developer.canaan-creative.com/resource?selected=0-0-3-0,在资料下载栏目-> K230 -> Images -> CanMV -> Micropython ->CanMVK230_LCKFB_micropython_v1.1-0-g5a6fc54_nncase_v2.9.0.img.gz。

【从我们的资料包中获取】 在我们的离线资料里面的【1】固件 目录里面寻找。 需要注意,不管是从Github下载下来的还是从我们资料包中获取的都是压缩包,解压出来的才是固件镜 像。 .gz后缀结尾的是压缩包,.img后缀结尾的才是固件。只能往TF卡中只能烧录.img文件格式的固 件,如果直接烧录.gz文件可能会造成吧损坏。 如下图中的,1是固件镜像,2是压缩包,1是2解压得出来的文件。

②烧录工具:

下载烧录工具Rufus,下载地址:https://rufus.ie/downloads/,如果网络不通畅的话也可以从我们的离线资料里面的【0】工具/【2】烧录工具/【1】Rufus里面就可以,这个软件是免安装的,下载下来后直 接双击打开就可以了。

此时把你的TF卡插入读卡器,然后把读卡器插入电脑,我这里使用的是4G的TF卡,插入后Rufus软件界 面的设备列表栏会显示一个设备,并且左下角也会提示可以检测到设备,此时就可以点击 镜像文件(请选 择) 后方的 选择 按钮来选择我们要烧录的镜像了,就选择我们在上一小节中获取到的CanMVK230_LCKFB_micropython_v1.1-0-g5a6fc54_nncase_v2.9.0.img文件就可以了。
在这里插入图片描述

正确选择固件镜像文件后我们直接点击右下角的开始按钮,继续操作会造成TF内所有内容全部消失,需要确保你这个TF卡内部没有重要数据,然后等待烧录完成就可以了。当Rufus软件的状态那一栏走完进度条,提示准备就绪时就表示成功烧录固件了。

此时我们就可以按以下步骤操作:

  1. 关闭Rufus软件。
  2. 在电脑上软件弹出我们的读卡器 。
  3. 拔出读卡器。
  4. 从读卡器上拔出我们烧录号固件镜像的TF卡。
  5. 在 立创·庐山派-K230-CanMV开发板 未供电状态插入TF卡。

完成以上操作后,我们就可以给开发板上电了。用Type-C数据线将开发板连入电脑。 如果正常启动,板子上的红色指示灯(红灯)就会自动点亮,稍微等待一会后(三秒内)。我们就可以在设备管理器中看到一个新的USB串行设备(COMx),同时我们电脑的也会出现一个CanMV设备,可以当做U盘来访问开发板内的文件。

注意!在第一次上电时,庐山派开发板会自动将TF卡除固件镜像外的剩余空间格式化为fat,并挂 载在/data文件夹,格式化会占用一些时间并且会主动进行一次重启。后续上电时不会再进行这个 操作,所以第一次上点会稍微慢一点。

当然,如果你已经安装了CanMV IDE K230,打开IDE,当 立创·庐山派-K230-CanMV开发板 正常启 动后,左下角的连接图标的右上脚就会出现一个USB标志,如果没有出现则表示开发板启动失败或未成 功连接电脑。下图的上边是未接入开发板的IDE,下边是接入了开发板的IDE。

在这里插入图片描述

点击USB图标即可连接IDE与开发板,连接后右下角的三角形会变为绿色(如下图所示)。

在这里插入图片描述

2.基础例程:

(1)点亮板载led

在这里插入图片描述

在IED中使用如下代码,将其保存并运行,会看到板载LED闪烁红灯。LED灯颜色由第八行的代码决定。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别用于控制红、绿、蓝三个LED灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 红灯
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 绿灯
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 蓝灯
# 板载RGB灯是共阳结构,设置引脚为高电平时关闭灯,低电平时点亮灯
# 初始化时先关闭所有LED灯
LED_R.high() # 关闭红灯
LED_G.high() # 关闭绿灯
LED_B.high() # 关闭蓝灯
# 基础点灯试验:选择一个LED灯并让其闪烁
# 默认选择红色LED灯,后续可以通过变量改变需要控制的灯
LED = LED_R # 当前控制的LED为红色LED
while True:

    LED.low() # 点亮当前选择的LED
    time.sleep(0.5) # 等待0.5秒
    LED.high() # 熄
    time.sleep(0.5)

对上述代码进行略微修改可以得到以下代码,同样在IED中使用如下代码,将其保存并运行,会看到板载LED会依次点亮红绿蓝三种颜色并循环。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别用于控制红、绿、蓝三个LED灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 红灯
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 绿灯
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 蓝灯
# 板载RGB灯是共阳结构,设置引脚为高电平时关闭灯,低电平时点亮灯
# 初始化时先关闭所有LED灯
LED_R.high() # 关闭红灯
LED_G.high() # 关闭绿灯
LED_B.high() # 关闭蓝灯
# 基础点灯试验:选择一个LED灯并让其闪烁
# 默认选择红色LED灯,后续可以通过变量改变需要控制的灯
#LED = LED_B # 当前控制的LED为红色LED
while True:
	LED = LED_R # 当前控制的LED为红色LED
    LED.low() # 点亮当前选择的LED
    time.sleep(0.5) # 等待0.5秒
    LED.high() # 熄
    time.sleep(0.5)
	
    LED = LED_G # 当前控制的LED为绿色LED
    LED.low() # 点亮当前选择的LED
    time.sleep(0.5) # 等待0.5秒
    LED.high() # 熄
    time.sleep(0.5)
    LED = LED_B # 当前控制的LED为蓝色LED
    LED.low() # 点亮当前选择的LED
    time.sleep(0.5) # 等待0.5秒
    LED.high() # 熄
    time.sleep(0.5)

(2)点亮七色LED灯

在IED中使用如下代码,将其保存并运行,会看到板载LED会依次点亮七种种颜色并循环。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别控制红、绿、蓝灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7)
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7)
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7)
def set_color(r, g, b):
    """设置RGB灯的颜色,使用Pin.high()和Pin.low()控制"""
    if r == 0:
        LED_R.low() # 红灯亮
    else:
        LED_R.high() # 红灯灭
    if g == 0:
        LED_G.low() # 绿灯亮
    else:
        LED_G.high() # 绿灯灭
    if b == 0:
        LED_B.low() # 蓝灯亮
    else:
        LED_B.high() # 蓝灯灭
def blink_color(r, g, b, delay):
    """设置颜色并让灯亮一段时间后熄灭"""
    set_color(r, g, b) # 设置颜色
    time.sleep(delay) # 保持该颜色一段时间
    set_color(1, 1, 1) # 熄灭所有灯(共阳:1为熄灭)
    time.sleep(delay) # 熄灭后等待一段时间
while True:
    # 红色
    blink_color(0, 1, 1, 0.5)
    # 绿色
    blink_color(1, 0, 1, 0.5)
    # 蓝色
    blink_color(1, 1, 0, 0.5)
    # 黄色(红+绿)
    blink_color(0, 0, 1, 0.5)
    # 紫色(红+蓝)
    blink_color(0, 1, 0, 0.5)
    # 青色(绿+蓝)
    blink_color(1, 0, 0, 0.5)
    # 白色(红+绿+蓝)
    blink_color(0, 0, 0, 0.5)

(3)按键控制板载RGB灯亮

在IED中使用如下代码,将其保存并运行,当用户按下用户按键时关闭对应的LED灯,只有在按键按下时LED灯会亮,松开就会熄灭。

LED的颜色由第十六行代码进行修改。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别用于控制红、绿、蓝三个LED灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 红灯
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 绿灯
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 蓝灯
# 按键引脚为53,按下时高电平,设置为输入模式
button = Pin(53, Pin.IN, Pin.PULL_DOWN) # 使用下拉电阻
# 板载RGB灯是共阳结构,设置引脚为高电平时关闭灯,低电平时点亮灯
# 初始化时先关闭所有LED灯
LED_R.high() # 关闭红灯
LED_G.high() # 关闭绿灯
LED_B.high() # 关闭蓝灯
# 基础点灯试验:选择一个LED灯并让其闪烁
# 默认选择红色LED灯,后续可以通过变量改变需要控制的灯
LED = LED_R # 当前控制的LED为红色LED

led_flag = 0

while True:
    if button.value() == 1:
        LED.high()
    else:
        LED.low()

对代码进行适当修改,在IED中使用如下代码,将其保存并运行,当用户每按下一次用户按键时对应的LED灯的状态会进行改变。

与上述代码的区别只是增加了按键消抖功能。

LED的颜色由第十六行代码进行修改。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别用于控制红、绿、蓝三个LED灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 红灯
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 绿灯
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 蓝灯
# 按键引脚为53,按下时高电平,设置为输入模式
button = Pin(53, Pin.IN, Pin.PULL_DOWN) # 使用下拉电阻
# 板载RGB灯是共阳结构,设置引脚为高电平时关闭灯,低电平时点亮灯
# 初始化时先关闭所有LED灯
LED_R.high() # 关闭红灯
LED_G.high() # 关闭绿灯
LED_B.high() # 关闭蓝灯
# 基础点灯试验:选择一个LED灯并让其闪烁
# 默认选择红色LED灯,后续可以通过变量改变需要控制的灯
LED = LED_R # 当前控制的LED为红色LED

led_flag = 0

while True:
    if button.value() == 1:
        time.sleep(0.01)
        if button.value() == 1:
            if led_flag == 0:
                led_flag = 1
            else:
                led_flag = 0
#        led_flag = ~ led_flag
#    else:
#        LED.low()

    if led_flag == 1:
        LED.high()
    else:
        LED.low()

(4)用按键切换RGB灯状态

LED的颜色由第十行代码进行修改。

from machine import Pin
import time
# 实例化Pin62, Pin20, Pin63为输出,分别控制红、绿、蓝三个LED灯
LED_R = Pin(62, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 红灯
LED_G = Pin(20, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 绿灯
LED_B = Pin(63, Pin.OUT, pull=Pin.PULL_NONE, drive=7) # 蓝灯
# 按键引脚为53,按下时高电平,设置为输入模式
button = Pin(53, Pin.IN, Pin.PULL_DOWN) # 使用下拉电阻
# 初始选择控制红灯
LED = LED_R # 默认控制红灯
# 初始化时关闭所有LED灯(共阳:高电平为灭灯)
LED_R.high()
LED_G.high()
LED_B.high()
# 消抖时间设置为20毫秒
debounce_delay = 20 # 毫秒
last_press_time = 0 # 上次按键按下的时间,单位为毫秒
# 记录LED当前状态,True表示亮,False表示灭
led_on = False
# 记录按键状态,用于检测按下和松开的状态变化
button_last_state = 0 # 上次按键状态
# 主循环
while True:
    button_state = button.value() # 获取当前按键状态
    current_time = time.ticks_ms() # 获取当前时间(单位:毫秒)
    # 检测按键从未按下(0)到按下(1)的变化(上升沿)
    if button_state == 1 and button_last_state == 0:
    # 检查按键是否在消抖时间外
        if current_time - last_press_time > debounce_delay:
            # 切换LED的状态
            if led_on:
                LED.high() # 熄灭LED
            else:
                LED.low() # 点亮LED
            led_on = not led_on # 反转LED状态
            last_press_time = current_time # 更新按键按下时间
    # 更新上次按键状态
    button_last_state = button_state

3.基础功能例程:

FPIOA

GPIO(英语:General-purpose input/output),通用型之输入输出的简称

FPIOA(英语:Field Programmable Input and Output Array),现场可编程 IO 阵列

FPIOA可以任意映射的GPIO(除了某些特殊功能的引脚)

  • 支持IO的可编程功能选择
  • 支持IO输出的8种驱动能力选择
  • 支持IO的内部上拉电阻选择
  • 支持IO的内部下拉电阻选择
  • 支持IO输入的内部施密特触发器设置
  • 支持IO输出的斜率控制
  • 支持内部输入逻辑的电平设置7

i2c

K230内部包含五个I2C硬件模块,支持标准100kb/s,快速400kb/s模式,高速模式3.4Mb/s。 通道输出IO配置参考IOMUX模块。

构造函数

i2c = I2C(id, freq=100000)

【参数】

  • id: I2C ID, [0~4] (I2C.I2C0~I2C.I2C4)
  • freq: I2C时钟频率

scan

i2c.scan()

扫描I2C总线上的从机

【参数】

【返回值】

list 对象, 包含了所有扫描到的从机地址

readfrom

i2c.readfrom(addr, len, True)

从总线读取数据

【参数】

  • addr: 从机地址
  • len: 数据长度
  • stop: 是否产生停止信号,保留,目前只能使用默认值Ture

【返回值】

读取到的数据,bytes 类型

readform_into

i2c.readfrom_into(addr, buf, True)

读取数据并放到制定变量中

【参数】

  • addr: 从机地址
  • buf: bytearray类型, 定义了长度,读取到的数据存放在此
  • stop: 是否产生停止信号,保留,目前只能使用默认值Ture

【返回值】

writeto

i2c.writeto(addr, buf, True)

发送数据到从机

【参数】

  • addr: 从机地址
  • buf: 需要发送的数据
  • stop: 是否产生停止信号,保留,目前只能使用默认值Ture

【返回值】

成功发送的字节数

pin

K230内部包含64个GPIO Pin,每个Pin可配置为输入或输出,可配置上下拉,可配置驱动能力。

单片机有很多的引脚,为了操控每一个引脚,我们对引脚进行分组,例如GPIOA,GPIOB,…,GPIOG等等(Group),这一个组就称为一个GPIO端口,一般一个端口包含十六个PIN引脚[0~15]。(一个引脚占2bits,而stm32是32位的,所以一组是16个)。GPIO引脚具有可复用和重映射的特点。

构造函数:

pin = Pin(index, mode, pull=Pin.PULL_NONE, drive=7)

【参数】

  • index: 引脚号,取值:[0,63]
  • mode: 输入或输出模式
  • pull: 上下拉配置,可选参数,默认PULL_NONE
  • drive: 驱动能力配置,可选参数,默认7

value

Pin.value([value])

获取引脚输入或设置引脚输出

【参数】

  • value: 输出值,可选参数,如果不传参数则返回输入值

【返回值】

返回空或当前引脚输入值
参考资料:参考资料:
https://developer.canaan-creative.com/k230_canmv/main/zh/api/machine/K230_CanMV_Pin%E6%A8%A1%E5%9D%97API%E6%89%8B%E5%86%8C.html

from machine import Pin
from machine import FPIOA

# 实例化FPIOA
fpioa = FPIOA()
# 设置Pin2为GPIO2
fpioa.set_function(2, FPIOA.GPIO2)

# 实例化Pin2为输出
pin = Pin(2, Pin.OUT, pull=Pin.PULL_NONE, drive=7)
# 设置输出为高
pin.value(1)
# pin.on()
# pin.high()
# 设置输出为低
pin.value(0)
# pin.off()
# pin.low()
# 初始化Pin2为输入
pin.init(Pin.IN, pull=Pin.PULL_UP, drive=7)
# 获取输入
print(pin.value())
# 设置模式
pin.mode(Pin.IN)
# 获取模式
print(pin.mode())
# 设置上下拉
pin.pull(Pin.PULL_NONE)
# 获取上下拉
print(pin.pull())
# 设置驱动能力
pin.drive(7)
# 获取驱动能力
print(pin.drive())

pwm

名词解释:

PWM(脉冲宽度调制)就是一个特定信号输出,主要用于输出不同频率、占空比(一个周期内高电平出现时间占总时间比例)的方波。以实现固定频率或平均电压输出。

实验目的:

通过不同频率的PWM信号输出,驱动无源蜂鸣器发出不同频率的声音。

蜂鸣器介绍:

蜂鸣器分有源蜂鸣器和无源蜂鸣器,有源蜂鸣器的使用方式非常简单,只需要接上电源,蜂鸣器就发声,断开电源就停止发声。而本实验用到的无源蜂鸣器,是需要给定指定的频率,才能发声的,好处可以通过改变频率来改变蜂鸣器的发声音色,以此来判定CanMV K230的PWM输出频率是在变化的。

代码:

from machine import PWM
from machine import FPIOA

# 实例化FPIOA
fpioa = FPIOA()
# 设置PIN43为PWM通道0
fpioa.set_function(43,FPIOA.PWM1)


# 打开通道0输出
pwm1.enable(1)


# 实例化PWM通道0,频率为200Hz,占空比为50%,默认使能输出
pwm1 = PWM(1, 200, 50, enable = True)
time.sleep(1)

# 实例化PWM通道0,频率为400Hz,占空比为50%,默认使能输出
pwm0 = PWM(0, 400, 50, enable = True)
time.sleep(1)

# 实例化PWM通道0,频率为60Hz,占空比为50%,默认使能输出
pwm0 = PWM(0, 600, 50, enable = True)
time.sleep(1)

# 实例化PWM通道0,频率为800Hz,占空比为50%,默认使能输出
pwm0 = PWM(0, 800, 50, enable = True)
time.sleep(1)

# 关闭通道0输出
pwm0.enable(0)

uart

srt串口通信,非常常用的通信接口,有很多工控产品、无线透传模块都是使用串口来收发指令和传输数据,以及和其它开发板如STM32, ESP32, Arduio,树莓派等带串口的开发板通讯,这样用户就可以在无须考虑底层实现原理的前提下将各类串口功能模块灵活应用起来。

K230内部包含五个UART硬件模块,其中UART0被小核终端占用,UART3被大核终端占用,剩余UART1,UART2,UART4。

用一个USB转TTL工具,配合电脑上位机串口助手来跟CanMV K230开发板进行通信测试。

将USB转TTL的RX与开发板的TX相连,TX与开发板RX相连。将USB转TTL插入计算机调试。

K230向上位机以500ms为周期发送数据,主机随时向K230发送数据便可成功在CANMV K230 IDE中显示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#导入串口模块
from machine import UART
from machine import FPIOA
import time

fpioa = FPIOA()


fpioa.set_function(11,FPIOA.UART2_TXD)
fpioa.set_function(12,FPIOA.UART2_RXD)

uart2 = UART(UART.UART2,115200) #设置串口号2和波特率

while True:
    uart2.write('hello lushanpai-k230!\n')#发送一条数据
    text=uart2.read(128) #接收128个字符
    if text != b'':
        print(text) #通过REPL打印串口接收的数据
    time.sleep(0.5) #500ms

4.AI例程:

人脸检测

人脸检测在人脸正对摄像头时识别正确率较高,如摄像头侧视或者仰视人脸时识别准确率较低。

视频流的帧率大概稳定在15左右。
在这里插入图片描述

手势检测

手势识别,其实使用图像算法先对手进行定位,之后对手的关节点进行确认,然后连接各个关节点所形成的图像。

在例程使用过程中大概帧率为6~15,大多数时间稳定在9左右。而且我的IDE一直出现卡顿现象,我只能使用IDE自带的录制功能将识别视频保存到本地,在18秒的视频中大概只有两秒有检测到手势。

而且在手势检测发现手掌的识别比手背的识别更加明显。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ocr检测

文字识别时视频的帧率较高,大概稳定在18左右。

对于摄像头内文字数量较少时可以准确捕捉,但是准确率不足。当识别界面内文字对象较多时无法准确捕捉文字。
在这里插入图片描述

物体识别

物体识别是使用了yolov8n的模型,在开发板运行该文件时,帧率较低,且出现卡顿现象。且出现撕裂现象(如下图一所示)。对物体的捕获能力较强,但准确率不足,如下图三将风扇识别为时钟。

且在使用中出现开发板重启现象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.DIY项目(使用在线云训练平台):

使用在线云训练平台训练模型文件。

1.注册

首先,新用户需要进入嘉楠开发者社区 (canaan-creative.com) 注册,注册完成后登录系统。

2.点击数据集按钮

在这里插入图片描述

3.创建数据集

点击左上角创建数据集

在这里插入图片描述

4.数据集信息填写

在弹出的弹窗中选择数据集名称(项目名称),标注类型

在这里插入图片描述

5.完成数据集建立

点击项目名称进行配置页面

6.图片上传:

此处由两种上传方式:一种是直接上传图片,另一种是上传压缩包。

(1)直接上传图片:
①点击上传图片

在这里插入图片描述

②图片上传

在路径中选择你要训练的图片,点击打开即可(此处可以ctrl+a全选上传)
在这里插入图片描述

③标签信息

上传完成后输入此类图片的标签
在这里插入图片描述

④继续上传剩余图片
⑤训练

图片全部上传完成后点击训练

在这里插入图片描述

⑥创建任务

填写必要信息,此处选择K230系列,nncase版本选择你烧录的固件版本,我使用的是2.9.0,迭代次数可以适当减少(我之前YOLO训练一般为300,官方文件为50,训练次数不是越多越好,次数过多会导致过拟合,精度会下降。),以节约时间。填写完必要信息,点击确认即可。
在这里插入图片描述

⑦训练详情

训练详情界面,在数据集界面也可以看到,等待训练完成即可
在这里插入图片描述
在这里插入图片描述

注意:

图片一次性上传数量不能过大,我上传1700图片出现如下所示报错,也可能是我的图片分别率过高导致。上传200张可以成功。

(2)上传压缩包文件:

按照下图将图片文件构建文件夹,并将其压缩为zip。

①构建文件夹dataset
②在dataset文件夹构建每一个标签对应的文件夹
③将对应图片放在文件夹内
④将文件夹压缩为zip格式

在这里插入图片描述

但训练文件夹内图片不得过多,过多会出现报错如下图所示。我的文件夹约9000张图片。
在这里插入图片描述

我在减少图片量之后上传压缩包文件,后没有反应,所以我最后使用上传图片的方式。

之后的步骤与直接上传图片相同。

在这里插入图片描述

图像检测:

对于此类型模型,上传压缩包文件时,压缩包内的文件夹名字必需为images和xml。

在压缩时要在dataset文件夹内压缩,不可以直接压缩dataset文件夹。

每次上传文件需要小于100mb。

7.训练文件下载:

在排队训练后,当训练完毕后会给对应邮箱发送邮件提醒。

可点击邮件中的地址直接下载文件。解压后文件如下图二所示。

在这里插入图片描述
在这里插入图片描述

也可登录嘉楠社区查看,在模型训练->训练记录中可点击资料下载。

也可以点击训练记录进入,查看具体的训练细节,提供了loos曲线。如下图二所示。
在这里插入图片描述

在这里插入图片描述

8.上板测试:

图像分类:

在这里插入图片描述

​ 代码修改为下面:

#root_path="/sdcard/examples/tests/"        # root_path要以/结尾
#config_path=root_path+"deploy_config.json"
#image_path=root_path+"test_cls.jpg"

root_path="/sdcard/"
config_path=root_path+"deploy_config.json"
image_path=root_path+"/001/6.jpg"

#image_path=root_path+"/001/right_pred_3_prob_1.0000_gt_3_3A 0.56_1381__1__2__3cropped_image.jpg"


#right_pred_3_prob_1.0000_gt_3_3A 0.56_2139__1__2__1cropped_image.jpg
图像检测:

在这里插入图片描述

​ 使用读卡器进行离线拷贝,将kmodel文件、deploy_config.json和测试图片文件拷贝到SD卡中的某一目录中并记下这一目录。(可直接放在根目录)

需要修改main.elf文件

在这里插入图片描述

目录结构:
在这里插入图片描述

det
在这里插入图片描述

cls:
在这里插入图片描述

test:
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值