csi --- 摄像头传感器

csi 模块是 OpenMV Cam 上摄像头传感器的现代化、面向对象的接口。每个物理传感器都由一个 CSI 实例表示,因此那些将彩色传感器与热成像或事件传感器配对的多光谱成像板,可以通过向构造函数传入不同的 cid 来独立驱动每一个传感器。单传感器的相机只需实例化一个 CSI 即可。

一个 CSI 对象拥有完整的传感器配置——像素格式、framesize / 窗口、曝光 / 增益 / 白平衡、硬件镜像与翻转、彩条测试图案、帧率时钟、用于自动曝光的 ROI,以及特定芯片的 ioctl 命令。帧通过 CSI.snapshot() 捕获,它返回一个由帧缓冲区支撑的 image.Image

本模块取代了旧的 sensor 模块(后者将相同的功能以模块级函数的形式暴露,并绑定到单个隐藏的传感器上)。新代码应使用 CSI

用法示例:

import csi

# Setup camera.
csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)
csi0.snapshot(time=2000)  # skip frames

# Take pictures.
while(True):
    csi0.snapshot()

Asyncio 用法

上面阻塞式的 CSI.snapshot() 循环无法与 asyncio 事件循环协作——当 snapshot 在等待下一帧时,程序中其他所有的协程都会被冻结。要让捕获循环与其他并发任务(UART 客户端、按钮监视器、网络任务)共存,可以将 CSI 包装在一个小型适配器中,通过轮询 snapshot(blocking=False) 并在每次检查之间让出给事件循环,从而把 snapshot 变成一个 await 友好的协程:

import asyncio
import csi


class AsyncCSI:
    def __init__(self, *args, **kwargs):
        self._csi = csi.CSI(*args, **kwargs)

    def __getattr__(self, name):
        return getattr(self._csi, name)

    async def snapshot(self):
        while True:
            img = self._csi.snapshot(blocking=False)
            if img is not None:
                return img
            await asyncio.sleep_ms(0)

__getattr__ 会把其他所有属性(resetpixformatframesize 以及各个传感器调节项)转发给底层的 CSI,因此该包装器可作为无缝替换。第一次非阻塞调用还会在相机的 DMA 捕获尚未运行时将其启动,因此无需额外的引导步骤。

捕获循环随后便可作为又一个协程融入更大的 asyncio 程序中:

async def capture_loop(cam):
    while True:
        img = await cam.snapshot()
        # process img here

async def main():
    cam = AsyncCSI()
    cam.reset()
    cam.pixformat(csi.RGB565)
    cam.framesize(csi.QVGA)

    asyncio.create_task(some_other_task())
    await capture_loop(cam)

asyncio.run(main())

framebuffers 设置在这种形式下仍然很重要——单缓冲模式会让 snapshot(blocking=False) 在下一帧捕获之前返回 None,而双缓冲或三缓冲则可平滑这一过程,使包装器通常在第一次轮询时就能找到一个已缓冲的帧在等待。完整的演练请参阅 asyncio 教程中的 AsyncCSI 总结案例。

class CSI -- 摄像头传感器接口

CSI 类用于控制摄像头传感器。

class csi.CSI(cid: int = -1, delays: bool = True, fflush: bool = True, stream: bool | None = None)

创建一个用于与摄像头传感器通信的对象。在拥有多个传感器的板子上,可以通过传入像 csi.LEPTON 这样的 cid 来选择特定的 CSI 对象,以选中 FLIR Lepton 传感器模块。如果 cid 为 -1,则选中主传感器(在多传感器板上通常是彩色摄像头模块)。

如果 delaysFalse,则禁用 csi 驱动中所有的稳定时间延迟。默认情况下,传感器驱动会在复位 / 模式切换后进行延迟,以防止 CSI.snapshot 返回损坏的帧。禁用延迟可让你批量进行更新,并在调用 CSI.snapshot 之前于最后统一应用一次延迟。

如果 fflushFalse,则禁用 CSI.framebuffers 中提到的自动帧缓冲区刷新。这将取消帧缓冲区 fifo 中帧的任何时间限制。

stream 选择此 CSI 是否作为发送到 IDE 的流源。如果为 None(默认),则仅当此 CSI 为主(非辅助)传感器时才成为流源。传入 True 可强制此 CSI 成为流源,或传入任何假值以保持现有流源不变。

方法

reset(hard: bool = True) None

初始化摄像头传感器。如果 hardTrue,则通过切换连接到摄像头模块的 RESET 信号 GPIO 来执行硬件复位。在复位与主模块共用同一 RESET 信号 GPIO 的辅助摄像头传感器时,hard 应设为 false。

shutdown(enable: bool) None

使摄像头进入比睡眠更低的功耗模式(但摄像头在被唤醒时必须复位)。

sleep(enable: bool) None

如果 enable 为 True,则使摄像头进入睡眠。否则将其唤醒。

flush() None

将当前帧缓冲区的内容复制到 IDE 预览。如果脚本将要终止,请在最后一次 CSI.snapshot 之后调用此方法,以便 IDE 显示最后一帧。

snapshot(time: int = -1, frames: int = -1, blocking: bool = True, image: image.Image | None = None) image.Image | None

