学习目标:立创·庐山派K230CanMV开发板的进阶学习

第8课:立创·庐山派K230CanMV开发板的使用摄像头
1/2:理论部分

学习内容:使用摄像头

1 本节介绍
📝本节您将学习如何调用板子上的摄像头来实时获取图像。

🏆学习目标

1️⃣如何通过默认摄像头获取图像。

2️⃣如何使用其他两个摄像头。

3️⃣如何用按键将图片保存到TF卡中。

2 现有摄像头

镜头的参数:
在这里插入图片描述
2.1 立创·GC2093-200W摄像头-小镜头版-定焦70cm
在这里插入图片描述
机械尺寸及引脚定义:

请添加图片描述
3 庐山派开发板上的摄像头接口

TODO:放资源标注图,标识处CSI2,CSI0,CSI1.

板子上提供了三路摄像头接口,都是22p-0.5mm的FPC接口,不同的是CSI2(默认摄像头)是立式的可插拔座子,在板子正面;CSI0和CSI1是卧式的翻盖座子,在板子背面,和mipi接口在同一侧。

都兼容树莓派zero和树莓派5的摄像头接口,理论上能给树莓派zero和树莓派5使用的摄像头就可以给我们的板子使用,软件上需要额外适配。目前我们只推荐使用我们定制的GC2093摄像头,动态性能贼棒。

4 K230的摄像头架构

在立创·庐山派-K230-CanMV开发板中,Sensor模块的主要作用是负责获取图像数据。这个模块将光信号转化为数字信号,供后续图像处理算法使用。

K230的Sensor模块API提供了对这些硬件的底层控制,模块负责图像采集与数据处理。该模块提供了一套高级 API,开发者可以利用这些接口轻松获取不同格式与尺寸的图像,而无需了解底层硬件的具体实现。其架构如下图所示:
请添加图片描述
图中,sensor 0、sensor 1 和 sensor 2 分别代表三个图像输入传感器设备;这些传感器主要用于将环境中的光信号转化为数字图像信号。在实际系统中,这些传感器可以安装在不同的位置,用来捕获来自不同视角或者区域的图像数据。比如说三路摄像头场景,车辆前后摄像检测各一路+驾驶仓内一路。也可以将CSI0+CSI1转接成一个4lane的接口用来接更高清的摄像头。

Camera Device 0、Camera Device 1 和 Camera Device 2 是用于处理传感器输入数据的核心单元。每个 Camera Device 可以独立完成图像数据捕获,格式转换及预处理等。传感器和Camera Device之间是多对多的关系,也就是说多个传感器输入可以灵活映射到不同的Camera Device。

每个Camera Device支持 3个输出通道(output channel 0、output channel 1 和 output channel 2)。这些输出通道的主要功能是将处理后的图像数据并行传输到后续的算法模块或显示设备,同时也支持多种数据格式和尺寸。这样的架构设计,让K230能够支持多路图像数据的高效并行处理,非常适合实时性要求较高的AI视觉任务。

K230 的 sensor 模块最多支持三路图像传感器的同时接入,每一路均可独立完成图像数据的采集、捕获和处理。此外,每个视频通道可并行输出三路图像数据供后端模块进行进一步处理。实际应用中,具体支持的传感器数量、输入分辨率和输出通道数将受限于开发板的硬件配置和内存大小,因此需根据项目需求进行综合评估。

三路图像输入:

同时接入3个传感器,适合多摄像头应用场景,比如:

自动驾驶中的多视角检测。
安防监控中的多区域捕获。
工业检测中的多面检测。
三路图像输出:

为每个输入提供并行的多通道输出,便于在不同模块中并发处理,比如:

一路用于实时显示。
一路用于AI算法推理。
一路用于视频存储或回放。

5 摄像头使用指南
要使用 摄像头 sensor,首先需要导入该模块:

from media.sensor import *

5.1 构造函数
描述

通过 csi id 和图像传感器类型构建 Sensor 对象。

在图像处理应用中,用户通常需要首先创建一个 Sensor 对象。CanMV K230 软件可以自动检测内置的图像传感器,无需用户手动指定具体型号,只需设置传感器的最大输出分辨率和帧率。有关支持的图像传感器信息,请参见图像传感器支持列表。如果设定的分辨率或帧率与当前传感器的默认配置不符,系统会自动调整为最优配置,最终的配置可在日志中查看,例如 use sensor 23, output 640x480@90。

