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__ 會將其他所有屬性(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)元組作為自訂影格大小。當呼叫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。
- 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若已停用,則你可以從先前對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 通道統計資料
(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)回傳一個
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_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的 Normal 模式。
- csi.NEGATIVE: int¶
CSI.special_effect的 Negative 模式。
- 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¶
Histogram 模式 --- 事件會在晶片上累積到各像素的分格中,並以設定的速率回報為一個 320x320 的灰階影格(約 20-350 FPS)。相機看起來就像一般相機,因此所有標準的影像處理常式都能直接運作。
- csi.GENX320_MODE_EVENT: int¶
Event 模式 --- 略過晶片上的直方圖,將原始事件以微秒時間戳串流到一個 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。