csi --- 相機感測器

csi 模組是 OpenMV Cam 上相機感測器的現代化物件導向介面。每個實體感測器都以一個 CSI 實例來表示,因此將色彩感測器與熱感或事件感測器搭配在一起的多光譜成像板,可以透過在建構函式中傳入不同的 cid 來獨立驅動各個感測器。單一感測器的相機則只需建立一個 CSI 即可。

一個 CSI 物件擁有完整的感測器設定 -- 包括像素格式、影格大小/視窗、曝光/增益/白平衡、硬體鏡像與翻轉、彩色條測試圖案、影格率時脈、自動曝光的 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) 元組作為自訂影格大小。當呼叫 CSI.snapshot 時,自訂影格大小會依 DMA 規則進行評估。一般而言,影格大小需為 8 像素和/或 16 位元組的倍數。

若呼叫時未帶引數,則回傳目前的影格大小。

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

將相機影像的 gainceiling 設為 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 若已停用,則你可以從先前對 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

enableTrue 以啟用,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 通道統計資料 (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)

回傳一個 image.Image,內含來自 GENX320 的原始事件影格。

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

對於 OV2640 相機,CSI.cid 會回傳此值。

csi.OV5640: int

對於 OV5640 相機,CSI.cid 會回傳此值。

csi.OV7670: int

對於 OV7670 相機,CSI.cid 會回傳此值。

csi.OV7690: int

對於 OV7690 相機,CSI.cid 會回傳此值。

csi.OV7725: int

對於 OV7725 相機,CSI.cid 會回傳此值。

csi.OV9650: int

對於 OV9650 相機,CSI.cid 會回傳此值。

csi.MT9V022: int

對於 MT9V022 相機,CSI.cid 會回傳此值。

csi.MT9V024: int

對於 MT9V024 相機,CSI.cid 會回傳此值。

csi.MT9V032: int

對於 MT9V032 相機,CSI.cid 會回傳此值。

csi.MT9V034: int

對於 MT9V034 相機,CSI.cid 會回傳此值。

csi.MT9M114: int

對於 MT9M114 相機,CSI.cid 會回傳此值。

csi.BOSON320: int

對於 BOSON 320x256 相機,CSI.cid 會回傳此值。

csi.BOSON640: int

對於 BOSON 640x512 相機,CSI.cid 會回傳此值。

csi.LEPTON: int

對於 LEPTON1/2/3 相機,CSI.cid 會回傳此值。

csi.HM01B0: int

對於 HM01B0 相機,CSI.cid 會回傳此值。

csi.HM0360: int

對於 HM0360 相機,CSI.cid 會回傳此值。

csi.GC2145: int

對於 GC2145 相機,CSI.cid 會回傳此值。

csi.GENX320ES: int

對於 GENX320(工程樣品)相機,CSI.cid 會回傳此值。

csi.GENX320: int

對於 GENX320 相機,CSI.cid 會回傳此值。

csi.PAG7920: int

對於 PAG7920 相機,CSI.cid 會回傳此值。

csi.PAG7936: int

對於 PAG7936 相機,CSI.cid 會回傳此值。

csi.PAJ6100: int

對於 PAJ6100 相機,CSI.cid 會回傳此值。

csi.FROGEYE2020: int

對於 FROGEYE2020 相機,CSI.cid 會回傳此值。

csi.SOFTCSI: int

對於軟體 CSI 相機,CSI.cid 會回傳此值。

csi.NORMAL: int

CSI.special_effect 的 Normal 模式。

csi.NEGATIVE: int

CSI.special_effect 的 Negative 模式。

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/trail 濾波器 --- 每一個事件都會通過。

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

Histogram 模式 --- 事件會在晶片上累積到各像素的分格中,並以設定的速率回報為一個 320x320 的灰階影格(約 20-350 FPS)。相機看起來就像一般相機,因此所有標準的影像處理常式都能直接運作。

csi.GENX320_MODE_EVENT: int

Event 模式 --- 略過晶片上的直方圖,將原始事件以微秒時間戳串流到一個 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 未使用。