1

我计划建造一个 ROV,我正在研究我的视频提要 atm。我将使用光纤进行所有通信,并且正在修补 opencv 以使用 python 流式传输网络摄像头。我可能会选择使用 IP 摄像头,但我想先了解更多有关如何在 python 中从网络摄像头捕获帧的信息。因为我不知道我最终要使用什么,所以我买了一个便宜的无名 USB 网络摄像头,只是为了让一切正常工作。此摄像机源将用于导航,可能会使用单独的录像机来录制视频。

够了,现在到我的问题。我在捕捉帧时只有 8 FPS,但我怀疑这是由于便宜的网络摄像头。网络摄像头连接到 pcduino 3 nano,后者连接到用于控制推进器和读取传感器的 arduino。我从没想过如何在编码和解码图像中使用硬件,我对这部分了解得还不够,无法判断我是否可以使用任何硬件。

你们相信我的网络摄像头是瓶颈吗?使用 IP 摄像头是一个更好的主意,还是我应该能够使用连接到带有 opencv 的 pcduino 3 nano 捕获帧的网络摄像头或其他方式获得不错的 FPS?我尝试使用 Pygame 捕获帧,结果相同,我还尝试了 mjpg-streamer。

我用 Python 编程,这是我做的测试:

import cv2, time
FPS = 0
cap = cv2.VideoCapture(0)

last = time.time()

for i in range(0,100):
    before = time.time()
    rval, frame = cap.read()
    now = time.time()
    print("cap.read() took: " + str(now - before))
    if(now - last >= 1):
        print(FPS)
        last = now
        FPS = 0
    else:
        FPS += 1
cap.release()

结果是:

cap.read() took: 0.118262052536
cap.read() took: 0.118585824966
cap.read() took: 0.121902942657
cap.read() took: 0.116680860519
cap.read() took: 0.119271993637
cap.read() took: 0.117949008942
cap.read() took: 0.119143009186
cap.read() took: 0.122378110886
cap.read() took: 0.116139888763
8
4

1 回答 1

1

网络摄像头应在其规格中明确说明其帧速率,这将明确告诉您瓶颈是否是摄像头。

但是,我猜瓶颈是 pcDuino3。它很可能无法非常快速地解码视频,从而导致帧速率低。您可以在实际计算机上尝试此确切代码来验证这一点。另外,我相信 OpenCV 和 mjpg-streamer 都使用 libjpeg 来解码 jpeg 帧,因此它们相似的帧速率也就不足为奇了。

于 2015-01-05T22:03:30.010 回答