Не удается заставить Opencv, cv2.VideoCapture rtsp steam работать с IP-камерой

Я пытаюсь прочитать поток rtsp с моей IP-камеры с помощью Opencv и под управлением Linux. Это камера Floureon IPC 360 из Китая. Я пытаюсь разработать код распознавания лиц.

Я использую следующий код:

import numpy as np
import cv2

vcap = cv2.VideoCapture("rtsp://192.168.1.240:554/realmonitor?channel=0")
print(vcap)
while(1):
    ret, frame = vcap.read()
    print (ret,frame)
    cv2.imshow('VIDEO', frame)
    #cv2.imwrite('messigray.png',frame)
    cv2.waitKey(1)

$ python  w.py
<VideoCapture 0x7fc685598230>
(False, None)
Traceback (most recent call last):
  File "w.py", line 9, in <module>
    cv2.imshow('VIDEO', frame)
cv2.error: OpenCV(4.1.0) /io/opencv/modules/highgui/src/window.cpp:352: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'

cv2.imshow не работает, так как кадр имеет значение "Нет" и (ret имеет значение False).

В отдельном окне могу запустить openRTSP:

./openRTSP  -4 -P 10 -F cam_eight -t -d 8 rtsp://192.168.1.240:554/realmonitor?channel=0

Это создает мне хороший файл mp4, который я могу воспроизвести:107625 Sep 12 19:08 cam_eight-00000-00010.mp4

OpenRTSP работает с t (tcp) или без него. Я также попытался предоставить учетные данные admin:123456 в строку cv2.VideoCapture, которая, похоже, не требуется для openRTSP.

Любые идеи, почему cv2.VideoCapture, по-видимому, не работает?

Я пробовал варианты приведенного выше кода, но, похоже, ничего не работает. Я включил ONVIF на камере

1 ответ

Согласно другим ответам, невозможно получить потоки ONVIF с помощью OpenCV, поскольку он по умолчанию использует для потока протокол tcp, а ONVIF полагается на udp. Вы должны определить переменную средыOPENCV_FFMPEG_CAPTURE_OPTIONSчтобы пропустить настройку по умолчанию на tcp, как можно увидеть в исходном исходном коде здесь:

OPENCV_FFMPEG_CAPTURE_OPTIONS=whatever

Если вы хотите правильно настроить параметры захвата, вам следует обратиться к ffmpeg документация, которая используется внутри OpenCV. Как указано в связанном ответе, ключи и значения разделены; и пары разделяются через |.

Другие вопросы по тегам