使用摄像头拍摄一张照片并返回一个 image.Image 对象。

如果传入了 time 和/或 frames,snapshot 将阻塞相应的 time 毫秒数和/或从相机捕获的 frames 帧数。两个参数可以同时使用。在 time 和/或 frames 过去之后,snapshot 将返回 None

blocking 可以为 False 以启用非阻塞行为,这将导致 snapshot 在相机的下一帧图像尚未就绪时返回 None,而不是等待。

image 可以是另一个 image.Image 对象,用于以从相机捕获的新图像更新它,而不是返回一个新的 image.Image 对象。先前的图像内容会通过深拷贝被覆盖。

如果启用了 CSI.auto_rotation,此方法将返回一个已经旋转过的 image.Image

width() int

返回传感器的分辨率宽度。

height() int

返回传感器的分辨率高度。

cid() int

返回摄像头模块的芯片 ID。可与 csi.OV2640csi.OV5640csi.OV7670csi.OV7690csi.OV7725csi.OV9650csi.MT9V022csi.MT9V024csi.MT9V032csi.MT9V034csi.MT9M114csi.BOSON320csi.BOSON640csi.LEPTONcsi.HM01B0csi.HM0360csi.GC2145csi.GENX320EScsi.GENX320csi.PAG7920csi.PAG7936csi.PAJ6100csi.FROGEYE2020csi.SOFTCSI 中的任意一个进行比较。

readable() bool

如果有一张图像已就绪可由 CSI.snapshot 返回(即调用 snapshot 不会阻塞),则返回 True

pixformat(pixformat: int | None = None) int | None

将摄像头模块的像素格式设置为 csi.GRAYSCALEcsi.RGB565csi.BAYERcsi.YUV422csi.JPEG(仅限 OV2640/OV5640)之一。

如果不带参数调用,则返回当前的 pixformat。

framesize(framesize: int | Tuple[int, int] | None = None) int | None

将摄像头模块的帧尺寸设置为某个尺寸常量(例如 csi.QVGAcsi.VGAcsi.HD 等——参见常量部分)。

或者,你也可以传入一个 (w, h) 元组作为自定义 framesize。在调用 CSI.snapshot 时,自定义 framesize 将根据 DMA 规则进行校验。一般来说,framesize 需要是 8 像素和/或 16 字节的倍数。

如果不带参数调用,则返回当前的 framesize。

framerate(rate: int | None = None) int | None

设置摄像头模块的帧率(单位 Hz)。

如果不带参数调用,则返回当前的帧率。

备注

CSI.framerate 的工作方式是丢弃摄像头模块接收到的帧,以使帧率保持在指定速率或更低。默认情况下,相机将以最大帧率运行。如果特定摄像头传感器实现了该功能,CSI.framerate 还会在内部降低摄像头传感器的帧率,以节省功耗并通过增加传感器曝光来提升图像质量。在某些相机上,CSI.framerate 可能与 CSI.auto_exposure 冲突。

window(roi: Tuple[int, int] | Tuple[int, int, int, int] | None = None) Tuple[int, int, int, int] | None

将摄像头的分辨率设置为当前分辨率的一个子区域。roi 是一个 (x, y, w, h) 元组。你也可以传入 (w, h),此时窗口将居中。

如果不带参数调用,则返回当前的 (x, y, w, h) 元组。

gainceiling(gainceiling: int) bool

将摄像头图像的增益上限设置为 2、4、8、16、32、64 或 128 之一。

成功时返回 True,失败时返回 False

brightness(brightness: int) bool

设置摄像头图像的亮度。

成功时返回 True,失败时返回 False

contrast(contrast: int) bool

设置摄像头图像的对比度。

成功时返回 True,失败时返回 False

saturation(saturation: int) bool

设置摄像头图像的饱和度。

成功时返回 True,失败时返回 False

quality(quality: int) bool

设置摄像头图像的 JPEG 压缩质量。范围为 0 - 100。

成功时返回 True,失败时返回 False

备注

仅适用于 OV2640/OV5640 相机。

colorbar(enable: bool) bool

开启(True)或关闭(False)彩条模式。默认为关闭。

成功时返回 True,失败时返回 False

auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None

enable 开启(True)或关闭(False)自动增益控制。相机启动时自动增益控制为开启状态。

如果 enableFalse,你可以用 gain_db 设置一个固定的增益(单位分贝)。

如果 enableTrue,你可以用 gain_db_ceiling 为自动增益控制算法设置最大增益上限(单位分贝)。

备注

如果你想跟踪颜色,还需要关闭白平衡。

gain_db() float

返回当前摄像头的增益值(单位分贝)。

auto_exposure(enable: bool, exposure_us: int = -1) None

enable 开启(True)或关闭(False)自动曝光控制。相机启动时自动曝光控制为开启状态。

如果 enableFalse,你可以用 exposure_us 设置一个固定的曝光时间(单位微秒)。

备注

相机的自动曝光算法在调整曝光值的幅度上相当保守,通常会避免大幅改变曝光值。相反,它们会大幅改变增益值来应对光照变化。

exposure_us() int

