从最近的戴尔 XPS 9560 的内部网络摄像头 (1280x720 @ 30fps) 捕获时,我意外地获得了非常低的 FPS (~16 fps)。
这是我正在使用的简单代码(python3,OpenCV 3.4.0)
import cv2, time
cam = cv2.VideoCapture(0)
n_frames = 0
execution_time = 0
while True:
t_start = time.time()
rv, frame = cam.read()
n_frames+=1
if rv:
#also tried to comment imshow. Same FPS.
cv2.imshow('window', frame)
if cv2.waitKey(1) >= 0:
break
pass
else:
print('Cannot read Frame')
t_end = time.time()
execution_time += (t_end-t_start)*1000
if execution_time > 10000:
print ('avg FPS in 10 seconds: %.2f' % (n_frames*1000/execution_time))
n_frames = 0
execution_time = 0
我尝试用 C++ 编写相同的简单程序并得到相同的结果,相同的 ~16 FPS。
有时,C++ 和 Python 程序都可以在更短的时间内生成更高的 FPS。
通过使用 i7z 监控 CPU 使用率,我可以看到所有 4 个内核在大部分时间都以非常低的频率运行,接近最低频率,偶尔出现峰值,似乎对平均 FPS 影响不大。
然后我将完全相同的代码传输到 Jetson TX1。对于那些不知道的人,它是一个基于 ARM 的片上系统,运行专用的 Ubuntu 16.10。它连接到 USB 2.0 相机,1920x1080 @ 25fps。
不用说,正如预期的那样,我得到了 25 FPS。
任何人都可以解释这种行为吗?是否与操作系统级别的差异有关?
无论如何如何获得完整的FPS?
谢谢你的帮助
编辑:在VTT评论之后,我将相同的外部(假设为 30 fps)USB 摄像头连接到两个系统,并且我在两个系统上都获得了 15 FPS。这指向蹩脚的相机/ USB总线。我将需要拆卸 jetson 设备内部摄像头并将其连接到笔记本电脑以仔细检查这是否与摄像头相关。