语法

sensor = Sensor(id, [width, height, fps])

参数

在这里插入图片描述
返回值
在这里插入图片描述
举例

sensor = Sensor(id=0)
sensor = Sensor(id=0, width=1280, height=720, fps=60)
sensor = Sensor(id=0, width=640, height=480)

庐山派开发板的默认摄像头接口为CSI2,如果Sensor默认内不指定id,则默认为id=2.

也就是说以下两条语句是等效的:

sensor = Sensor()
sensor = Sensor(id=2)

5.1 sensor.reset
描述

复位 sensor 对象。在构造 Sensor 对象后,必须调用此函数以继续执行其他操作。

语法
sensor.reset()

参数
在这里插入图片描述
返回值
在这里插入图片描述
举例

# 初始化 sensor 以及传感器 GC2093
sensor.reset()

5.2 sensor.set_framesize

描述

设置指定通道的输出图像尺寸。用户可以通过 framesize 参数或直接指定 width 和 height 来配置输出图像尺寸。宽度会自动对齐到 16 像素宽

语法

sensor.set_framesize(framesize=FRAME_SIZE_INVALID, chn=CAM_CHN_ID_0, alignment=0, **kwargs)

注意

kwargs是关键词参数(keyword
argument)的缩写,目前可以输入的参数有width和height,这两个参数和framesize所设置的分辨率是一个东西,所以是互斥的,只能二选一。

参数
在这里插入图片描述
参数可选值:

  • 设置输出图像尺寸,【framesize】和【width or height】二选一
framesize
图像帧尺寸 分辨率
Sensor.VGA 640x480
Sensor.HD 1280x720
Sensor.FHD 1920x1080

更多图像帧尺寸

图像帧尺寸 图像帧尺寸
Sensor.QQCIF 88x72
Sensor.QCIF 176x144
Sensor.CIF 352x288
Sensor.QSIF 176x120
Sensor.SIF 352x240
Sensor.QQVGA 160x120
Sensor.QVGA 320x240
Sensor.VGA 640x480
Sensor.HQQVGA 120x80
Sensor.HQVGA 240x160
Sensor.HVGA 480x320
Sensor.B64X64 64x64
Sensor.B128X64 128x64
Sensor.B128X128 128x128
Sensor.B160X160 160x160
Sensor.B320X320 320x320
Sensor.QQVGA2 128x160
Sensor.WVGA 720x480
Sensor.WVGA2 752x480
Sensor.SVGA 800x600
Sensor.XGA 1024x768
Sensor.WXGA 1280x768
Sensor.SXGA 1280x1024
Sensor.SXGAM 1280x960
Sensor.UXGA 1600x1200
Sensor.HD 1280x720
Sensor.FHD 1920x1080
Sensor.QHD 2560x1440
Sensor.QXGA 2048x1536
Sensor.WQXGA 2560x1600
Sensor.WQXGA2 2592x1944
  • width or height
    • 这个就是自己填分辨率就行。
  • 设置输出通道号
    • chn
      • 通道0:CAM_CHN_ID_0
      • 通道1:CAM_CHN_ID_1
      • 通道2:CAM_CHN_ID_2

返回值

注意事项

  • 输出图像尺寸不得超过图像传感器的实际输出能力。
  • 各通道的最大输出图像尺寸受硬件限制。

举例

# 配置 sensor 设备,输出通道 0,输出图尺寸为 640x480
sensor.set_framesize(chn=CAM_CHN_ID_0, width=640, height=480)

# 配置 sensor 设备,输出通道 1,输出图尺寸为 320x240
sensor.set_framesize(chn=CAM_CHN_ID_1, width=320, height=240)

# 配置 sensor 设备,输出通道 3,输出图尺寸为 640x480
sensor.set_framesize(chn=CAM_CHN_ID_3, framesize = sensor.VGA)

5.3 sensor.set_pixformat
描述

配置指定通道的图像传感器输出图像格式。

语法

sensor.set_pixformat(pix_format, chn=CAM_CHN_ID_0)

参数

参数名称 描述 输入/输出
pix_format 输出图像格式(像素格式) 输入
chn sensor 输出通道号 输入