返回当前摄像头的曝光值(单位微秒)。

auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None

enable 开启(True)或关闭(False)自动白平衡。相机启动时自动白平衡为开启状态。

如果 enableFalse,你可以用 rgb_gain_db 分别为红、绿、蓝通道设置固定的增益(单位分贝)。

备注

如果你想跟踪颜色,还需要关闭增益控制。

rgb_gain_db() Tuple[float, float, float]

返回一个元组 (r, g, b),包含当前摄像头红、绿、蓝增益值(单位分贝)。

auto_blc(enable: bool, regs: List[int] | None = None) None

设置摄像头上的自动黑电平校准(BLC)。

enable 传入 TrueFalse 以开启或关闭 BLC。通常你总是希望开启它。

regs 如果禁用了 BLC,你可以根据之前对 CSI.blc_regs 的调用结果手动设置 BLC 寄存器的值。

blc_regs() List[int]

以整数列表的形式返回传感器的 BLC 寄存器。用于配合 CSI.auto_blc 使用。

hmirror(enable: bool | None = None) bool | None

开启(True)或关闭(False)水平镜像模式。默认为关闭。

如果不带参数调用,则返回当前设置。

vflip(enable: bool | None = None) bool | None

开启(True)或关闭(False)垂直翻转模式。默认为关闭。

如果不带参数调用,则返回当前设置。

transpose(enable: bool | None = None) bool | None

开启(True)或关闭(False)转置模式。默认为关闭。

  • vflip=False, hmirror=False, transpose=False -> 旋转 0 度

  • vflip=True, hmirror=False, transpose=True -> 旋转 90 度

  • vflip=True, hmirror=True, transpose=False -> 旋转 180 度

  • vflip=False, hmirror=True, transpose=True -> 旋转 270 度

如果不带参数调用,则返回当前设置。

auto_rotation(enable: bool | None = None) bool | None

开启(True)或关闭(False)自动旋转模式。默认为关闭。

如果不带参数调用,则返回当前设置。

备注

此方法仅在 OpenMV Cam 安装了 imu 时有效,并且会自动启用。

framebuffers(count: int | None = None) int | None

设置用于接收图像数据的帧缓冲区数量。默认情况下,OpenMV Cam 将尝试分配它所能分配的最大数量的帧缓冲区。每当调用 CSI.pixformatCSI.framesizeCSI.window 时都会发生重新分配。

count 为 1(单缓冲)、2(双缓冲)或 3(三缓冲)时,选择相应的捕获模式。传入 4 或更大的值可将驱动置于视频 FIFO 模式,此时会排队 count 个缓冲区——对于录制视频到 SD 卡很有用。在丢帧时,除当前活动的缓冲区外,所有帧缓冲区都会被清空,因此 CSI.snapshot 总能返回最近的一帧。

如果不带参数调用,则返回当前的数量。

special_effect(effect: int) bool

设置特殊数字效果(csi.NORMALcsi.NEGATIVE 之一)。

成功时返回 True,失败时返回 False

lens_correction(enable: bool, radi: int, coef: int) bool

enable 传入 True 以启用,False 以禁用。radi 要校正的像素半径(整数)。coef 校正强度。

成功时返回 True,失败时返回 False

vsync_callback(cb: Callable[[int], None] | None = None) Callable[[int], None] | None

注册回调 cb,使其在每当摄像头模块生成新帧时(但在接收该帧之前)执行(在中断上下文中)。

cb 接受一个参数,传入的是 vsync 引脚在变化后的当前状态。

如果不带参数调用,则返回已注册的回调。传入任何不可调用的值可清除回调。

frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None

注册回调 cb,使其在每当摄像头模块生成新帧且该帧已就绪可通过 CSI.snapshot 读取时执行(在中断上下文中)。

cb 不接受任何参数。可以用它配合 micropython.schedule() 稍后调度读取一帧。

如果不带参数调用,则返回已注册的回调。传入任何不可调用的值可清除回调。

ioctl(request: int, *args) Any

执行一个特定于传感器的请求。requestIOCTL_* 常量之一;其余位置参数和返回值取决于具体请求。下面按传感器系列对支持的请求进行了分组。

通用(任意传感器):

ioctl(IOCTL_SET_READOUT_WINDOW, (x, y, w, h))

ioctl(IOCTL_SET_READOUT_WINDOW, (w, h))

设置传感器读出窗口。较小的窗口以视场为代价提高帧率。

ioctl(IOCTL_GET_READOUT_WINDOW)

(x, y, w, h) 元组的形式返回当前读出窗口。

ioctl(IOCTL_SET_TRIGGERED_MODE, enable)

在 MT9V034 上启用(True)或禁用(False)触发模式。

ioctl(IOCTL_GET_TRIGGERED_MODE)

bool 形式返回当前触发模式状态。

ioctl(IOCTL_SET_FOV_WIDE, enable)

当为 True 时,指示 framesize() 优化视场而非帧率。

ioctl(IOCTL_GET_FOV_WIDE)

bool 形式返回当前的宽视场(FOV-wide)状态。

ioctl(IOCTL_SET_NIGHT_MODE, enable)

