这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 有奖活动 » 使K230DBOX实现相机持续拍照功能

共1条 1/1 1 跳转至

使K230DBOX实现相机持续拍照功能

助工
2026-08-06 22:55:49     打赏

K230D BOX上配有摄像头及TF卡存储功能,从而为照片拍摄功能提供了有力的支持。此外,为了便于学习和使用该提供基本照片拍摄程序。

K230D BOX开发板上配有两处MIPI摄像头接口,并位于CNK230DF板,该接口可以直接连接K230D BOX开发板自带的GC2093摄像头模组注意的是,默认情况下使用的MIPI CSI2接口,即CNK230DF核心板上的J1接口,见图1所示

image.png

1 J1接口

K230D BOX板上的GC2093摄像头模块接口,2所示

image.png

2 J2接口

在按键的配合下,可将照片存储为JPG或BMP格式,见图3所示。

image.png

3 生成2种格式文件

稍感不足的是,其文件名称是固定,这就造成后拍摄的内容会覆盖先拍摄的内容,一种格式的文件只能存在一个。

为便于实现连续拍摄的目的,将程序修改为自动命名文件名,这样就避免了同名覆盖的问题。

修改后的程序为:

import time, os, sys
from machine import Pin
from machine import FPIOA
from media.sensor import *  #导入sensor模块,使用摄像头相关接口
from media.display import * #导入display模块,使用display相关接口
from media.media import *   #导入media模块,使用meida相关接口
import image                #导入Image模块,使用Image相关接口
 
# 实例化FPIOA
fpioa = FPIOA()
 
# 为IO分配相应的硬件功能
fpioa.set_function(34, FPIOA.GPIO34)
fpioa.set_function(35, FPIOA.GPIO35)
 
# 构造GPIO对象
key0 = Pin(34, Pin.IN, pull=Pin.PULL_UP, drive=7)
key1 = Pin(35, Pin.IN, pull=Pin.PULL_UP, drive=7)
 
try:
    try:
        os.mkdir("/data/PHOTO")
    except Exception:
        pass
    sensor = Sensor(width=1280, height=960) # 构建摄像头对象
    sensor.reset() # 复位和初始化摄像头
 
    sensor.set_framesize(Sensor.VGA)      # 设置帧大小VGA(640x480),默认通道0
    sensor.set_pixformat(Sensor.YUV420SP) # 设置输出图像格式,默认通道0
 
    # 将通道0图像绑定到视频输出
    bind_info = sensor.bind_info()
    Display.bind_layer(**bind_info, layer=Display.LAYER_VIDEO1)
 
    # 设置通道1输出格式,用于图像保存
    sensor.set_framesize(Sensor.SXGAM, chn=CAM_CHN_ID_1)  # 输出帧大小SXGAM(1280x960)
    sensor.set_pixformat(Sensor.RGB565, chn=CAM_CHN_ID_1) # 设置输出图像格式,选择通道1
 
    # 初始化LCD显示器,同时IDE缓冲区输出图像,显示的数据来自于sensor通道0。
    Display.init(Display.ST7701, width = 640, height = 480, to_ide = False)
    MediaManager.init()  # 初始化media资源管理器
 
    sensor.run()  # 启动sensor
    m=0
    while True:
        name="/data/PHOTO/photo"+str(m)+".jpg"
        os.exitpoint() # 检测IDE中断
        # 读取按键状态,并做相应的按键解释
        if key0.value() == 0:
            img = sensor.snapshot(chn=CAM_CHN_ID_1) # 从通道1捕获图像
            img.save(name)
            m=m+1
            print("snapshot success") # 提示照片保存成功
            time.sleep_ms(500)
        if key1.value() == 0:
            img = sensor.snapshot(chn=CAM_CHN_ID_1) # 从通道1捕获图像
            img.save("/data/PHOTO/photo.bmp")
            print("snapshot success") # 提示照片保存成功
            time.sleep_ms(50)
        time.sleep_ms(10)
# IDE中断释放资源代码
except KeyboardInterrupt as e:
    print("user stop: ", e)
except BaseException as e:
    print(f"Exception {e}")
finally:
    # sensor stop run
    if isinstance(sensor, Sensor):
        sensor.stop()
    # deinit display
    Display.deinit()
    os.exitpoint(os.EXITPOINT_ENABLE_SLEEP)
    time.sleep_ms(100)
    # release media buffer
MediaManager.deinit()

经程序运行,其连续拍照的测试效果如图4和图5所示,说明符合预期的设计目标。

image.png

4 自动文件命名

image.png

5 拍照内容

有了连续拍照功能,就为后续的人脸识别的注册管理提供了有效的支持。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]