多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

【CanMV K210】编程基础 SD 卡挂载与 kmodel 模型管理

【CanMV K210】编程基础 SD 卡挂载与 kmodel 模型管理 CanMV K210 进入 AI 视觉实验后模型文件、脚本文件、图片资源和配置文件会频繁出现。SD 卡不再只是普通存储卡而是 K210 加载 kmodel、读取资源和管理项目文件的重要入口。普通 GPIO 实验主要关注引脚和电平AI 视觉实验还需要关注文件系统。模型是否存在、路径是否正确、SD 卡是否挂载成功会直接影响人脸检测、YOLO、MNIST、口罩识别等实验能否运行。文章目录理论基础硬件设施软件代码扩展应用总结理论基础实验原理CanMV K210 的 AI 视觉实验通常需要加载.kmodel模型文件。模型可以保存在 Flash 中也可以放在 SD 卡中。相比 FlashSD 卡更适合存放较大的模型文件、测试图片和项目资源后续更换模型也更加方便。CanMV 文件系统中Flash 和 SD 卡会以路径形式呈现。常见写法中Flash 内部文件通常从根目录或/flash相关路径访问SD 卡文件通常从/sd路径访问。CanMV 文档中也说明开机时会自动挂载 Flash 和 SDCardSDCard 需要格式化为 FAT 格式。AI 模型加载时路径必须精确到具体文件名。例如官方 MNIST 示例中使用kpu.load_kmodel(/sd/KPU/mnist/uint8_mnist_cnn_model.kmodel)加载 SD 卡中的模型文件自学习示例中也使用/sd/KPU/self_learn_classifier/mb-0.25.kmodel作为模型路径。SD 卡路径管理的重点不是记住某一个固定目录而是建立文件位置和代码路径之间的对应关系。文件放在 SD 卡根目录路径可以写成/sd/model.kmodel文件放在 SD 卡的KPU/mnist文件夹中路径就需要写成/sd/KPU/mnist/model.kmodel。K210 读取文件时路径区分层级和文件名。模型文件名写错、文件夹名称写错、大小写不一致、SD 卡没有识别都会导致加载失败。代码报错时不应直接怀疑模型本身需要先检查 SD 卡是否存在再检查目录是否正确再检查文件名是否完整。硬件设施实验所需硬件本篇实验不需要外接传感器重点检查 SD 卡、开发板和电脑之间的基础连接。若后续模型加载实验需要配合摄像头和 LCD可以在完成 SD 卡路径检查后继续运行 AI 视觉代码。SD 卡建议提前在电脑端格式化为 FAT 或 FAT32并建立清晰目录结构。课程中可以统一使用KPU文件夹保存模型使用images文件夹保存测试图片使用scripts文件夹保存备用脚本。目录结构越稳定后续模型加载越容易排查。插入 SD 卡前应确认金属触点方向正确。程序运行过程中不建议频繁拔插 SD 卡避免文件系统异常。复制模型文件后建议重新插入开发板并运行路径检查程序确认模型文件能够被 K210 读取。程序运行后串口终端会输出根目录内容、SD 卡目录内容、存储空间信息和模型路径检查结果。若 SD 卡识别正常能够看到/sd目录以及其中的文件夹若模型文件存在程序会输出模型路径检查通过。软件代码实验所需软件环境本篇需要 CanMV IDE、USB 串口驱动、CanMV 固件和一张已格式化的 Micro SD 卡。文件系统操作主要使用uos模块完成常用函数包括uos.listdir()、uos.stat()、uos.statvfs()和uos.getcwd()。CanMV 文档中说明uos.listdir([dir])可列出指定目录uos.statvfs(path)可获取文件系统状态。下面程序用于检查 SD 卡挂载状态、目录结构、存储空间和 kmodel 文件路径。运行前可以把模型文件放到/sd/KPU/mnist/uint8_mnist_cnn_model.kmodel也可以根据实际文件名修改MODEL_PATH。# CanMV K210 SD 卡挂载与 kmodel 模型路径检查实验# 功能检查 SD 卡目录、存储空间、模型文件路径并尝试加载 kmodelimportuosimportgc# 根据实际模型位置修改路径MODEL_PATH/sd/KPU/mnist/uint8_mnist_cnn_model.kmodeldefprint_line(title):print()print( {} .format(title))deflist_dir(path):print_line(list dir: {}.format(path))try:filesuos.listdir(path)iflen(files)0:print(empty dir)else:foriteminfiles:print(item)returnTrueexceptExceptionase:print(list dir error:,e)returnFalsedeffile_exists(path):try:uos.stat(path)returnTrueexceptException:returnFalsedefshow_statvfs(path):print_line(file system info: {}.format(path))try:infouos.statvfs(path)# CanMV 的 statvfs 返回文件系统状态元组# info[1] 表示片段大小info[2] 表示总块数info[3] 表示空闲块数frsizeinfo[1]totalinfo[2]*frsize freeinfo[3]*frsizeprint(total size: {} KB.format(total//1024))print(free size : {} KB.format(free//1024))returnTrueexceptExceptionase:print(statvfs error:,e)returnFalsedefcheck_model_path(path):print_line(check kmodel path)print(model path:,path)iffile_exists(path):print(model file exists)returnTrueelse:print(model file not found)print(please check sd card, folder name and file name)returnFalsedeftry_load_kmodel(path):print_line(try load kmodel)ifnotfile_exists(path):print(skip load, model file not found)returnFalsetry:frommaiximportKPU gc.collect()kpuKPU()kpu.load_kmodel(path)print(kmodel load success)# 这里只做加载测试不进入推理流程kpu.deinit()gc.collect()returnTrueexceptExceptionase:print(kmodel load error:,e)returnFalseprint_line(CanMV K210 SD card and kmodel path check)# 查看当前工作目录try:print(current dir:,uos.getcwd())exceptExceptionase:print(getcwd error:,e)# 查看根目录list_dir(/)# 检查 SD 卡目录sd_oklist_dir(/sd)ifsd_ok:show_statvfs(/sd)list_dir(/sd/KPU)list_dir(/sd/KPU/mnist)else:print(sd card may not be mounted or recognized)# 检查模型文件路径model_okcheck_model_path(MODEL_PATH)# 尝试加载模型ifmodel_ok:try_load_kmodel(MODEL_PATH)print_line(check finished)这段程序的核心任务不是完成 AI 推理而是检查模型加载前最容易出错的基础环节。uos.listdir(/)用来查看根目录判断系统是否能访问文件系统uos.listdir(/sd)用来检查 SD 卡是否识别uos.stat(MODEL_PATH)用来判断模型文件是否存在kpu.load_kmodel(MODEL_PATH)用来测试模型是否可以被 KPU 加载。模型路径管理的关键是让代码路径和 SD 卡文件位置完全一致。比如模型文件实际放在KPU/mnist文件夹中代码就不能写成/sd/mnist/model.kmodel模型文件名带有uint8、cnn、版本号或下划线时也需要完整保留。扩展应用常见问题SD 卡和 kmodel 路径相关错误在 AI 视觉实验中非常常见。很多识别程序无法运行并不是摄像头或 KPU 出错而是模型文件没有放到正确目录或者代码中的路径和文件实际位置不一致。扩展实验完成 SD 卡和模型路径检查后可以继续扩展为更完整的项目资源管理实验。比如将模型路径、标签文件路径和测试图片路径统一写入配置表在串口中输出所有模型文件在 LCD 上显示当前加载的模型名称在不同模型之间切换观察加载结果。总结本篇围绕 SD 卡挂载和 kmodel 路径管理完成了基础梳理。AI 视觉实验能否运行除了摄像头和模型代码还取决于 SD 卡是否识别、模型文件是否存在、路径是否准确。掌握/sd、目录结构、uos.listdir()、uos.stat()和load_kmodel()后后续人脸检测、YOLO 识别、MNIST 分类和口罩检测实验会更容易排查。模型加载前先检查路径是 K210 AI 项目的稳定开发习惯。
返回列表