启用(True)或禁用(False)传感器的弱光"夜间模式"。仅限 OV7725 和 OV5640。

ioctl(IOCTL_GET_NIGHT_MODE)

bool 形式返回当前夜间模式状态。

ioctl(IOCTL_GET_RGB_STATS)

返回一个从传感器读取的原始 RGB 通道统计信息的 4 元组 (r, gb, gr, b)(通常用于白平衡调校)。

OV5640 FPC -- 自动对焦:

ioctl(IOCTL_TRIGGER_AUTO_FOCUS)

在 OV5640 FPC 模块上启动一次自动对焦扫描。

ioctl(IOCTL_PAUSE_AUTO_FOCUS)

暂停正在进行的自动对焦扫描。

ioctl(IOCTL_RESET_AUTO_FOCUS)

将自动对焦位置复位为默认值。

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS)

ioctl(IOCTL_WAIT_ON_AUTO_FOCUS, timeout_ms)

阻塞直到当前的自动对焦扫描完成。如果省略 timeout_ms,则默认为 5000。

FLIR Lepton:

ioctl(IOCTL_LEPTON_GET_WIDTH)

返回 Lepton 图像宽度(单位像素)。

ioctl(IOCTL_LEPTON_GET_HEIGHT)

返回 Lepton 图像高度(单位像素)。

ioctl(IOCTL_LEPTON_GET_RADIOMETRY)

以整数形式返回 Lepton 的类型(是否为辐射测量型)。

ioctl(IOCTL_LEPTON_GET_REFRESH)

返回 Lepton 的刷新率(单位 Hz)。

ioctl(IOCTL_LEPTON_GET_RESOLUTION)

返回 Lepton 的 ADC 分辨率(单位位)。

ioctl(IOCTL_LEPTON_RUN_COMMAND, cmd)

运行一条 FLIR Lepton SDK 命令。cmd 是 SDK 定义的 16 位命令 id。

ioctl(IOCTL_LEPTON_SET_ATTRIBUTE, attr_id, payload)

写入一个 Lepton SDK 属性。attr_id 是 16 位属性 id;payload 是一个 bytes/bytearray,其长度必须是 16 位的倍数。

ioctl(IOCTL_LEPTON_GET_ATTRIBUTE, attr_id, words)

读取一个 Lepton SDK 属性。attr_id 是 16 位属性 id;words 是要读取的 16 位字的数量。返回一个 bytearray

ioctl(IOCTL_LEPTON_GET_FPA_TEMP)

返回 Lepton 焦平面阵列的温度(单位摄氏度)。

ioctl(IOCTL_LEPTON_GET_AUX_TEMP)

返回 Lepton 的辅助温度(单位摄氏度)。

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled)

ioctl(IOCTL_LEPTON_SET_MODE, measurement_enabled, high_temp_enabled)

在 AGC 和直接温度输出之间切换 Lepton。measurement_enabled=True 启用直接温度输出。可选的 high_temp_enabled 标志选择高温量程。

ioctl(IOCTL_LEPTON_GET_MODE)

返回一个 2 元组 (measurement_enabled, high_temp_enabled)

ioctl(IOCTL_LEPTON_SET_RANGE, (min_celsius, max_celsius))

设置在启用测量模式时映射到 0..255 的温度范围。

ioctl(IOCTL_LEPTON_GET_RANGE)

返回当前的 (min_celsius, max_celsius) 范围。

Himax HM01B0 -- 运动检测:

ioctl(IOCTL_HIMAX_MD_ENABLE, enable)

启用(True)或禁用(False)HM01B0 的传感器内运动检测模块。

ioctl(IOCTL_HIMAX_MD_WINDOW, (x, y, w, h))

ioctl(IOCTL_HIMAX_MD_WINDOW, (w, h))

设置 HM01B0 上的运动检测窗口。

ioctl(IOCTL_HIMAX_MD_THRESHOLD, threshold)

设置运动检测阈值(0 -- 255)。

ioctl(IOCTL_HIMAX_MD_CLEAR)

清除运动检测中断锁存。

ioctl(IOCTL_HIMAX_OSC_ENABLE, enable)

启用(True)或禁用(False)HM01B0 的内部振荡器。

Prophesee GENX320 -- 事件传感器:

ioctl(IOCTL_GENX320_SET_BIASES, preset)

应用一个偏置预设。presetGENX320_BIASES_* 常量之一。

ioctl(IOCTL_GENX320_SET_BIAS, bias, value)

设置单个偏置。biasGENX320_BIAS_* 常量之一;value 是整数设定值。

ioctl(IOCTL_GENX320_SET_AFK, enable)

ioctl(IOCTL_GENX320_SET_AFK, enable, freq_low_hz, freq_high_hz)

配置抗闪烁滤波器。enable 是一个布尔值;可选的频率参数设置滤波器的通带。

ioctl(IOCTL_GENX320_SET_STC, mode)

ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])

配置时空对比度滤波器。modeGENX320_STC_* 常量之一;最多两个额外参数视模式而定。

ioctl(IOCTL_GENX320_SET_MODE, mode)

ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)

