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__ 会把其他所有属性(reset、pixformat、framesize 以及各个传感器调节项)转发给底层的 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,则选中主传感器(在多传感器板上通常是彩色摄像头模块)。如果
delays为False,则禁用 csi 驱动中所有的稳定时间延迟。默认情况下,传感器驱动会在复位 / 模式切换后进行延迟,以防止CSI.snapshot返回损坏的帧。禁用延迟可让你批量进行更新,并在调用CSI.snapshot之前于最后统一应用一次延迟。如果
fflush为False,则禁用CSI.framebuffers中提到的自动帧缓冲区刷新。这将取消帧缓冲区 fifo 中帧的任何时间限制。stream选择此 CSI 是否作为发送到 IDE 的流源。如果为None(默认),则仅当此 CSI 为主(非辅助)传感器时才成为流源。传入True可强制此 CSI 成为流源,或传入任何假值以保持现有流源不变。方法¶
- reset(hard: bool = True) None¶
初始化摄像头传感器。如果
hard为True,则通过切换连接到摄像头模块的 RESET 信号 GPIO 来执行硬件复位。在复位与主模块共用同一 RESET 信号 GPIO 的辅助摄像头传感器时,hard应设为 false。
- 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。
- cid() int¶
返回摄像头模块的芯片 ID。可与
csi.OV2640、csi.OV5640、csi.OV7670、csi.OV7690、csi.OV7725、csi.OV9650、csi.MT9V022、csi.MT9V024、csi.MT9V032、csi.MT9V034、csi.MT9M114、csi.BOSON320、csi.BOSON640、csi.LEPTON、csi.HM01B0、csi.HM0360、csi.GC2145、csi.GENX320ES、csi.GENX320、csi.PAG7920、csi.PAG7936、csi.PAJ6100、csi.FROGEYE2020或csi.SOFTCSI中的任意一个进行比较。
- readable() bool¶
如果有一张图像已就绪可由
CSI.snapshot返回(即调用 snapshot 不会阻塞),则返回True。
- pixformat(pixformat: int | None = None) int | None¶
将摄像头模块的像素格式设置为
csi.GRAYSCALE、csi.RGB565、csi.BAYER、csi.YUV422或csi.JPEG(仅限 OV2640/OV5640)之一。如果不带参数调用,则返回当前的 pixformat。
- framesize(framesize: int | Tuple[int, int] | None = None) int | None¶
将摄像头模块的帧尺寸设置为某个尺寸常量(例如
csi.QVGA、csi.VGA、csi.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)元组。
- quality(quality: int) bool¶
设置摄像头图像的 JPEG 压缩质量。范围为 0 - 100。
成功时返回
True,失败时返回False。备注
仅适用于 OV2640/OV5640 相机。
- auto_gain(enable: bool, gain_db: float | None = None, gain_db_ceiling: float | None = None) None¶
enable开启(True)或关闭(False)自动增益控制。相机启动时自动增益控制为开启状态。如果
enable为False,你可以用gain_db设置一个固定的增益(单位分贝)。如果
enable为True,你可以用gain_db_ceiling为自动增益控制算法设置最大增益上限(单位分贝)。备注
如果你想跟踪颜色,还需要关闭白平衡。
- auto_exposure(enable: bool, exposure_us: int = -1) None¶
enable开启(True)或关闭(False)自动曝光控制。相机启动时自动曝光控制为开启状态。如果
enable为False,你可以用exposure_us设置一个固定的曝光时间(单位微秒)。备注
相机的自动曝光算法在调整曝光值的幅度上相当保守,通常会避免大幅改变曝光值。相反,它们会大幅改变增益值来应对光照变化。
- auto_whitebal(enable: bool, rgb_gain_db: Tuple[float, float, float] | None = None) None¶
enable开启(True)或关闭(False)自动白平衡。相机启动时自动白平衡为开启状态。如果
enable为False,你可以用rgb_gain_db分别为红、绿、蓝通道设置固定的增益(单位分贝)。备注
如果你想跟踪颜色,还需要关闭增益控制。
- auto_blc(enable: bool, regs: List[int] | None = None) None¶
设置摄像头上的自动黑电平校准(BLC)。
enable传入True或False以开启或关闭 BLC。通常你总是希望开启它。regs如果禁用了 BLC,你可以根据之前对CSI.blc_regs的调用结果手动设置 BLC 寄存器的值。
- blc_regs() List[int]¶
以整数列表的形式返回传感器的 BLC 寄存器。用于配合
CSI.auto_blc使用。
- 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.pixformat、CSI.framesize或CSI.window时都会发生重新分配。count为 1(单缓冲)、2(双缓冲)或 3(三缓冲)时,选择相应的捕获模式。传入 4 或更大的值可将驱动置于视频 FIFO 模式,此时会排队count个缓冲区——对于录制视频到 SD 卡很有用。在丢帧时,除当前活动的缓冲区外,所有帧缓冲区都会被清空,因此CSI.snapshot总能返回最近的一帧。如果不带参数调用,则返回当前的数量。
- special_effect(effect: int) bool¶
设置特殊数字效果(
csi.NORMAL或csi.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¶
执行一个特定于传感器的请求。
request是IOCTL_*常量之一;其余位置参数和返回值取决于具体请求。下面按传感器系列对支持的请求进行了分组。通用(任意传感器):
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)应用一个偏置预设。
preset是GENX320_BIASES_*常量之一。ioctl(IOCTL_GENX320_SET_BIAS, bias, value)设置单个偏置。
bias是GENX320_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])配置时空对比度滤波器。
mode是GENX320_STC_*常量之一;最多两个额外参数视模式而定。ioctl(IOCTL_GENX320_SET_MODE, mode)ioctl(IOCTL_GENX320_SET_MODE, mode, evt_res)在帧模式和事件模式之间切换传感器。
mode是GENX320_MODE_*常量之一。对于事件模式,evt_res是传递给IOCTL_GENX320_READ_EVENTS的事件缓冲区的行轴长度。ioctl(IOCTL_GENX320_READ_EVENTS, buf)将事件读入
buf,它是一个形状为(EVT_res, 6)的uint16ndarray,其中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_RAINBOW、image.PALETTE_IRONBOW,以及(在支持时)image.PALETTE_DEPTH、image.PALETTE_EVT_DARK或image.PALETTE_EVT_LIGHT之一。如果不带参数调用,则返回当前设置。
函数¶
常量¶
- csi.BINARY: int¶
BINARY(位图)像素格式。每个像素为 1 位。适用于掩码存储;可与
image.Image()一起使用。
- 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.NORMAL: int¶
CSI.special_effect的正常模式。
- csi.NEGATIVE: int¶
CSI.special_effect的反相模式。
- csi.IOCTL_SET_FOV_WIDE: int¶
启用
CSI.framesize优先优化视场而非 FPS。参见CSI.ioctl。
- csi.IOCTL_GET_FOV_WIDE: int¶
返回
CSI.framesize是否正在优先优化视场而非 FPS。参见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_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_OFF、csi.GENX320_BIAS_DIFF_ON、csi.GENX320_BIAS_FO、csi.GENX320_BIAS_HPF或csi.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.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_DISABLE、csi.GENX320_STC_ONLY、csi.GENX320_STC_TRAIL_ONLY、csi.GENX320_STC_TRAIL),后跟该模式所需的阈值(单位毫秒)。参见CSI.ioctl。
- 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_ONLY和csi.GENX320_STC_TRAIL_ONLY。接受两个参数stc_threshold和trail_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)的 uint16ndarray(其中EVT_res与传给csi.IOCTL_GENX320_SET_MODE的缓冲区大小相匹配)。各列为:[0]事件类型(csi.PIX_OFF_EVENT、csi.PIX_ON_EVENT、csi.EXT_TRIGGER_RISING/FALLING、csi.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。