Чтение закодированных кадров с веб-камеры с python opencv - PullRequest
0 голосов
/ 16 января 2020

В данный момент у меня есть класс VideoImageTrack, который я показываю ниже (адаптировано из здесь ), который возвращает av VideoFrame. Сценарий, который я показываю, работает отлично. Моя проблема в том, что шаг кодирования кадра:

VideoFrame.from_ndarray(image, format="bgr24")

довольно медленный.

Существует ли конвейер gstreamer, который выводит уже закодированный кадр и итерируется с помощью python-opencv read()?

class VideoImageTrack(VideoStreamTrack):
    """
    A video stream track that returns a rotating image.
    """

    def __init__(self):
        super().__init__()  # don't forget this!

        self.video = cv2.VideoCapture("v4l2src device=/dev/video0 ! video/x-raw,width=640,height=480,framerate=15/1,bitrate=250000  ! appsink")


    async def recv(self):
        pts, time_base = await self.next_timestamp()

        retval, image = self.video.read()
        frame = VideoFrame.from_ndarray(image, format="bgr24")
        frame.pts = pts
        frame.time_base = time_base

        return frame

1 Ответ

0 голосов
/ 16 января 2020

Хотя я не знаю, будет ли обработка быстрее, но вы можете попробовать использовать видеоконвертер GStreamer , который транскодирует видеокадры между многими форматами.

Пример конвейера :

v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=BGR,width=640,height=480,framerate=15/1 ! appsink
...