参数可选值:

  • 设置像素格式(如果想知道这些像素格式的具体定义,请看后续的摄像头基础知识部分)
像素格式 说明
Sensor.RGB565 16 位 RGB 格式
Sensor.RGB888 24 位 RGB 格式
Sensor.RGBP888 分离的 24 位 RGB
Sensor.YUV420SP 半平面 YUV
Sensor.GRAYSCALE 灰度图
  • 设置输出通道号
    • chn
      • 通道0:CAM_CHN_ID_0
      • 通道1:CAM_CHN_ID_1
      • 通道2:CAM_CHN_ID_2

返回值

举例

# 配置 sensor 设备 0,输出通道 0,输出 NV12 格式
sensor.set_pixformat(Sensor.YUV420SP, chn=CAM_CHN_ID_0)

# 配置 sensor 设备 0,输出通道 1,输出 RGB888 格式
sensor.set_pixformat(Sensor.RGB888, chn=CAM_CHN_ID_1)

5.4 sensor.set_hmirror

描述

配置图像传感器是否进行水平镜像。

语法

sensor.set_hmirror(enable)

参数

参数名称 描述 输入/输出
enable True 开启水平镜像功能
False 关闭水平镜像功能
输入

返回值

举例

sensor.set_hmirror(True)

5.5 sensor.set_vflip
描述

配置图像传感器是否进行垂直翻转。

语法

sensor.set_vflip(enable)

参数

参数名称 描述 输入/输出
enable True 开启垂直翻转功能
False 关闭垂直翻转功能
输入

返回值

举例

sensor.set_vflip(True)

5.6 sensor.run

描述

启动图像传感器的输出。必须在调用 MediaManager.init() 之前执行此操作。

语法

sensor.run()

返回值

注意事项

  • 当同时使用多个传感器(最多 3 个)时,仅需其中一个执行 run 即可。

举例

# 启动 sensor 设备输出数据流
sensor.run()

5.7 sensor.stop

描述

停止图像传感器输出。必须在 MediaManager.deinit() 之前调用此方法。

语法

sensor.stop()

返回值

返回值 描述
无相关返回内容

注意事项

  • 如果同时使用多个图像传感器(最多 3 个),每个传感器都需单独调用 stop。

举例

# 停止 sensor 设备 0 的数据流输出
sensor.stop()

5.8 sensor.snapshot
描述

  • 从指定输出通道中捕获一帧图像数据。

语法

sensor.snapshot(chn=CAM_CHN_ID_0)

参数

参数名称 描述 输入/输出
chn sensor 输出通道号 输入

返回值

返回值 描述
image 对象 捕获的图像数据
其他 捕获失败

举例

# 从 sensor 设备 0 的通道 0 捕获一帧图像数据
sensor.snapshot()

声明:
上述中关于立创・庐山派K230-CanMV开发板的内容,均来源于立创开发板官方资料,包括但不限于硬件参数、功能特性、应用案例、开源资源等信息。
若您希望详细学习和了解立创・庐山派K230-CanMV开发板的更多技术细节、使用教程及相关资源,可访问立创开发板官方资料页面进行查阅,具体网址为:https://wiki.lckfb.com/zh-hans/lushan-pi-k230/


学习时间:7月27日

1. 本节介绍

本节核心目标是指导开发者掌握立创·庐山派K230CanMV开发板摄像头的基本使用方法,包括默认摄像头调用、多摄像头切换以及通过按键保存图像到TF卡。

理解:这部分明确了学习的边界和目标,让开发者能快速定位重点。从实际应用角度看,这三个目标覆盖了摄像头使用的核心场景——基础采集、多设备扩展和数据持久化,无论是简单的图像采集还是复杂的多视角视觉任务,都是必备技能。

2. 现有摄像头

文中详细介绍了立创·GC2093-200W摄像头的参数、机械尺寸及引脚定义。

理解:硬件参数是软件开发的基础,了解摄像头的性能指标(如200W像素、定焦70cm)能帮助开发者合理规划应用场景。例如,该摄像头适合中等距离的静态或动态拍摄,但不适合微距或超远距离场景。引脚定义则为硬件连接提供了依据,确保开发者能正确安装摄像头。

3. 庐山派开发板上的摄像头接口

