k210识别物体的基本流程(kpu库函数)

这篇博客详细介绍了如何使用KPU函数进行物体识别,包括加载模型的两种方法、初始化过程以及在循环中进行图像识别的步骤。示例代码展示了一个口罩识别的例子,通过kpu.run_yolo2在图像上运行模型,根据置信度和类别ID进行不同颜色的框选,并显示识别结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于一个根据模型识别物体的脚本,见到了好几种写法,差点把我弄晕了
比如有以下两种写法:

  • 有在if __name__ == "__main__":(# if name == ‘main’: 下的代码只有在第一种情况下(即文件作为脚本直接执行)才会被执行,而 import 到其他脚本中是不会被执行的。)中调用main,在main函数中封装物体识别代码的,还加了一堆try,expect非常健壮
  • 也有直接按流程写下来的

所以,这里简单整理一下识别的基本调用函数,主要是围绕kpu函数进行的

  • 导入库(sensor, image, lcd, time,import KPU as kpu)和一些sensor初始化
  • 加载模型kpu.load,这里有使用地址和kmodel模型文件两种方法
    1.task = kpu.load(0x500000),使用之前需要先使用kflash_gui软件将smodel文件或kfpkg文件烧录到指定地址上
    2.task = kpu.load("/sd/m.kmodel"),使用前需要先将模型拷贝到sd卡中
  • kpu初始化_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor),task在上一步生成,anchor是每一个模型唯一的数值数组,在训练模型下载下来的boot代码中有这个数组信息
  • 以下代码在死循环中进行:
  • 拍一张照img = sensor.snapshot()
  • objects = kpu.run_yolo2(task, img)在相机拍到的图像上跑模型,如果相似放到objects
  • 如果相似if objects:,整个方框把物体框起来
  • 对于for obj in objects:每个obj含有三个参数:置信度confidence = float(obj.value())范围itemROL = obj.rect() 对应物体的label名所在位置(比如classes = [‘unmask’,‘masks’]中0或1)classID = int(obj.classid()),可以根据置信度调整识别结果,范围画框框,根据id显示判断结果

最后附上一个没用if __name__ == 'main':写法的识别口罩的例子:

import sensor, image, lcd, time
import KPU as kpu

color_R = (255, 0, 0)
color_G = (0, 255, 0)
color_B = (0, 0, 255)


class_IDs = ['no_mask', 'mask']


def drawConfidenceText(image, rol, classid, value):
    text = ""
    _confidence = int(value * 100)

    if classid == 1:
        text = 'mask: ' + str(_confidence) + '%'
    else:
        text = 'no_mask: ' + str(_confidence) + '%'

    image.draw_string(rol[0], rol[1], text, color=color_R, scale=2.5)



lcd.init()
sensor.reset(dual_buff=True)
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.run(1)


task = kpu.load(0x500000)


anchor = (0.1606, 0.3562, 0.4712, 0.9568, 0.9877, 1.9108, 1.8761, 3.5310, 3.4423, 5.6823)
_ = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
img_lcd = image.Image()

clock = time.clock()
while (True):
    clock.tick()
    img = sensor.snapshot()
    code = kpu.run_yolo2(task, img)
    if code:
        totalRes = len(code)
        
        for item in code:
            confidence = float(item.value())
            itemROL = item.rect()
            classID = int(item.classid())

            if confidence < 0.52:
                _ = img.draw_rectangle(itemROL, color=color_B, tickness=5)
                continue

            if classID == 1 and confidence > 0.65:
                _ = img.draw_rectangle(itemROL, color_G, tickness=5)
                if totalRes == 1:
                    drawConfidenceText(img, (0, 0), 1, confidence)
            else:
                _ = img.draw_rectangle(itemROL, color=color_R, tickness=5)
                if totalRes == 1:
                    drawConfidenceText(img, (0, 0), 0, confidence)

    _ = lcd.display(img)

    print(clock.fps())

_ = kpu.deinit(task)

<think>好的,用户想查找包含KPU模型的K210固件版本,并希望知道这些版本中包含的KPU模型列表。首先,我需要回忆一下关于K210开发的相关信息。K210芯片支持KPU(神经网络处理器),用于加速AI模型推理。固件版本通常与支持的模型类型和功能相关。 根据用户提供的引用[1],提到了在CANMV-K230和K230-EVB开发板上编译镜像的不同命令,可能不同的固件配置支持不同的模型。引用[2]中详细说明了加载KPU模型的两种方法:通过地址或SD卡中的文件,这可能意味着固件需要支持对应的模型加载方式。 通常,固件版本更新可能会增加对新模型架构的支持或优化现有模型的性能。用户需要知道特定固件版本包含哪些预置模型,或者哪些版本支持加载自定义模型。例如,某些固件可能内置了人脸识别物体检测等预训练模型。 接下来,用户可能需要检查官方文档或SDK发布说明,查看各个固件版本支持的KPU模型列表。另外,社区或论坛中可能有开发者分享的信息。如果官方没有明确列出,可能需要通过编译时的配置选项或烧录工具中的模型地址来推断支持的模型。 可能的解决步骤包括:1. 访问K210或开发板制造商的GitHub仓库,查看固件版本的更新日志。2. 检查SDK中的示例代码,看是否有模型加载的示例,从而推断支持的模型类型。3. 联系技术支持或社区获取帮助。 需要注意的是,用户可能混淆了固件版本和模型文件。固件本身可能不包含模型列表,而是支持加载特定格式的模型(如.kmodel)。因此,正确的回答应该区分固件支持的功能和模型文件本身,并指导用户如何查找或编译适用的模型。</think>关于K210固件版本与KPU模型的关联性,需结合开发板类型和SDK版本综合分析。以下是关键信息整理: ### 一、K210固件与KPU模型的关系 1. **固件定义** K210固件是包含KPU驱动和模型运行框架的底层系统,不同开发板(如CANMV-K230/K230-EVB)需编译对应的固件配置: ```bash # CANMV-K230开发板 make CONF=k230_canmv_defconfig # K230-EVB开发板 make CONF=k230_evb_defconfig ``` 不同配置可能影响KPU模型兼容性[^1]。 2. **模型加载方式** KPU模型通过两种途径加载: - **地址映射**:`kpu.load(0x500000)`,需用`kflash_gui`烧录模型到指定Flash地址 - **文件加载**:`kpu.load("/sd/m.kmodel")`,模型需存储在SD卡中[^2] ### 二、固件版本与模型支持 1. **官方固件模型列表** 常见内置模型包括: - 人脸检测(如`face_detect.kmodel`) - 物体分类(如`mobilenet.kmodel`) - 手势识别(如`hand_detect.kmodel`) 2. **版本查询方法** | 步骤 | 操作 | 目标 | |------|------|------| | 1 | 连接开发板执行`sys.version` | 获取固件版本号 | | 2 | 查看SDK包内`/examples/ai_models`目录 | 确认支持模型类型 | | 3 | 访问GitHub仓库的Release Notes | 核对版本更新日志 | ### 三、实践建议 1. **自定义模型适配** 若需使用非内置模型: ```python # 转换TensorFlow模型为.kmodel格式 from ncc import compile compile('model.tflite', 'output.kmodel') ``` 2. **版本兼容性验证** 通过`kpu.check_model()`函数测试模型与当前固件的兼容性: ```python task = kpu.load("/sd/custom.kmodel") print(kpu.check_model(task)) # 返回True表示支持 ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值