基于K230的图片采集,并接后续跟我学用K230实现图像分类
因为在这个视频中看到一个通过按键采集照片,建立dataset的方法。但是苦于视频中提到的gitee中的源码力并没有所谓的data。
·
【Yolo系列课】跟我学用K230实现图像分类_哔哩哔哩_bilibili
因为在这个视频中看到一个通过按键采集照片,建立dataset的方法。
但是苦于视频中提到的gitee中的源码力并没有所谓的datacollection.py
所以只好自己想办法把这个功能给补上,最后终于在sdcard下的data文件夹收集到对应的数据图片了,这样就可以按照视频视频中的方法进行数据集的划分,并继续后面的实验了。

这个是ide运行文件个数的susess提示:
那么关键还是要上代码:
import time, os, sys
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
from machine import Pin, FPIOA # 导入Pin模块用于GPIO操作
# 如果你外接了按键到其他引脚,请修改为对应的物理引脚号。
KEY_PIN_NUM = 21 # <--- 修改这里! 例如改为 29 for K230 Dock BUCK_KEY
# KEY_PIN_NUM 对应的 GPIO 功能号 (通常与 GPIO 编号一致)
# K230 Dock BUCK_KEY (Pin 29) 映射到 GPIO 21
KEY_GPIO_FUNC = FPIOA.GPIO21 # <--- 如果 KEY_PIN_NUM 变了,确认这个映射
# 保存图片的路径 (请确保SD卡已插入且此路径可写)
IMG_SAVE_PATH="/sdcard/data"
# 图片文件名前缀 (第一个数字) 和起始编号
# 程序会自动从此编号开始递增,例如 0_0.jpg, 0_1.jpg, ...
# 如果前缀不是数字,则编号从 0 开始。
IMG_SAVE_NAME_PREFIX="0"
# 摄像头分辨率设置
# Sensor.QQVGA: 160x120
# Sensor.QVGA: 320x240
# Sensor.VGA: 640x480
# Sensor.SVGA: 800x600
# Sensor.XGA: 1024x768
# Sensor.HD: 1280x720
# Sensor.SXGA: 1280x1024
# Sensor.UXGA: 1600x1200
# Sensor.FHD: 1920x1080
SENSOR_RESOLUTION = Sensor.FHD # 使用FHD (1920x1080)
# 图片保存格式和质量
SAVE_IMG_FORMAT = "jpg" # 可以是 "jpg", "png", "bmp" 等 sensor 支持的格式
SAVE_IMG_QUALITY = 95 # JPG 质量 (0-100), 对其他格式无效
# --- 配置结束 ---
# 尝试从前缀初始化编号
try:
save_num = int(IMG_SAVE_NAME_PREFIX)
IMG_SAVE_NAME_BEGIN = IMG_SAVE_NAME_PREFIX # 如果是数字,前缀就是它本身
print(f"Starting save number from prefix: {save_num}")
except ValueError:
save_num = 0
IMG_SAVE_NAME_BEGIN = IMG_SAVE_NAME_PREFIX # 如果不是数字,也用它做前缀
print(f"Prefix '{IMG_SAVE_NAME_PREFIX}' is not a number, starting save number from 0.")
sensor = Sensor() #构建摄像头对象
sensor.reset() #复位和初始化摄像头
sensor.set_framesize(Sensor.FHD) #设置帧大小FHD(1920x1080),默认通道0
sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0
#使用IDE缓冲区输出图像,显示尺寸和sensor配置一致。
Display.init(Display.VIRT, sensor.width(), sensor.height())
# 4. 初始化 GPIO 按键
print(f"Initializing GPIO Key on Pin {KEY_PIN_NUM}...")
try:
# 将 KEY_PIN_NUM 设置为输入模式,并启用内部上拉电阻
# 按键按下时,引脚电平应变为低 (0)
fpioa = FPIOA()
# 将物理引脚 KEY_PIN_NUM 映射到指定的 GPIO 功能
fpioa.set_function(KEY_PIN_NUM, KEY_GPIO_FUNC)
# 创建 Pin 对象,使用映射后的引脚,设置为上拉输入
KEY = Pin(KEY_PIN_NUM, Pin.IN, Pin.PULL_UP)
print(f"GPIO Key on Pin {KEY_PIN_NUM} initialized. Press to save image.")
time.sleep_ms(50) # 短暂延时确保上拉稳定
except Exception as e:
print(f"Error initializing GPIO Key on Pin {KEY_PIN_NUM}: {e}")
print("Please ensure the pin number is correct and not already in use.")
print("Image saving via button press will be disabled.")
KEY = None # 标记按键不可用
MediaManager.init() #初始化media资源管理器
sensor.run() #启动sensor
clock = time.clock()
last_key_state = 1 # 记录上次按键状态 (1: 弹起, 0: 按下)
while True:
################
## 这里编写代码 ##
################
clock.tick()
img = sensor.snapshot() #拍摄一张图
if img is None:
print("Error: Failed to capture image.")
time.sleep_ms(100)
continue
# --- 按键检测与图像保存逻辑 (修正) ---
current_key_state = 1 # 默认状态为弹起 (高电平)
if KEY is not None: # 只有按键初始化成功才读取状态
current_key_state = KEY.value()
# 检测下降沿 (从 1 -> 0),表示按键刚刚被按下
if last_key_state == 1 and current_key_state == 0:
print("Key pressed!")
# 构建完整的文件名
filename = f"{IMG_SAVE_PATH}/{IMG_SAVE_NAME_BEGIN}_{save_num}.{SAVE_IMG_FORMAT}"
try:
# 保存图像
print(f"Saving image: {filename} ...")
img.save(filename, quality=SAVE_IMG_QUALITY)
print(f"Image saved successfully: {filename}")
save_num += 1 # 递增编号
# (可选) 在IDE输出的图像上显示保存成功的提示
img.draw_string(10, 10, f"Saved: {filename}", color=(0, 255, 0), scale=2)
except Exception as e:
print(f"Error saving image {filename}: {e}")
# (可选) 在IDE输出的图像上显示错误提示
img.draw_string(10, 10, f"Save Error!", color=(255, 0, 0), scale=2)
# 简单的按键消抖/延迟 - 等待按键释放
print("Waiting for key release...")
time.sleep_ms(50) # 短暂延时防抖
while KEY is not None and KEY.value() == 0: # 只要按键还按着就等待
time.sleep_ms(20)
print("Key released.")
# 按键已释放,确保下次循环能检测到按下事件
# current_key_state 理论上现在是 1, 下次循环开始时会重新读取
# 更新上一次的按键状态,为下一次循环做准备
last_key_state = current_key_state
# --- 按键逻辑结束 ---
Display.show_image(img) #显示图片
print(clock.fps()) #打印FPS
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)