回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】CanMV K230 AI视觉识别模块之使用文件读写 简单

头像 驴友花雕 2025.11.04 3 0

00 (2).jpg

什么是 CanMV K230?
CanMV K230是一款高性价比的RISC-V边缘AI平台,凭借低功耗、强视觉处理能力和开放的开发生态,成为嵌入式AI开发的理想选择,尤其适合需要快速部署视觉与AI功能的创客、中小企业及教育场景。CanMV 是一套 AI 视觉开发平台,K230 是其核心芯片。该模块结合了图像采集、AI推理、边缘计算等能力,适合嵌入式视觉应用开发。

CanMV:类似 OpenMV 的图像处理框架,支持 Python 编程,简化视觉识别开发流程。
K230 芯片:嘉楠科技推出的 AIoT SoC,采用 RISC-V 架构,内置第三代 KPU(AI加速单元),算力高达 6 TOPS,性能是 K210 的 13.7 倍。

00 (3).jpg
00 (4).jpg

知识点
文件读写是程序与外部存储交互的基础操作,用于将数据持久化到磁盘(如保存配置、日志、用户数据)或从磁盘读取数据(如加载文件、解析内容)。不同编程语言的实现语法不同,但核心逻辑一致,通常包括打开文件、操作文件(读 / 写)、关闭文件三个步骤。

核心概念
文件路径:指定文件在存储系统中的位置(绝对路径如C:/data/file.txt,相对路径如./files/log.csv)。
打开模式:决定文件的操作类型,常见模式:
r:只读(默认,文件不存在则报错)。
w:只写(覆盖原有内容,文件不存在则创建)。
a:追加(在文件末尾添加内容,不覆盖原有数据)。
r+/w+/a+:读写混合模式。
二进制模式(如rb/wb):用于非文本文件(图片、音频、二进制数据)。
流(Stream):文件操作通过 “流” 实现,将数据以字节序列的形式传输(读是输入流,写是输出流)。

常见操作场景
1. 文本文件读写(如.txt、.csv)
读文件:按行读取、全部读取,适用于配置文件解析、日志分析等。
写文件:写入字符串、多行内容,适用于保存用户输入、生成报告等。
2. 二进制文件读写(如.png、.zip、.bin)
以字节(byte)为单位操作,适用于处理图片、视频、压缩包等非文本数据。
3. 高效读写
大文件读写时,避免一次性加载到内存(可能导致内存溢出),而是分块读取(如每次读 1024 字节)。
多数语言支持 “上下文管理器”(如 Python 的with语句),自动管理文件关闭,避免资源泄露。

示例(Python 语言)
python
# 1. 写文本文件(覆盖模式)
with open("test.txt", "w", encoding="utf-8") as f:
f.write("Hello, 文件读写!\n") # 写入一行
f.writelines(["第一行\n", "第二行\n"]) # 写入多行

# 2. 读文本文件(全部读取)
with open("test.txt", "r", encoding="utf-8") as f:
content = f.read() # 读取全部内容
print(content)

# 3. 追加内容
with open("test.txt", "a", encoding="utf-8") as f:
f.write("这是追加的一行\n")

# 4. 二进制文件读写(如复制图片)
with open("source.png", "rb") as src, open("copy.png", "wb") as dst:
while True:
chunk = src.read(1024) # 每次读1024字节
if not chunk:
break
dst.write(chunk) # 分块写入

注意事项
编码问题:文本文件需指定编码(如utf-8、gbk),否则可能出现乱码。
资源释放:必须确保文件操作完成后关闭文件(上下文管理器可自动处理),否则可能导致文件被锁定或数据未完全写入。
异常处理:文件操作可能出现错误(如路径不存在、权限不足),需通过try-except捕获异常。

13.jpg

【花雕动手做】CanMV K230 AI视觉识别模块之使用文件读写
项目测试实验代码

代码
#【花雕动手做】CanMV K230 AI视觉识别模块之使用文件读写

# 文件写入 - 将数据写入到SD卡中的文件
# File writing - Write data to a file on the SD card
with open('/sdcard/yahboom.txt', 'w') as f:
    # 向文件中写入字符串内容
    # Write string content to the file
    f.write("Hello Yahboom")

# 文件读取 - 从SD卡中的文件读取数据
# File reading - Read data from the file on the SD card
with open('/sdcard/yahboom.txt', 'r') as f:
    # 读取文件全部内容并打印
    # Read all content from the file and print it
    print(f.read())

我们用CanMV IDE打开例程代码,将K230用usb线连接到电脑上
在系统的文件管理器中,打开CanMV对应的目录。我们进入 CanMV/sdcard这个目录里面

 

14.jpg


CanMV/sdcard/ 目录对应在代码里面就是 /sdcard/

点击CanMV IDE左下角的运行按钮,同时打开下面的串行终端,可以看到这里输出了Hello Yahboom

 

15.jpg


等待程序运行结束后,我们再回到文件管理器里面,可以看到这里多出来了一个yahboom.txt文件

 

16.jpg


我们双击打开这个文件,里面的内容是“Hello Yahboom”

 

17.jpg

代码讲解
# 文件写入
with open('/sdcard/yahboom.txt', 'w') as f:
   f.write("Hello Yahboom")

# 文件读取
with open('/sdcard/yahboom.txt', 'r') as f:
   print(f.read())
我们使用with open as 语法来打开文件系统中的文件
open()方法有两个参数,第一个参数是文件路径,第二个参数是打开模式,
常用的有 r (read,读取模式) 和 w (write, 写入模式)

with open as .... 是一种更为推荐的文件操作方法

with open as 会自动关闭文件,无论代码是否发生异常。退出 with 代码块时,Python 会自动调用文件对象的 close() 方法。
直接使用 open() 需要手动调用 close() 来关闭文件。如果忘记关闭或代码抛出异常,可能会造成资源泄露。
我们可以看一下用与不用的区别

# with open as (推荐使用)
with open('file.txt', 'r') as f:
   content = f.read()
# 文件自动关闭

# 直接使用 open
f = open('file.txt', 'r')
content = f.read()
f.close()  # 需要手动关闭
 

关于文件读写操作
MicroPython 中的文件操作与标准 Python 类似,但功能相对简化。

需要注意的限制:
内存限制:避免一次性读取过大的文件
文件系统:某些开发板可能只支持有限的文件系统功能
路径操作:建议使用简单的相对路径
以下是主要的文件操作方法:

打开文件

# 读取模式打开
f = open('test.txt', 'r')

# 写入模式打开
f = open('test.txt', 'w')

# 追加模式打开
f = open('test.txt', 'a')

# 二进制模式
f = open('test.txt', 'rb')
基本读写操作

# 读取操作
f = open('test.txt', 'r')
content = f.read()      # 读取全部内容
line = f.readline()     # 读取一行
lines = f.readlines()   # 读取所有行到列表
f.close()

# 写入操作
f = open('test.txt', 'w')
f.write('hello\n')      # 写入字符串
f.writelines(['line1\n', 'line2\n'])  # 写入多行
f.close()
推荐使用 with 语句

with open('test.txt', 'r') as f:
   content = f.read()
 

文件系统操作(补充,在Micropython中不一定完全兼容)

import os

# 列出当前目录文件
os.listdir()

# 检查文件是否存在
os.stat('test.txt')

# 删除文件
os.remove('test.txt')

# 重命名文件
os.rename('old.txt', 'new.txt')


实验串口返回情况

 

18.jpg

 

实验场景图 

 

30.jpg
 

评论

user-avatar
icon 他的勋章
    展开更多