forked from dsutanto/zenai-kpc-python
cap written ffmpeg error
This commit is contained in:
1 parent
706f9261fb
commit
47e9381269
1 file changed
+30
-1
+30
-1
@@ -4,6 +4,7 @@ Runs on RK3588 hardware with RKNN model (320×320 input).
|
|||||||
Uses ByteTrack (Kalman filter + two-stage IoU association) for tracking.
|
Uses ByteTrack (Kalman filter + two-stage IoU association) for tracking.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import contextlib
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import cv2
|
import cv2
|
||||||
import csv
|
import csv
|
||||||
@@ -12,6 +13,7 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import signal
|
import signal
|
||||||
import socket
|
import socket
|
||||||
|
import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
from collections import deque
|
from collections import deque
|
||||||
@@ -871,10 +873,37 @@ def start_control_socket():
|
|||||||
return srv
|
return srv
|
||||||
|
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def _quiet_opencv_stderr():
|
||||||
|
"""Silence OpenCV/FFmpeg stderr (DESCRIBE failed, cap.cpp WARN, etc.)."""
|
||||||
|
saved_fd = None
|
||||||
|
devnull_fd = None
|
||||||
|
try:
|
||||||
|
stderr_fd = sys.stderr.fileno()
|
||||||
|
saved_fd = os.dup(stderr_fd)
|
||||||
|
devnull_fd = os.open(os.devnull, os.O_WRONLY)
|
||||||
|
os.dup2(devnull_fd, stderr_fd)
|
||||||
|
except (AttributeError, OSError, ValueError):
|
||||||
|
yield
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
yield
|
||||||
|
finally:
|
||||||
|
os.dup2(saved_fd, stderr_fd)
|
||||||
|
os.close(saved_fd)
|
||||||
|
os.close(devnull_fd)
|
||||||
|
|
||||||
|
|
||||||
def open_capture(source):
|
def open_capture(source):
|
||||||
if source.lower().startswith(("rtsp://", "http://")):
|
if source.lower().startswith(("rtsp://", "http://")):
|
||||||
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = RTSP_FFMPEG_OPTIONS
|
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = RTSP_FFMPEG_OPTIONS
|
||||||
cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG)
|
# When STREAM_ERROR_LOG_MAX > 0, native OpenCV/FFmpeg stderr is suppressed;
|
||||||
|
# stream_error_log emits at most that many user-facing messages per outage.
|
||||||
|
if STREAM_ERROR_LOG_MAX > 0:
|
||||||
|
with _quiet_opencv_stderr():
|
||||||
|
cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG)
|
||||||
|
else:
|
||||||
|
cap = cv2.VideoCapture(source, cv2.CAP_FFMPEG)
|
||||||
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
|
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
|
||||||
return cap
|
return cap
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user