在帧模式和事件模式之间切换传感器。modeGENX320_MODE_* 常量之一。对于事件模式,evt_res 是传递给 IOCTL_GENX320_READ_EVENTS 的事件缓冲区的行轴长度。

ioctl(IOCTL_GENX320_READ_EVENTS, buf)

将事件读入 buf,它是一个形状为 (EVT_res, 6)uint16 ndarray,其中 EVT_res 是介于 1024 和 65536 之间的 2 的幂。各列含义为:

  • [0] -- 事件类型(PIX_OFF_EVENT / PIX_ON_EVENT / 触发)。

  • [1] -- 秒。

  • [2] -- 毫秒。

  • [3] -- 微秒。

  • [4] -- x 坐标。

  • [5] -- y 坐标。

返回写入的事件数量。

ioctl(IOCTL_GENX320_READ_EVENTS_RAW)

返回一个包含来自 GENX320 的原始事件帧的 image.Image

ioctl(IOCTL_GENX320_CALIBRATE, iterations, sigma)

关闭那些噪声偏离正态分布超过 sigma 个标准差的像素。iterations 是校准遍数(整数)。返回被禁用的像素数量。

color_palette(palette: int | None = None) int | None

设置用于诸如 FLIR Lepton 灰度转 RGB565 或 GENX320 事件可视化等用途的颜色调色板。可选 image.PALETTE_RAINBOWimage.PALETTE_IRONBOW,以及(在支持时)image.PALETTE_DEPTHimage.PALETTE_EVT_DARKimage.PALETTE_EVT_LIGHT 之一。

如果不带参数调用,则返回当前设置。

__write_reg(address: int, value: int) None

value 写入摄像头位于 address 的寄存器。

备注

有关寄存器信息,请参阅摄像头数据手册。

__read_reg(address: int) int

读取摄像头位于 address 的寄存器。

备注

有关寄存器信息,请参阅摄像头数据手册。

函数

csi.devices() List[int]

返回一个检测到的传感器芯片 ID 列表。

常量

csi.BINARY: int

BINARY(位图)像素格式。每个像素为 1 位。适用于掩码存储;可与 image.Image() 一起使用。

csi.GRAYSCALE: int

GRAYSCALE 像素格式(取自 YUV422 的 Y)。每个像素为 8 位。

csi.RGB565: int

RGB565 像素格式。每个像素为 16 位(5 位红、6 位绿、5 位蓝)。

csi.BAYER: int

RAW BAYER 图像像素格式。

csi.YUV422: int

YUV422 像素格式。每个像素以一个灰度 8 位 Y 值存储,后跟在两个 Y 值之间共享的交替 8 位 U/V 颜色值(Y1, U, Y2, V, ...)。只有部分图像处理方法可用于 YUV422。

csi.JPEG: int

JPEG 模式。摄像头模块输出压缩的 JPEG 图像。使用 CSI.quality 控制 JPEG 质量。仅适用于 OV2640/OV5640 相机。

csi.OV2640: int

CSI.cid 对 OV2640 相机返回此值。

csi.OV5640: int

CSI.cid 对 OV5640 相机返回此值。

csi.OV7670: int

CSI.cid 对 OV7670 相机返回此值。

csi.OV7690: int

CSI.cid 对 OV7690 相机返回此值。

csi.OV7725: int

CSI.cid 对 OV7725 相机返回此值。

csi.OV9650: int

CSI.cid 对 OV9650 相机返回此值。

csi.MT9V022: int

CSI.cid 对 MT9V022 相机返回此值。

csi.MT9V024: int

CSI.cid 对 MT9V024 相机返回此值。

csi.MT9V032: int

CSI.cid 对 MT9V032 相机返回此值。

csi.MT9V034: int

CSI.cid 对 MT9V034 相机返回此值。

csi.MT9M114: int

CSI.cid 对 MT9M114 相机返回此值。

csi.BOSON320: int

CSI.cid 对 BOSON 320x256 相机返回此值。

csi.BOSON640: int

CSI.cid 对 BOSON 640x512 相机返回此值。

csi.LEPTON: int

CSI.cid 对 LEPTON1/2/3 相机返回此值。

csi.HM01B0: int

CSI.cid 对 HM01B0 相机返回此值。

csi.HM0360: int

CSI.cid 对 HM0360 相机返回此值。

csi.GC2145: int

CSI.cid 对 GC2145 相机返回此值。

csi.GENX320ES: int

CSI.cid 对 GENX320(工程样品)相机返回此值。

csi.GENX320: int

CSI.cid 对 GENX320 相机返回此值。

csi.PAG7920: int

CSI.cid 对 PAG7920 相机返回此值。

csi.PAG7936: int

CSI.cid 对 PAG7936 相机返回此值。

csi.PAJ6100: int

CSI.cid 对 PAJ6100 相机返回此值。

csi.FROGEYE2020: int

CSI.cid 对 FROGEYE2020 相机返回此值。

csi.SOFTCSI: int

CSI.cid 对软件 CSI 相机返回此值。

csi.NORMAL: int

CSI.special_effect 的正常模式。

csi.NEGATIVE: int

CSI.special_effect 的反相模式。

csi.QCIF: int

摄像头传感器的 176x144 分辨率。