开发板提供三路22p-0.5mm FPC接口,其中CSI2为立式可插拔座子(正面,默认摄像头),CSI0和CSI1为卧式翻盖座子(背面),且兼容树莓派相关接口。

理解:多接口设计极大提升了开发板的扩展性。默认接口的设置降低了入门门槛,新手可快速上手;而额外的接口则为多摄像头应用(如360度监控、多视角物体识别)提供了可能。兼容树莓派接口是个贴心设计,降低了摄像头硬件的获取难度,开发者可复用现有设备。

4. K230的摄像头架构

K230的Sensor模块负责图像数据获取,其架构支持三路图像传感器接入,每个Camera Device可独立处理数据并提供3个输出通道,支持多格式、多尺寸图像并行传输。

理解:这种架构设计体现了强大多任务处理能力。多传感器接入满足了复杂场景需求(如自动驾驶多视角检测),而多输出通道则实现了“一源多用”(如同时显示、AI推理、存储),大幅提升了系统效率。并行处理能力对实时性要求高的AI视觉任务至关重要,避免了数据处理瓶颈。

5. 摄像头使用指南

5.1 构造函数

通过Sensor(id, [width, height, fps])创建Sensor对象,默认id为2(对应CSI2接口),系统会自动适配传感器参数。

理解:简洁的构造函数设计降低了使用难度,自动适配功能避免了开发者深入了解硬件细节。参数的灵活性(可指定分辨率和帧率)让开发者能根据需求平衡图像质量和性能,例如低帧率适合静态场景以节省资源,高帧率适合动态捕捉。

5.2 sensor.reset

构造Sensor对象后必须调用的复位函数。

理解:这一步是硬件初始化的必要操作,确保摄像头处于就绪状态。类似于其他硬件设备的“上电复位”,是软件与硬件交互的标准流程,体现了底层驱动的规范性。

5.3 sensor.set_framesize

设置指定通道的输出图像尺寸,支持预设尺寸(如VGA、HD)或自定义宽高(宽度自动16像素对齐)。

理解:多通道和多尺寸支持为多样化需求提供了可能。例如,通道0输出高分辨率图像用于存储,通道1输出低分辨率图像用于实时显示,兼顾细节和速度。16像素对齐的要求是硬件底层的约束,开发者需注意避免因尺寸设置不当导致的错误。

5.4 sensor.set_pixformat

配置指定通道的图像格式(如RGB565、YUV420SP、灰度图)。

理解:图像格式的选择需结合应用场景。RGB格式适合需要色彩信息的场景(如物体识别中的颜色特征),灰度图适合只关注轮廓的场景(如边缘检测),YUV格式则在视频传输中更高效。合理选择格式能减少数据量,提升处理速度。

5.5 sensor.set_hmirror与sensor.set_vflip

分别控制图像的水平镜像和垂直翻转。

理解:这两个功能在实际应用中非常实用。例如,摄像头安装方向倒置时,可通过垂直翻转纠正图像;需要模拟镜像效果时,水平镜像功能可直接实现,无需额外算法处理。

5.6 sensor.run与sensor.stop

run()启动图像传感器输出(需在MediaManager.init()前调用),stop()停止输出(需在MediaManager.deinit()前调用),多传感器时仅需一个调用run(),但每个都需调用stop()

理解:启动和停止的时序要求体现了系统资源管理的严谨性。run()的统一调用减少了冗余操作,而stop()的单独调用确保了每个设备都能正确释放资源,避免内存泄漏或硬件冲突。

5.7 sensor.snapshot

从指定通道捕获一帧图像数据。

理解:这是获取图像的核心接口,简洁的调用方式让开发者能快速获取图像进行后续处理(如显示、分析、存储)。通道参数的设置使其能灵活获取不同尺寸或格式的图像,满足多样化需求。

总结

立创·庐山派K230CanMV开发板的摄像头接口设计和软件API封装兼顾了易用性和扩展性。从硬件接口到软件架构,都围绕多任务、实时性的视觉应用进行优化,适合从入门到进阶的各类开发需求。开发者只需掌握核心API的使用,即可快速实现复杂的摄像头应用,大大降低了嵌入式视觉开发的门槛。


学习产出:

  • 了解并学习如何使用k230的摄像头
  • 学习k230 的关于摄像头的相关代码
  • 运行k230的例程代码
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