OpenCV 4.1.1.26 сообщает о 90000.0 к / с для потока RTSP 25 к / с - PullRequest
0 голосов
/ 28 октября 2019

У меня есть поток RTP / RTSP, который работает со скоростью 25 кадров в секунду, что подтверждено ffprobe -i <URI>. Кроме того, VLC воспроизводит поток RTSP в режиме реального времени, но не показывает мне FPS в окне Media Information .

Однако, когда я использую OpenCV 4.1.1.26 для получения частоты кадров входного потока, он дает мне ответ 90000.0.

Вопрос : Как можноЯ использую OpenCV для проверки правильности частоты кадров потока RTSP? Что может заставить его сообщать 90000.0 вместо 25?

Вот моя функция Python для получения частоты кадров:

import cv2
vid : cv2.VideoCapture = cv2.VideoCapture('rtsp://192.168.1.10/cam1/mpeg4')

def get_framerate(video: cv2.VideoCapture):
    fps = video.get(cv2.CAP_PROP_FPS)
    print('FPS is {0}'.format(fps))

get_framerate(vid)
  • MacOS Catalina
  • Python 3.7.4

1 Ответ

0 голосов
/ 28 октября 2019

Надеюсь, это вам как-то поможет. Это простой калькулятор, который cont захватывает и измеряет время начала и окончания. Затем с правилом трех я преобразовал его в fps.

Относительно вашего второго вопроса я прочитал здесь , что это может быть связано с неправильной установкой. Также вы можете проверить правильность работы вашей камеры, напечатав переменную ret. Если это true, тогда вы сможете увидеть fps, если это false, то вы можете получить непредсказуемый результат.

cv2.imshow() и key = cv2.waitKey(1) следует прокомментировать, так как это добавляет ping/ задержка, приводящая к неправильному измерению.


Я публикую это как комментарий, потому что у меня недостаточно очков репутации.

img = cv2.VideoCapture('rtsp://192.168.1.10/cam1/mpeg4')

while True:

    if cont == 50:
        a = datetime.now() - start 
        b = (a.seconds * 10e6 + a.microseconds)
        print((a.seconds * 10e6 + a.microseconds), "fps = ", (50 * 10e6)/ b)
        break


    ret, frame = img.read()

    # Comment for best test
    cv2.imshow('fer', frame)
    key = cv2.waitKey(1)

    if key == ord('q'):
        break

    cont+=1

img.release()
cv2.destroyAllWindows()`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...