csi --- カメラセンサー¶
csi モジュールは、OpenMV Cam 上のカメラセンサーに対する、現代的でオブジェクト指向のインターフェースです。各物理センサーは CSI インスタンスで表現されるため、カラーセンサーとサーマルセンサーまたはイベントセンサーを組み合わせたマルチスペクトルイメージャーボードでは、コンストラクタに異なる cid を渡すことで各センサーを独立して制御できます。単一センサーのカメラでは CSI を1つだけインスタンス化します。
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 プログラムの中に、もう1つのコルーチンとして組み込めます:
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)¶
カメラセンサーと通信するオブジェクトを作成します。複数のセンサーを搭載したボードでは、FLIR Lepton センサーモジュールを選択するために
csi.LEPTONのようなcidを渡すことで、特定の CSI オブジェクトを選択できます。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 のプレビューにコピーします。スクリプトが終了する際に IDE が最後のフレームを表示するように、最後の
CSI.snapshotの後にこれを呼び出してください。
- 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バイトの倍数である必要があります。引数なしで呼び出された場合は、現在の framesize を返します。
- framerate(rate: int | None = None) int | None¶
カメラモジュールのフレームレートを Hz 単位で設定します。
引数なしで呼び出された場合は、現在の framerate を返します。
注釈
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を返します。
- 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)にします。カメラは自動ゲイン制御がオンの状態で起動します。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で使用します。
- 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.pixformat、CSI.framesize、CSI.windowが呼び出されるたびに発生します。countが 1(単一バッファ)、2(ダブルバッファ)、3(トリプルバッファ)の場合、対応するキャプチャモードを選択します。4 以上を渡すと、ドライバはcount個のバッファをキューに入れるビデオ FIFO モードになります --- SD カードへのビデオ録画に便利です。フレームドロップ時には、アクティブなものを除くすべてのフレームバッファがクリアされるため、CSI.snapshotは常に最近のフレームを返します。引数なしで呼び出された場合は、現在の count を返します。
- 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は1つの引数を取り、変化後の vsync ピンの現在の状態が渡されます。引数なしで呼び出された場合は、登録されたコールバックを返します。コールバックをクリアするには、呼び出し不可能な任意の値を渡してください。
- frame_callback(cb: Callable[[], None] | None = None) Callable[[], None] | None¶
カメラモジュールが新しいフレームを生成し、そのフレームが
CSI.snapshotで読み取れる状態になるたびに、コールバックcbが(割り込みコンテキストで)実行されるように登録します。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)現在の FOV ワイド状態を
boolとして返します。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 のタイプ(放射計測対応かどうか)を int として返します。
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は長さが16ビットの倍数でなければならないbytes/bytearrayです。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)Lepton を AGC と直接温度出力の間で切り替えます。
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)HM01B0 のオンセンサーモーション検出ブロックを有効(
True)または無効(False)にします。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)HM01B0 の内蔵オシレーターを有効(
True)または無効(False)にします。
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は bool で、オプションの周波数引数はフィルタの通過帯域を設定します。ioctl(IOCTL_GENX320_SET_STC, mode)ioctl(IOCTL_GENX320_SET_STC, mode, arg1[, arg2])時空間コントラストフィルタを設定します。
modeはGENX320_STC_*定数のいずれかで、最大2つのさらなる引数はモード固有です。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)イベントを、形状
(EVT_res, 6)のuint16型のndarrayであるbufに読み込みます。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 値の後に、2つの Y 値間で共有される交互の8ビット U/V カラー値が続く形で保存されます(Y1, U, Y2, V, ...)。一部の画像処理メソッドのみが YUV422 に対応しています。
- csi.JPEG: int¶
JPEG モード。カメラモジュールは圧縮された JPEG 画像を出力します。JPEG 品質を制御するには
CSI.qualityを使用してください。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_DEFAULTではなくcsi.GENX320_BIASES_LOW_NOISEを適用します --- アプリケーションがより高い感度や帯域幅を必要とする場合は、この ioctl を使って別のプリセットに切り替えてください。
- 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_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.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_DISABLE、csi.GENX320_STC_ONLY、csi.GENX320_STC_TRAIL_ONLY、csi.GENX320_STC_TRAIL)に続けて、そのモードが必要とするしきい値(ミリ秒単位)を渡します。CSI.ioctlを参照してください。
- csi.GENX320_STC_ONLY: int¶
バーストの2番目のイベントを保持します。最初のイベントとそれ以降のイベントを破棄します。1つのパラメータ
stc_threshold(ミリ秒単位)を取ります --- 同じピクセルで先行するイベントからこのウィンドウ内にあるイベントは、同じバーストの一部とみなされます。
- csi.GENX320_STC_TRAIL_ONLY: int¶
バーストの最初のイベントを保持します。
trail_thresholdが経過するまで、同じピクセルでのそれ以降のイベントを破棄します。1つのパラメータtrail_threshold(ミリ秒単位)を取ります。
- csi.GENX320_STC_TRAIL: int¶
バーストの最初のイベントとそれ以降のエッジを保持します ---
csi.GENX320_STC_ONLYとcsi.GENX320_STC_TRAIL_ONLYを組み合わせたものです。2つのパラメータstc_thresholdとtrail_threshold(両方ミリ秒)を取ります。センサーはこの2つがおおよそ 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を参照してください。
- 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 は使用されません。現時点ではファームウェアによって生成されません。