我打算建立一个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
答案 0 :(得分:0)
网络摄像头应该在其规格中明确说明其帧速率,这将明确告诉您瓶颈是否是相机。
然而,我猜测瓶颈是pcDuino3。很可能它不能非常快速地解码视频并导致低帧速率。您可以在实际计算机上尝试此确切代码来验证这一点。另外,我相信OpenCV和mjpg-streamer都使用libjpeg来解码jpeg帧,因此它们相似的帧速率并不令人惊讶。