csi.CIF: int

摄像头传感器的 352x288 分辨率。

csi.QSIF: int

摄像头传感器的 176x120 分辨率。

csi.SIF: int

摄像头传感器的 352x240 分辨率。

csi.QQQVGA: int

摄像头传感器的 80x60 分辨率。

csi.QQVGA: int

摄像头传感器的 160x120 分辨率。

csi.QVGA: int

摄像头传感器的 320x240 分辨率。

csi.VGA: int

摄像头传感器的 640x480 分辨率。

csi.HQVGA: int

摄像头传感器的 240x160 分辨率。

csi.HVGA: int

摄像头传感器的 480x320 分辨率。

csi.WVGA: int

MT9V034 摄像头传感器的 720x480 分辨率。

csi.WVGA2: int

MT9V034 摄像头传感器的 752x480 分辨率。

csi.SVGA: int

摄像头传感器的 800x600 分辨率。

csi.XGA: int

摄像头传感器的 1024x768 分辨率。

csi.WXGA: int

MT9M114 摄像头传感器的 1280x768 分辨率。

csi.SXGA: int

摄像头传感器的 1280x1024 分辨率。仅适用于 OV2640/OV5640 相机。

csi.SXGAM: int

MT9M114 摄像头传感器的 1280x960 分辨率。

csi.UXGA: int

摄像头传感器的 1600x1200 分辨率。仅适用于 OV2640/OV5640 相机。

csi.HD: int

摄像头传感器的 1280x720 分辨率。

csi.FHD: int

摄像头传感器的 1920x1080 分辨率。仅适用于 OV5640 相机。

csi.QHD: int

摄像头传感器的 2560x1440 分辨率。仅适用于 OV5640 相机。

csi.QXGA: int

摄像头传感器的 2048x1536 分辨率。仅适用于 OV5640 相机。

csi.WQXGA: int

摄像头传感器的 2560x1600 分辨率。仅适用于 OV5640 相机。

csi.WQXGA2: int

摄像头传感器的 2592x1944 分辨率。仅适用于 OV5640 相机。

csi.IOCTL_SET_READOUT_WINDOW: int

设置读出窗口。参见 CSI.ioctl

csi.IOCTL_GET_READOUT_WINDOW: int

获取读出窗口。参见 CSI.ioctl

csi.IOCTL_SET_TRIGGERED_MODE: int

为 MT9V034 设置触发模式。参见 CSI.ioctl

csi.IOCTL_GET_TRIGGERED_MODE: int

获取 MT9V034 的触发模式状态。参见 CSI.ioctl

csi.IOCTL_SET_FOV_WIDE: int

启用 CSI.framesize 优先优化视场而非 FPS。参见 CSI.ioctl

csi.IOCTL_GET_FOV_WIDE: int

返回 CSI.framesize 是否正在优先优化视场而非 FPS。参见 CSI.ioctl

csi.IOCTL_TRIGGER_AUTO_FOCUS: int

在 OV5640 FPC 摄像头模块上触发自动对焦。参见 CSI.ioctl

csi.IOCTL_PAUSE_AUTO_FOCUS: int

暂停 OV5640 FPC 摄像头模块(运行中)的自动对焦。参见 CSI.ioctl

csi.IOCTL_RESET_AUTO_FOCUS: int

将 OV5640 FPC 摄像头模块的自动对焦复位为默认值。参见 CSI.ioctl

csi.IOCTL_WAIT_ON_AUTO_FOCUS: int

等待 OV5640 FPC 摄像头模块上的自动对焦完成。参见 CSI.ioctl

csi.IOCTL_SET_NIGHT_MODE: int

开启或关闭夜间模式。降低帧率以动态增加曝光。参见 CSI.ioctl

csi.IOCTL_GET_NIGHT_MODE: int

返回是否启用了夜间模式。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_WIDTH: int

返回 FLIR Lepton 图像分辨率宽度(单位像素)。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_HEIGHT: int

返回 FLIR Lepton 图像分辨率高度(单位像素)。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_RADIOMETRY: int

返回 FLIR Lepton 的类型(是否为辐射测量型)。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_REFRESH: int

返回 FLIR Lepton 的刷新率(单位 Hz)。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_RESOLUTION: int

返回 FLIR Lepton 的 ADC 分辨率(单位位)。参见 CSI.ioctl

csi.IOCTL_LEPTON_RUN_COMMAND: int

执行一条来自 FLIR Lepton SDK 的 16 位命令。参见 CSI.ioctl

csi.IOCTL_LEPTON_SET_ATTRIBUTE: int

设置一个来自 FLIR Lepton SDK 的 FLIR Lepton 属性。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_ATTRIBUTE: int

获取一个来自 FLIR Lepton SDK 的 FLIR Lepton 属性。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_FPA_TEMP: int

获取 FLIR Lepton 的 FPA 温度(单位摄氏度)。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_AUX_TEMP: int

获取 FLIR Lepton 的 AUX 温度(单位摄氏度)。参见 CSI.ioctl

csi.IOCTL_LEPTON_SET_MODE: int

将 FLIR Lepton 驱动设置为每个像素都是温度值的模式。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_MODE: int

