Не удается заставить 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. Как указано в связанном ответе, ключи и значения разделены;
и пары разделяются через |
.