genx320_event_mode_high_speed.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2025 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# この例では、Prophesee製のgenx320イベントカメラを
# イベントストリーミングモードを使用します。
#
# この例には、非常に高速に動作させるためフレームバッファの可視化がありません。
import csi
import time
# https://micropython-ulab.readthedocs.io/en/latest/index.html
from ulab import numpy as np
# カメラのイベントを格納します
# 形状: (EVT_res, 6)。EVT_resはイベント解像度です
# EVT_res: 1024から65536の間の2のべき乗である必要があります。
# 列:
# [0] イベントタイプ
# [1] 秒単位のタイムスタンプ
# [2] ミリ秒単位のタイムスタンプ
# [3] マイクロ秒単位のタイムスタンプ
# [4] GENX320でのX座標 0~319
# [5] GENX320でのY座標 0~319
events = np.zeros((2048, 6), dtype=np.uint16)
# センサーを初期化します。
csi0 = csi.CSI(cid=csi.GENX320)
csi0.reset()
csi0.ioctl(csi.IOCTL_GENX320_SET_MODE, csi.GENX320_MODE_EVENT, events.shape[0])
clock = time.clock()
t = time.ticks_us()
i = 0
while True:
clock.tick()
t1 = time.ticks_us()
diff = time.ticks_diff(t1, t)
t = t1
i += 1
# カメラから最大2048件のイベントを読み取ります。
# 有効なイベント数(0~2048)または負のエラーコードを返します。
# CPU時間を節約するため、バッファ内の古いイベントはクリアされません。
event_count = csi0.ioctl(csi.IOCTL_GENX320_READ_EVENTS, events)
# イベントデータ処理のパフォーマンスに影響しないよう、イベントレート出力を
# 間引きます。IDEへの統計出力の送信オーバーヘッドは、高イベントレート時には
# 無視できないほど大きくなることがあります。
if not i % 10:
print(f'{event_count} events\t{clock.fps()} fps\t{diff} us')