I have written a simple motion capture and recording script in Python 3. I am on cv2 version 4.4.0, installed on Ubuntu using “apt install python3-opencv”. My script connects to an IP camera, fetching the URL from a config file. When a host at a URL isn’t reachable, I raise an exception, output a message on the command line, and wait 30 seconds. However, even when catching this error, OpenCV spits out an error on the terminal. I really don’t want to see this error, as I want the terminal to be a clean experience for the user. How can I successfully catch and suppress this error message?
My full code is here on Github.
while True:
try:
video=cv2.VideoCapture(camera_url)
if video is None or not video.isOpened():
raise ConnectionError
size=(int(video.get(3)), int(video.get(4)))
check, frame = video.read()
...
except ConnectionError:
print("Retrying connection to ",camera_name," in ",str(reconnect_time), " seconds...")
time.sleep(reconnect_time)
The error message I would like:
Retrying connection to front_yard in 30 seconds...
The error message I get:
[tcp @ 0x18d4b40] Connection to tcp://192.168.1.102:8000 failed: No route to host
[ERROR:0] global /tmp/pip-req-build-99ib2vsi/opencv/modules/videoio/src/cap.cpp (140) open VIDEOIO(CV_IMAGES): raised OpenCV exception:
OpenCV(4.4.0) /tmp/pip-req-build-99ib2vsi/opencv/modules/videoio/src/cap_images.cpp:253: error: (-5:Bad argument) CAP_IMAGES: can't find starting number (in the name of file): http://192.168.1.102:8000/stream.mjpg in function 'icvExtractPattern'
Retrying connection to front_yard in 30 seconds...