genx320_event_mode_long_exposure.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

EXPOSURE_FRAMES = 30

# ヒストグラム画像を描画するためのサーフェス。
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()
i = 0
while True:
    clock.tick()

    # カメラから最大2048件のイベントを読み取ります。
    # 有効なイベント数(0~2048)または負のエラーコードを返します。
    # CPU時間を節約するため、バッファ内の古いイベントはクリアされません。
    event_count = csi0.ioctl(csi.IOCTL_GENX320_READ_EVENTS, events)

    # EXPOSURE_FRAMESフレームごとに画像をクリアします。
    c = (i % EXPOSURE_FRAMES) == 0
    i += 1

    # イベントをヒストグラム画像として描画します。
    # clear=Trueの場合、描画前に画像は"brightness"にリセットされます。
    # PIX_ON_EVENTごとに、ビンの値に"contrast"を加算します。
    # PIX_OFF_EVENTごとに減算し、[0, 255]の範囲にクランプします。
    # clear=Falseの場合、ヒストグラムは複数回の呼び出しにわたって累積されます。
    img.draw_event_histogram(events[:event_count], clear=c, brightness=128, contrast=64)

    # IDEが取得・表示できるように、画像をjpegバッファにプッシュします。
    # IDEは、以下に表示されるオンボードカメラのフレームレートよりも
    # はるかに低いレートでカメラからフレームを取得します。
    img.flush()

    print(event_count, clock.fps())

results matching ""

    No results matching ""