Прежде всего, у меня есть python 3 с библиотекой Gstreamer.
print(cv2.getBuildInformation())
он показывает Gstreamer с YES рядом с ним.
Вот код передатчика с использованием gstreamer в rasperryPi 3:
gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-raw,width=320,height=240 ! videoconvert ! x264enc tune=zerolatency ! rtph264pay ! udpsink host='my ip address' port=10000
и я буду использовать код python для определения фигур, распознавания объектов.. и т.д.
вот мой код на Python:
import numpy as np
import cv2
def receive():
cap = cv2.VideoCapture("udpsrc port=10000 ! application/x-rtp,encoding-name=H264 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesin ", cv2.CAP_GSTREAMER)
while True:
ret,frame = cap.read()
if not ret:
print('empty frame')
continue
cv2.imshow('receive', frame)
if cv2.waitKey(1)&0xFF == ord('q'):
break
cap.release()
receive();
но на нем всегда отображается пустой кадр.
когда я пробовал эту команду на терминале:
gst-launch-1.0 udpsrc port=10000 ! application/x-rtp,encoding-name=H264 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! ximagesink
он работает очень хорошо, поэтому проблема в моем конце python.
так что вы рекомендуете?
cap = cv2.VideoCapture('udpsrc port=7000 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! decodebin ! videoconvert ! appsink', cv2.CAP_GSTREAMER)
используйте этот конвейер, он будет работать нормально. измените порт на тот, который вы используете.
Я использую разные скрипты send-receive, которые дают мне лучшую латентность видео (также при более высоких разрешениях) при запуске из командной строки, но я не знаю, как импортировать полученный поток в OpenCV на конец Ubuntu.
(Мой OpenCV также установлен с включенными ffmpeg и gstreamer.)
Мой код передатчика GStreamer на моем малине pi:
gst-launch-1.0 -v v4l2src ! video/x-raw,width=320,height=240 ! videoconvert ! jpegenc ! rtpjpegpay ! udpsink host=192.168.1.101 port=5200
Код получателя Gstreamer на конце Ubuntu 16.04:
gst-launch-1.0 -v udpsrc port=5200 ! application/x-rtp, encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! videoconvert ! autovideosink
Надеюсь, это поможет вам улучшить качество и латентность потока. И я надеюсь, что кто-то сможет попробовать мне код импорта конвейера OpenCV :)
Привет, Питер Лунк
ximagesin
, может быть, в этом проблема?