我正在使用OpenCV同时读取来自三个USB摄像机的实时视频。将该实时视频源逐帧解析为用于无人机检测设备的神经网络(使用带有Intel OpenVINO的神经网络)。
仅使用单个摄像机时,屏幕上会弹出以下警告,但该程序似乎仍然可以完美执行:
(python3:4235):GStreamer-CRITICAL **:gst_element_get_state:断言'GST_IS_ELEMENT(element)'失败
但是,当同时使用所有三个摄像机时,终端中会出现以下错误,并且程序根本无法运行:
(python3:4041):GStreamer-CRITICAL **:gst_element_get_state:断言'GST_IS_ELEMENT(element)'失败 视频错误:V4L:无法通过索引0打开摄像机 threeCam_droneDetection.py:90:DeprecationWarning:IENetwork的from_ir()方法已弃用。请使用IENetwork类构造函数创建有效的IENetwork实例 net = IENetwork.from_ir(model = model_xml,weights = model_bin) 相机无法正常工作
(python3:4041):GStreamer-CRITICAL **:gst_element_get_state:断言'GST_IS_ELEMENT(element)'失败
(python3:4041):GStreamer-CRITICAL **:gst_element_get_state:断言'GST_IS_ELEMENT(element)'失败
我试图尝试解决该代码,但是在使用程序中的所有三个摄像头时,此GStreamer错误不断出现。我什至制作了一个单独的程序来简单地启动实时摄像机供稿(不对帧进行任何处理,只不过使用cv2.imshow()
将它们输出到屏幕上,并且该程序可以完美执行。因此,我认为我出了点问题。没有赶上无人机检测程序。
以下是我为三机实时无人机检测编写的python脚本摘录:
#Initialize camera frame dimension variables
camera_width = 244
camera_height = 244
#Initialize 3 cameras and set their frame dimensions
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height)
cap2 = cv2.VideoCapture(1)
cap2.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width)
cap2.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height)
cap3 = cv2.VideoCapture(2)
cap3.set(cv2.CAP_PROP_FRAME_WIDTH, camera_width)
cap3.set(cv2.CAP_PROP_FRAME_HEIGHT, camera_height)
while True:
#Read camera frames and return value (sees if cameras are working)
ret, liveframe = cap.read()
ret2, liveframe2 = cap2.read()
ret3, liveframe3 = cap3.read()
#Breaks script if any of the cameras are not working
if (not ret or not ret2 or not ret3):
print("A camera is not working")
break
# Run inference
res = exec_net.infer(inputs={input_blob: processedImg})
res2 = exec_net.infer(inputs={input_blob: processedImg2})
res3 = exec_net.infer(inputs={input_blob: processedImg3})
# Access the results and get the index of the highest confidence score
output_node_name = list(res.keys())[0]
res = res[output_node_name]
output_node_name2 = list(res2.keys())[0]
res2 = res2[output_node_name2]
output_node_name3 = list(res3.keys())[0]
res3 = res3[output_node_name3]
# Predicted class index.
idx = np.argsort(res[0])[-1]
idx2 = np.argsort(res2[0])[-1]
idx3 = np.argsort(res3[0])[-1]
对于如何消除这些GStreamer错误以及使摄像头正常工作,我将不胜感激。谢谢!
答案 0 :(得分:0)
您可以检查传入的视频流吗?您可以在http://answers.opencv.org/question/199105/videoio-error-v4l-cant-open-camera-by-index-0/
中找到更多信息。