Искаженные кадры при работе с RTSP потоком от IP камеры на OpenCV Python
Я пытаюсь отслеживать объекты (Yolov5+DeepSort), обрабатывая данные, полученные с IP-камеры. Для получения видеоданных я использую OpenCV и протокол RTSP для подключения к камере.
Проблема в том, что часть полученных кадров сильно искажены, что автоматически делает невозможным корректное отслеживание объектов на видео. Если я получаю RTSP поток через VLC, то таких проблем нет.
В чем может быть проблема? Может ли это быть из-за слабого сигнала Wi-Fi от маршрутизатора или это связано с OpenCV. Или же может мне не стоит работать с live-видео, а обрабатывать видео из архива. В таком случае я не знаю, как получить доступ к архиву видеоматериалов на MicroSD-карте, расположенной внутри IP-камеры, без необходимости постоянно вытаскивать ее для скачивания архива.
OpenCV 4.6.0
Python 3.8
python3.8 -c "import cv2; print(cv2.getBuildInformation())"
Video I/O:
DC1394: NO
FFMPEG: YES
avcodec: YES (58.134.100)
avformat: YES (58.76.100)
avutil: YES (56.70.100)
swscale: YES (5.9.100)
avresample: NO
GStreamer: NO
v4l/v4l2: YES (linux/videodev2.h)
Код:
import cv2
from cv2 import (VideoCapture, namedWindow, imshow, waitKey, destroyWindow, imwrite)
import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
video = VideoCapture("rtsp://admin:[email protected]:554/onvif1")
k = 0
while True:
k += 1
ret, frame = video.read()
# cv2.imshow('frame',frame)
cv2.imwrite('test'+str(k)+'.jpg', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
video.release()
cv2.destroyAllWindows()
Примеры нормальных и искаженных кадров:


