Community
cancel
Showing results for 
Search instead for 
Did you mean: 
es__we
Beginner
2,224 Views

GStreamer: pipeline have not been created VIDIOC_REQBUFS: Inappropriate ioctl for device

I try to run the SSD-lite mobilenetv2 model on raspberry pi 3B+, however, some errors occur:

[ WARN:0] global /home/jenkins/workspace/OpenCV/OpenVINO/build/opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
VIDIOC_REQBUFS: Inappropriate ioctl for device

The test script is as follows:
 

import cv2
import numpy as np
from openvino.inference_engine import IENetwork, IECore

model_xml = "./frozen_inference_graph.xml"
model_bin = "./frozen_inference_graph.bin"

# Read labels
filename = './labels.txt'
with open(filename, 'r') as f:
    s = [i[:-1].split() for i in f.readlines()]

ie = IECore()
net = IENetwork(model=model_xml, weights=model_bin)
exec_net = ie.load_network(network=net, device_name="MYRIAD")

input_blob = next(iter(net.inputs))
output_blob = next(iter(net.outputs))
net.batch_size = 1
#print(net.outputs['DetectionOutput'].shape)

n, c, h, w = net.inputs[input_blob].shape
#print(n, c, h, w)

font = cv2.FONT_HERSHEY_DUPLEX
cap = cv2.VideoCapture("video.mp4")
ret, frame = cap.read()
while cap.isOpened():
    ret, frame = cap.read()
    in_frame = cv2.resize(frame, (w, h))
    in_frame = in_frame.transpose((2, 0, 1))  # Change data layout from HWC to CHW
    in_frame = in_frame.reshape((n, c, h, w))
    res = exec_net.infer(inputs={input_blob: in_frame})
    #print(res)
    out = res['DetectionOutput'][0][0]
    #print(out)
    

    # Draw detected faces on the frame.
    for detection in out:
        confidence = float(detection[2])
        xmin = int(detection[3] * frame.shape[1])
        ymin = int(detection[4] * frame.shape[0])
        xmax = int(detection[5] * frame.shape[1])
        ymax = int(detection[6] * frame.shape[0])
       
        if confidence > 0.7:
            cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
            print("index:", int(detection[1])-1)
            cv2.putText(frame, (s[int(detection[1])-1])[1], (xmin+3, ymin-3), font, 1, (0, 0, 0), 1,)
    # Save the frame to an image file.

    cv2.imshow('out.jpg', frame)
    key = cv2.waitKey(1)
    if key == 27:
        break

cv2.destroyAllWindows()

It seems that I can't open the video.mp4 with the opencv in openvino, how can I solve this problem?

0 Kudos
3 Replies
JesusE_Intel
Moderator
2,224 Views

Hi es, we,

I believe this may be related to a known issue with the GStreamer backend not handling relative paths. The issue has been fixed and will be implemented on the next software release. Meanwhile, you can use the absolute file path as a workaround.

Please let me know if this works for you. 

#Change this line:
cap = cv2.VideoCapture("video.mp4")

#to
cap = cv2.VideoCapture("/home/pi/<PATH>/video.mp4")

Regards,

Jesus

es__we
Beginner
2,224 Views

Jesus E. (Intel) wrote:

Hi es, we,

I believe this may be related to a known issue with the GStreamer backend not handling relative paths. The issue has been fixed and will be implemented on the next software release. Meanwhile, you can use the absolute file path as a workaround.

Please let me know if this works for you. 

#Change this line:
cap = cv2.VideoCapture("video.mp4")

#to
cap = cv2.VideoCapture("/home/pi/<PATH>/video.mp4")

Regards,

Jesus

Thanks, it works!

JesusE_Intel
Moderator
2,224 Views

Hi es,we,

Great, I am glad it worked for you! This should be fixed in the next software release.

Regards,

Jesus

Reply