Снижение частоты кадров с помощью Python OpenCV VideoCapture - PullRequest
0 голосов
/ 19 февраля 2019

У меня Raspberry Pi с Raspbian 9. У меня установлен OpenCV 4.0.1.У меня подключена веб-камера USB.Малина без головы, я соединяюсь с ssh <user>@<IP> -X.Цель состоит в том, чтобы получить видеопоток в реальном времени на моем клиентском компьютере.

Проблема в том, что существует значительная задержка в 2 секунды.Кроме того, потоковое воспроизведение нестабильно, это означает медленный, а затем быстрый снова.

Я предполагаю, что SSH просто не может идти в ногу со стандартными 30 кадрами в секунду камеры.Поэтому я стараюсь уменьшить частоту кадров, так как я мог бы жить с более низкой частотой кадров, пока нет заметной задержки.Мои собственные попытки снизить частоту кадров не сработали.

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

import cv2
#import time

cap = cv2.VideoCapture(0)

#cap.set(cv2.CAP_PROP_FPS, 5)

while(True):
    ret, frame = cap.read()

    #time.sleep(1)

    #cv2.waitKey(100)

    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

что я пытался уменьшить частоту кадров:

  1. Я пытался установить cap.set(cv2.CAP_PROP_FPS, 5) (также пробовал 10 или 1).Если я тогда print(cap.get(cv2.CAP_PROP_FPS)) даст мне частоту кадров, которую я только что установил, но это не повлияет на воспроизведение.

  2. Я попытался использовать time.sleep(1) в цикле while, но этоне влияет на видео.

  3. Я пытался использовать второй cv2.waitKey(100) в цикле while, как предложено здесь для Quora: https://qr.ae/TUSPyN, но это также не имеетэффект.

edit 1 (time.wait и waitKey действительно работают):

Как указано в комментарии, time.sleep(1) и cv2.waitKey(1000) должны работать ина самом деле они сделали в конце концов.Необходимо было поместить их в конец цикла while после cv2.imshow().

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

edit 2 (xpra вместо ssh -X):

Мы обнаружили, что даже после всех попыток уменьшить частоту кадров ssh -X был подоконник запаздывает.Мы обнаружили, что xpra намного быстрее, то есть не требует снижения частоты кадров или разрешения и не имеет заметного лага.

...