genx320_event_mode_deep_buffer.py
# この作品はMITライセンスの下で提供されています。
# Copyright (c) 2013-2025 OpenMV LLC. 全著作権所有。
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# この例では、Prophesee製のgenx320イベントカメラを
# 非常に深いイベントバッファを持つイベントストリーミングモードで使用し、イベントを取得する方法を示します。
import csi
import image
import time
# https://micropython-ulab.readthedocs.io/en/latest/index.html
from ulab import numpy as np
# ヒストグラム画像を描画するためのサーフェス。
img = image.Image(320, 320, image.GRAYSCALE)
# カメラのイベントを格納します
# 形状: (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((32768, 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()
while True:
clock.tick()
# カメラから最大32768件のイベントを読み取ります。
# 有効なイベント数(0~32768)または負のエラーコードを返します。
# CPU時間を節約するため、バッファ内の古いイベントはクリアされません。
event_count = csi0.ioctl(csi.IOCTL_GENX320_READ_EVENTS, events)
# イベントをヒストグラム画像として描画します。
# clear=Trueの場合、描画前に画像は"brightness"にリセットされます。
# PIX_ON_EVENTごとに、ビンの値に"contrast"を加算します。
# PIX_OFF_EVENTごとに減算し、[0, 255]の範囲にクランプします。
# clear=Falseの場合、ヒストグラムは複数回の呼び出しにわたって累積されます。
img.draw_event_histogram(events[:event_count], clear=True, brightness=128, contrast=16)
# IDEが取得・表示できるように、画像をjpegバッファにプッシュします。
# IDEは、以下に表示されるオンボードカメラのフレームレートよりも
# はるかに低いレートでカメラからフレームを取得します。
img.flush()
print(event_count, clock.fps())