используя gstreamer с python opencv для захвата живого потока? - PullRequest
0 голосов
/ 18 октября 2018

Прежде всего, у меня есть Python 3 с библиотекой Gstreamer.

print(cv2.getBuildInformation())

показывает Gstreamer с YES рядом с ним.

Вот код передатчика, использующий gstreamer в rasperryPi3:

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.

так что порекомендуете?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я использую разные сценарии отправки-получения, которые дают мне намного большую задержку видео (также при более высоких разрешениях) при запуске из командной строки, но я понятия не имею, как импортировать полученный поток в OpenCV на стороне Ubuntu.

(My OpenCV также установлен с включенными ffmpeg и gstreamer.)

Код моего передатчика GStreamer на моем Raspberry 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:)

Привет, Питер Ланк

0 голосов
/ 19 октября 2018
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)

используйте этот конвейер, он будет работать просто отлично.измените порт на тот, который вы используете.

...