返回 FLIR Lepton 传感器是否启用了测量模式。参见 CSI.ioctl

csi.IOCTL_LEPTON_SET_RANGE: int

设置在测量模式下映射到像素值的温度范围。参见 CSI.ioctl

csi.IOCTL_LEPTON_GET_RANGE: int

返回用于测量模式的温度范围。参见 CSI.ioctl

csi.IOCTL_HIMAX_MD_ENABLE: int

控制 HM01B0 上的运动检测中断。参见 CSI.ioctl

csi.IOCTL_HIMAX_MD_WINDOW: int

设置 HM01B0 上的运动检测窗口。参见 CSI.ioctl

csi.IOCTL_HIMAX_MD_THRESHOLD: int

设置 HM01B0 上的运动检测阈值。参见 CSI.ioctl

csi.IOCTL_HIMAX_MD_CLEAR: int

清除 HM01B0 上的运动检测中断。参见 CSI.ioctl

csi.IOCTL_HIMAX_OSC_ENABLE: int

控制 HM01B0 上的内部振荡器。参见 CSI.ioctl

csi.IOCTL_GET_RGB_STATS: int

返回来自摄像头传感器的 RGB 统计信息。参见 CSI.ioctl

csi.IOCTL_GENX320_SET_BIASES: int

将 GENX320 传感器偏置设置为 GENX320_BIASES_* 预设之一。参见 CSI.ioctl。在 CSI.reset 之后,驱动会应用 csi.GENX320_BIASES_LOW_NOISE,而非 csi.GENX320_BIASES_DEFAULT——当应用需要更高的灵敏度或带宽时,可使用此 ioctl 切换到不同的预设。

csi.GENX320_BIASES_DEFAULT: int

GenX320 数据手册默认值——为一般场景平衡灵敏度、噪声和带宽。

csi.GENX320_BIASES_LOW_LIGHT: int

针对弱光条件调校——两个对比度阈值均放宽以获得更高灵敏度,降低 FO,禁用 HPF 以便缓慢的亮度变化仍能被记录。

csi.GENX320_BIASES_ACTIVE_MARKER: int

针对跟踪高对比度闪烁的 LED(主动标记)调校——提高对比度阈值,使只有剧烈的跳变才会触发,FO 和 HPF 调到很高以最大化带宽并抑制缓慢的环境漂移,REFR=0 以便每个闪烁边沿都被捕获。

csi.GENX320_BIASES_LOW_NOISE: int

驱动默认值——灵敏度低于 DEFAULT(提高了对比度阈值)且 FO 更低,以减少背景噪声活动。最适合静态或缓慢场景,在这些场景中虚假事件会占主导。

csi.GENX320_BIASES_HIGH_SPEED: int

针对快速运动场景调校——更高的 FO 以获得更宽的像素带宽,更高的 HPF 以抑制缓慢变化,更高的 REFR 以在每个事件之后获得更长的死区时间,使读出不会饱和。

csi.IOCTL_GENX320_SET_BIAS: int

将单个 GENX320 传感器偏置设置为一个 DAC 值。传入一个 GENX320_BIAS_* 常量(csi.GENX320_BIAS_DIFF_OFFcsi.GENX320_BIAS_DIFF_ONcsi.GENX320_BIAS_FOcsi.GENX320_BIAS_HPFcsi.GENX320_BIAS_REFR)和一个整数 DAC 值。每个偏置都是独立的——在应用预设后可反复调用此 ioctl 以仅微调你需要的偏置。参见 CSI.ioctl

csi.GENX320_BIAS_DIFF_OFF: int

负比较器对比度阈值——控制一个像素必须变暗多少才会触发 csi.PIX_OFF_EVENT。值越低 = 越灵敏(事件越多)。

csi.GENX320_BIAS_DIFF_ON: int

正比较器对比度阈值——控制一个像素必须变亮多少才会触发 csi.PIX_ON_EVENT。值越低 = 越灵敏(事件越多)。

csi.GENX320_BIAS_FO: int

像素低通截止频率——在像素带宽(速度/延迟)与背景噪声活动之间进行权衡。值越高 = 像素响应越快、噪声越多。

csi.GENX320_BIAS_HPF: int

像素高通截止频率——抑制缓慢的亮度变化。值越高 = 过滤掉越缓慢的变化(只有快速跳变才会被记录)。

csi.GENX320_BIAS_REFR: int

像素不应期——像素发出一个事件后的死区时间,在此期间它无法再次触发。值越高 = 死区时间越长,繁忙像素产生的事件越少。

csi.IOCTL_GENX320_SET_AFK: int

设置 GENX320 抗闪烁(AFK)滤波器,它会抑制以某个周期性频段切换的像素产生的事件(荧光灯、LED 驱动的显示器等)。传入 enable(1 表示启用,0 表示禁用),并在启用时传入以赫兹为单位的频段边界:(enable, freq_low_hz, freq_high_hz)。参见 CSI.ioctl

csi.IOCTL_GENX320_SET_STC: int

