I’m using the ZED stereoscopic camera to get a video stream and display to gstreamer. I’m using the zed streaming example and simply modifying it to display on a video writer rather than opencv like so:
import sys
import pyzed.sl as sl
import cv2
def main():
init = sl.InitParameters()
init.camera_resolution = sl.RESOLUTION.HD720
init.depth_mode = sl.DEPTH_MODE.NONE
cam = sl.Camera()
status = cam.open(init)
if status != sl.ERROR_CODE.SUCCESS:
print(repr(status))
exit(1)
runtime = sl.RuntimeParameters()
mat = sl.Mat()
stream = sl.StreamingParameters()
stream.codec = sl.STREAMING_CODEC.H264
stream.bitrate = 4000
stream.port = 30000
status = cam.enable_streaming(stream)
if status != sl.ERROR_CODE.SUCCESS:
print(repr(status))
exit(1)
key = 0
print(" Quit : CTRL+C\n")
gst = "appsrc ! queue ! videoconvert ! video/x-raw,format=RGBA ! nvvidconv ! nvegltransform ! nveglglessink "
vw = cv2.VideoWriter(gst, cv2.CAP_GSTREAMER, 0, 60, (1080, 720))
while True and key !=113:
err = cam.grab(runtime)
cam.retrieve_image(mat, sl.VIEW.LEFT)
vw.write(mat.get_data())
# if (err == sl.ERROR_CODE.SUCCESS) :
# cam.retrieve_image(mat, sl.VIEW.SIDE_BY_SIDE)
# frame = mat.get_data()
# cv2.imshow("ZED", frame)
# key = cv2.waitKey(1)
# else :
# key = cv2.waitKey(1)
cam.close()
cam.disable_streaming()
cam.close()
if __name__ == "__main__":
main()
From above my pipeline is:
gst = "appsrc ! queue ! videoconvert ! video/x-raw,format=RGBA ! nvvidconv ! nvegltransform ! nveglglessink " vw = cv2.VideoWriter(gst, cv2.CAP_GSTREAMER, 0, 60, (1080, 720))
and when I run the script I get this warning and the gstreamer window just displays my computer screen:
[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (1629) writeFrame OpenCV | GStreamer warning: cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 3.