canmvk230 0.1studio的按键拍照用于模型训练
【代码】canmvk230 0.1studio的按键拍照用于模型训练。
·
from machine import Pin
from machine import FPIOA
import time, os, sys, gc
from media.sensor import * #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import * #导入media模块,使用meida相关接口
#__________________________________________________________________
#感光元件设置
DISPLAY_WIDTH = 800
DISPLAY_HEIGHT = 480
sensor = Sensor() #构建摄像头对象
sensor.reset() #复位和初始化摄像头
sensor.set_framesize(width=DISPLAY_WIDTH, height=DISPLAY_HEIGHT) #默认通道0
sensor.set_pixformat(Sensor.RGB565) #设置输出图像格式,默认通道0 RGB565
Display.init(Display.ST7701, to_ide=True) #同时使用3.5寸mipi屏和IDE缓冲区显示图像,800x480分辨率
MediaManager.init() #初始化media资源管理器
sensor.run() #启动sensor
clock = time.clock()
#__________________________________________________________________
#将GPIO21配置为普通GPIO模式
fpioa = FPIOA()
fpioa.set_function(21,FPIOA.GPIO21)
#__________________________________________________________________
# 定义按键控制类
class Key_Control(): # 定义按键控制类
img_cnt = 0 # 照片计数值
# 实例化按键控制类 Key_Control() 为 key
key = Key_Control()
#__________________________________________________________________
#每次重新启动的时候读取data盘img文件夹的照片数量
picture_num_path='/data/img' #存放照片在data盘里面 并提前img文件夹
image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'] #照片可能出现的类型
image_count = 0
for filename in os.listdir(picture_num_path):
if any(filename.lower().endswith(ext) for ext in image_extensions):
image_count += 1
print(f"文件夹中的照片文件个数: {image_count}")
#__________________________________________________________________
#读取data盘里面record.txt文件里面记录的照片数量 只有一句话picture:num(之前存放写入的数量)
with open('/data/record.txt', 'r') as f:
content = f.read()
number = content.split(':')[1]
#__________________________________________________________________
#比较你实际存放照片的数量和txt里面写入的数量 (有时候我们拍完后会直接把照片拿出来并删除 然后忘记修改txt里面的数量)
## 照片起始序号设置
if int(number)>int(image_count): #txt里面的数量大于实际照片数量
key.img_cnt = int(image_count)
with open('/data/record.txt', 'w') as f:
f.write(f'picture:{key.img_cnt}')
else:
key.img_cnt = int(number)
KEY=Pin(21,Pin.IN,Pin.PULL_UP) #构建KEY对象
def start():
try:
while True:
os.exitpoint()
clock.tick()
img = sensor.snapshot() #拍摄一张图片
if KEY.value() == 0:
time.sleep_ms(10) #消除抖动 # 延时 10ms 消除按键抖动
if KEY.value() == 0: # 确认 按键0 按下
key.img_cnt = key.img_cnt + 1 # 计数值自增
if key.img_cnt < 10:
img.save("/data/img/000"+str(key.img_cnt)+".jpg")
elif key.img_cnt < 100:
sensor.snapshot().save("/data/img/00"+str(key.img_cnt)+".jpg",quality=95)
elif key.img_cnt < 1000:
sensor.snapshot().save("/data/img/0"+str(key.img_cnt)+".jpg",quality=95)
elif key.img_cnt < 10000:
sensor.snapshot().save("/data/img/"+str(key.img_cnt)+".jpg",quality=95)
with open('/data/record.txt', 'w') as f: #把拍照数量写入txt文件进去
f.write(f'picture:{key.img_cnt}')
while not KEY.value(): #这里可以设置长按标志位 用于扩展拍照功能 可在按下的时候设置按键标志位
pass
img.draw_string_advanced(0, 0, 30, "img_cnt: "+str(key.img_cnt), color = (255, 0, 0))
Display.show_image(img) #显示图片
# Display.show_image(img, x=round((800-sensor.width())/2),y=round((480-sensor.height())/2))#显示图片,仅用于LCD居中方式显示
print(clock.fps())
gc.collect()
except Exception as e:
print(f"An error occurred during running: {e}")
finally:
os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
sensor.stop()
Display.deinit()
MediaManager.deinit()
gc.collect()
if __name__=="__main__":
start()
更多推荐
所有评论(0)