设置 GENX320 时空对比度(STC)滤波器模式。传入一个 GENX320_STC_* 常量(csi.GENX320_STC_DISABLEcsi.GENX320_STC_ONLYcsi.GENX320_STC_TRAIL_ONLYcsi.GENX320_STC_TRAIL),后跟该模式所需的阈值(单位毫秒)。参见 CSI.ioctl

csi.GENX320_STC_DISABLE: int

禁用 GENX320 STC/拖尾滤波器——每个事件都会通过。

csi.GENX320_STC_ONLY: int

保留一次突发中的第二个事件;丢弃第一个事件以及之后的所有事件。接受一个参数 stc_threshold(单位毫秒)——在同一像素上位于前一个事件该窗口内的事件被视为同一突发的一部分。

csi.GENX320_STC_TRAIL_ONLY: int

保留一次突发中的第一个事件;丢弃同一像素上后续的事件,直到 trail_threshold 已过去。接受一个参数 trail_threshold(单位毫秒)。

csi.GENX320_STC_TRAIL: int

保留一次突发中的第一个事件以及后续边沿——结合了 csi.GENX320_STC_ONLYcsi.GENX320_STC_TRAIL_ONLY。接受两个参数 stc_thresholdtrail_threshold(均为毫秒);传感器要求二者大致保持在 13:1 的比例之内。

csi.IOCTL_GENX320_SET_MODE: int

设置 GENX320 工作模式。传入 csi.GENX320_MODE_HISTO 以使用片上事件直方图(此时相机以配置的帧率表现得像一台普通的灰度相机),或传入 csi.GENX320_MODE_EVENT 后跟事件 ndarray 的行轴长度(介于 1024 和 65536 之间的 2 的幂)以进行原始事件流式传输。参见 CSI.ioctl

csi.GENX320_MODE_HISTO: int

直方图模式——事件在片上被累加到逐像素的箱中,并以配置的速率(约 20-350 FPS)以 320x320 灰度帧的形式报告。相机看起来就像一台普通相机,因此所有标准的图像处理例程都可直接使用。

csi.GENX320_MODE_EVENT: int

事件模式——绕过片上直方图,将带有微秒时间戳的原始事件流式传输到一个 numpy ndarray 中,适用于需要完整时间细节而非预先分箱的帧的应用。

csi.IOCTL_GENX320_READ_EVENTS: int

将原始事件读入一个形状为 (EVT_res, 6) 的 uint16 ndarray(其中 EVT_res 与传给 csi.IOCTL_GENX320_SET_MODE 的缓冲区大小相匹配)。各列为:[0] 事件类型(csi.PIX_OFF_EVENTcsi.PIX_ON_EVENTcsi.EXT_TRIGGER_RISING/FALLINGcsi.RST_TRIGGER_RISING/FALLING),[1] 秒时间戳,[2] 毫秒,[3] 微秒,[4] X 坐标(0-319),[5] Y 坐标(0-319)。返回写入缓冲区的事件数量,超出该计数的旧行保持不变。参见 CSI.ioctl

csi.IOCTL_GENX320_CALIBRATE: int

自动禁用热像素——即使在静态场景下也会虚假触发的像素。驱动会构建一个 320x320 的逐像素命中计数,计算其均值和标准差,并禁用任何命中数超过 mean + sigma * stddev 的像素。传入一个事件计数预算(在计算统计信息之前要统计的事件数——越高 = 估计越可靠、越慢;约 10000 是一个不错的默认值)和一个 sigma 浮点数(越低 = 越激进,默认约 0.5)。返回被禁用的像素数量。请先将相机对准一个静态场景,以免运动驱动的事件被计入实际正常的像素。参见 CSI.ioctl

csi.IOCTL_GENX320_READ_EVENTS_RAW: int

从 GENX320 返回一个原始事件帧 image.Image,其中的事件仍处于芯片原生的打包编码中——如果你想把原始流转发到 PC 上离线解码而非在相机上处理,这会很有用。参见 CSI.ioctl

csi.PIX_OFF_EVENT: int

GENX320 事件类型(列 [0])——某个像素检测到亮度下降(越过了负对比度阈值)。列 [4]/[5] 携带该像素的 X/Y。

csi.PIX_ON_EVENT: int

GENX320 事件类型(列 [0])——某个像素检测到亮度上升(越过了正对比度阈值)。列 [4]/[5] 携带该像素的 X/Y。

csi.RST_TRIGGER_RISING: int

GENX320 事件类型(列 [0])——像素复位触发,上升沿。X/Y 未使用。当前固件不生成此事件。

csi.RST_TRIGGER_FALLING: int

GENX320 事件类型(列 [0])——像素复位触发,下降沿。X/Y 未使用。当前固件不生成此事件。

csi.EXT_TRIGGER_RISING: int

GENX320 事件类型(列 [0])——传感器的外部触发引脚检测到上升沿。GENX320 的外部触发输入连接到相机的帧同步线,该线也被路由到处理器上的 P10 以及排针。X/Y 未使用。

csi.EXT_TRIGGER_FALLING: int

GENX320 事件类型(列 [0])——传感器的外部触发引脚检测到下降沿。GENX320 的外部触发输入连接到相机的帧同步线,该线也被路由到处理器上的 P10 以及排针。X/Y 未使用。