我猜想Intel Realsense D435摄像头只要启动pipeline.start()函数,就会开始传输帧,无论我们是否调用wait_for_frames()或者poll_for_frames()函数,它都会传输,但是我没有办法去验证我的这个猜想,去咨询官方客服人员,我也看不太懂她们给我的回复。。。
After running pipeline.start (), will the camera continuously transmit frames to my computer, or will the camera only transmit frames to my computer when I call wait_for_frames ()? #6100
一开始我想用USB流量监控工具来查看当前USB传输数据的速率:windows系统如何检测USB实时传输数据的速率?,但貌似比较麻烦,我们是否能通过内存变化来判断是否在启动pipeline.start()后,摄像头就会立即进行帧传输呢?
首先,我在一台电脑上连接一个摄像头,这是当前任务管理器上的内存显示:
按照当前状况编写测试程序:
# 导包
import pyrealsense2 as rs
import numpy as np
import cv2 as cv
import time
ctx = rs.context()
cam_serials = [dev.get_info(rs.camera_info.serial_number) for dev in ctx.query_devices()]
# print(cam_serials)
# ['838212073249', '827312070790', '826212070395']
for serial in cam_serials:
locals()['pipeline' + serial] = rs.pipeline(ctx)
locals()['config' + serial] = rs.config()
locals()['config' + serial].enable_device(serial)
locals()['pipeline' + serial].start(locals()['config' + serial])
while True:
for serial in cam_serials:
locals()['frames' + serial] = locals()['pipeline' + serial].wait_for_frames()
locals()['color_frame' + serial] = locals()['frames' + serial].get_color_frame()
locals()['color_image' + serial] = np.asanyarray(locals()['color_frame' + serial].get_data())
cv.imshow('{}'.format(serial), locals()['color_image' + serial])
cv.waitKey(1)
# time.sleep(10000)
按照摄像头运行的不同情况记录以下数据:
摄像头数量 | pipeline.start() | wait_for_frames() | 取帧延时 | 是否显示画面 | 内存/已提交 | 备注 | |
---|---|---|---|---|---|---|---|
1 | 否 | 否 | 0 | 否 | 6.9 | 插入摄像头瞬间会上升至7.0 | |
2 | 否 | 否 | 0 | 否 | 6.9 | ||
3 | 否 | 否 | 0 | 否 | 6.9 | ||
1 | 是 | 否 | 0 | 否 | 7.5 | ||
2 | 是 | 否 | 0 | 否 | 7.6 | ||
3 | 是 | 否 | 0 | 否 | 7.7 | ||
1 | 是 | 是 | 0 | 否 | 7.4 | ||
2 | 是 | 是 | 0 | 否 | 7.6 | ||
3 | 是 | 是 | 0 | 否 | 7.7 | ||
1 | 是 | 是 | 0 | 是 | 7.5 | ||
2 | 是 | 是 | 0 | 是 | 7.6 | ||
3 | 是 | 是 | 0 | 是 | 7.7 | ||
1 | 是 | 是 | 5000ms | 否 | 7.5 | ||
2 | 是 | 是 | 5000ms | 否 | 7.6 | ||
3 | 是 | 是 | 5000ms | 否 | 7.7 | ||
1 | 是 | 是 | 5000ms | 是 | 7.4 | ||
2 | 是 | 是 | 5000ms | 是 | 7.6 | ||
3 | 是 | 是 | 5000ms | 是 | 7.7 |
如果我们使用poll_for_frames()函数替代wait_for_frames()函数,数据基本与上面是一致的
是否说明,只要我们启动pipeline.start()函数,摄像头就开始源源不断地向我们电脑传输帧,无论我们是否调用wait_for_frames()函数(或poll_for_frames()函数),它都会占用着我们的USB带宽?