DvsenseDriver  1.1.4
The SDK for dvsense products.
载入中...
搜索中...
未找到
融合相机python使用示例教程

以下我们介绍python提供的示例程序中的融合相机融视 DVSync – 动微视觉 DVSense使用教程

融合相机设计的类以及作用

类名 释义
DvsCameraManager 提供搜索相机、获取相机句柄、打开相机等接口
FusionCamera 相机句柄,可以控制相机启停、注册多数据回调函数来获取数据
DvsApsFusionProccessor 将通过相机句柄获取到的数据送入DvsApsFusionProccessor来进行数据融合,并通过回调函数来获取融合后的数据
Calibrator 对融合后的数据进行空间对齐处理(获取机器内部的标定参数来进行像素级对齐)

以下对融合相机各模块的具体使用做详细解释:

导入依赖

python
from dvsense_driver import (
DvsCameraManager,
DvsApsFusionProccessor,
Calibrator,
CalibratorParameters,
ApsFrame,
)

管理相机(DvsCameraManager)

python
dvs_camera_manager = DvsCameraManager()
dvs_camera_manager.update_cameras()
camera_descs = dvs_camera_manager.get_camera_descs()

通过获取到的相机描述来获取对应的融合相机

open_camera_serial = camera_descs[0].serial
for camera_desc in camera_descs:
print(camera_desc)
if camera_desc.product == "DVSync":
open_camera_serial = camera_desc.serial
print("Open DVSync camera:", open_camera_serial)
break
camera = dvs_camera_manager.open_fusion_camera(open_camera_serial) #获取相机句柄

操作相机(FusionCamera)

注册事件数据回调函数

def on_event_callback(events):
dvs_aps_fusion_proccessor.add_dvs_data(events)
camera.add_event_stream_nocopy_callback(on_event_callback)

注册RGB数据回调函数

def on_frame_callback(frame):
dvs_aps_fusion_proccessor.add_aps_data(frame)
camera.add_aps_frame_nocopy_callback(on_frame_callback)

注册同步信号回调函数

def on_sync_signal_callback(trigger_in):
dvs_aps_fusion_proccessor.add_sync_signal(trigger_in)
camera.add_sync_signal_callback(on_sync_signal_callback)

启停相机

camera.start()
camera.stop()

录制数据

camera.start_recording("C:/DVSense/filedata", "python_test_rec")
camera.stop_recording()

对DVS+APS进行融合

获取处理类对象

dvs_aps_fusion_proccessor = DvsApsFusionProccessor()

在回调函数中将对应的数据添加到DvsApsFusionProccessor对象

def on_event_callback(events):
dvs_aps_fusion_proccessor.add_dvs_data(events)
def on_frame_callback(frame):
dvs_aps_fusion_proccessor.add_aps_data(frame)
def on_sync_signal_callback(trigger_in):
dvs_aps_fusion_proccessor.add_sync_signal(trigger_in)

编写融合数据回调函数,获取融合后的数据

def on_fusion_data_callback(aps_frame, events):
# 在这里可以进行自定义操作

将回调函数注册到处理对象中

dvs_aps_fusion_proccessor.add_fusion_data_callback(on_fusion_data_callback)

融合标定

如果想要获取更精确的空间对齐,需要对获取到的融合数据进行再次处理

获取Calibrator并从相机中读取标定参数,导入到Calibrator中

calib = Calibrator()
param = CalibratorParameters()
camera.read_calibration_parameter(param)
print(param)
calib.load_calibrator_param(param)

在处理融合数据的时候可以选择将aps数据映射到dvs或者将dvs数据映射到aps

frame_dvs_size = calib.map_aps_to_dvs(aps_frame)
events_aps_size = calib.map_dvs_to_aps(events)# 会比较耗费时间,且变换后的events可能会有超过aps_size的事件,需要进行单独处理

事件数据解析

class Event2D:
x: int
y: int
polarity: int
timestamp: int

在包含events的回调函数中,其中的events即是Event2D类的array数组

def on_fusion_data_callback(aps_frame, events):
def on_event_callback(events):