前言:在搞模型训练的时候,发现一张一张照片找,一张一张保存,就感觉好麻烦,就想着我能不能直接拍照呢,然后就写代码到板子上面,直接拍照存储到sd上面,进行模型训练的时候就直接从sd卡上传照片,简单便捷。
目录
一、关键部分代码详细解析
1.检查SD卡是否挂载,并且读取照片数量
2.配置按键中断
3.存储照片到sd卡
二、代码展示
一、关键部分代码详细解析
1.检查SD卡是否挂载,并且读取照片数量
if 'sd' in os.listdir('/'):
# 列出SD卡中图片目录下的所有文件
image_files = [f for f in os.listdir('/sd/pic') if f.endswith('.jpg')]
# 计算图片文件数量
count = len(image_files)
print("Number of images:", count)
else:
print("SD card not mounted")
功能:找出sd卡的所有文件,找到sd卡里面的pic文件(是我在sd卡新建用来放照片的文件),然后读取照片数量,为什么要读取呢,因为我在代码给图片命名是以img[count].jpg的格式,count代表图片个数,需要找到图片个数,才能给下一张图片命名(变量count+1),但是count是在程序定义的变量(掉电会丢失数据)断电重启又会从0开始,因此我们在程序开头读取照片个数并赋值给count,就算断电了也能知道pic文件里面照片的个数,并继续保存图片到sd卡,如下图
2.配置按键中断
# 按键配置
fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS0) # 注册按键GPIO
key_gpio = GPIO(GPIO.GPIOHS0, GPIO.IN) # 初始化按键GPIO为输入
start_processing = False # 按键按下标志
BOUNCE_PROTECTION = 50 # 按键抖动保护时间(毫秒)
# 按键中断服务程序
def set_key_state(*_):
global start_processing #告诉函数start_processing是全局变量
start_processing = True # 设置按键按下标志为True
utime.sleep_ms(BOUNCE_PROTECTION)# 等待以消除按键抖动
key_gpio.irq(set_key_state, GPIO.IRQ_RISING, GPIO.WAKEUP_NOT_SUPPORT)# 设置按键中断
功能:配置BOOT按键,每次按下一次就拍一张照片,定义全局变量标志位 start_processing, 在主程序判断是否按下按键
3.存储照片到sd卡
img.save("/sd/pic/img{}.jpg".format(count)) # 保存图片到SD卡
需导入image库才能使用img.save语句
/sd/pic代表存储路径
img{}.jpg代表照片以这样的方式命名
二、代码展示
import sensor,image,lcd # 导入相关库
from board import board_info # 导入开发板信息
import os
from Maix import FPIOA,GPIO # 导入FPIOA和GPIO库
from fpioa_manager import fm # 导入fpioa_manager库
import time
import utime
# 按键配置
fm.register(board_info.BOOT_KEY, fm.fpioa.GPIOHS0) # 注册按键GPIO
key_gpio = GPIO(GPIO.GPIOHS0, GPIO.IN) # 初始化按键GPIO为输入
start_processing = False # 按键按下标志
BOUNCE_PROTECTION = 50 # 按键抖动保护时间(毫秒)
# 按键中断服务程序
def set_key_state(*_):
global start_processing #告诉函数start_processing是全局变量
start_processing = True # 设置按键按下标志为True
utime.sleep_ms(BOUNCE_PROTECTION)# 等待以消除按键抖动
key_gpio.irq(set_key_state, GPIO.IRQ_RISING, GPIO.WAKEUP_NOT_SUPPORT)# 设置按键中断
clock = time.clock() # 初始化系统时钟,计算帧率
lcd.init() # 初始化lcd
sensor.reset() #初始化sensor 摄像头
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(1) #设置摄像头镜像Q
sensor.set_vflip(1) #设置摄像头翻转
lcd.rotation()
sensor.run(1) #使能摄像头
# 检查SD卡是否挂载
if 'sd' in os.listdir('/'):
# 列出SD卡中图片目录下的所有文件
image_files = [f for f in os.listdir('/sd/pic') if f.endswith('.jpg')]
# 计算图片文件数量
count = len(image_files)
print("Number of images:", count)
else:
print("SD card not mounted")
while(1): # 主循环
img = sensor.snapshot()#从摄像头获取一张图片
clock.tick() #记录时刻,用于计算帧率
img.draw_string(0, 200, "%d" %(count), scale=1, color=(255, 0, 0))
if start_processing:#识别到按键按下
img.save("/sd/pic/img{}.jpg".format(count)) # 保存图片到SD卡
count+=1
start_processing = False
a = lcd.display(img) #刷屏显示
总结:以上就是保存照片到sd卡的教程,有帮助的兄弟点赞支持,欢迎评论区讨论