以下我们介绍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)
事件数据解析
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):