I have a code where I want capture a video from a camera. I want to use Logging library of Python to get messages on the shell or export them to a text file.
Here is a part of my code where inside the while loop I want to print Camera Opened Successfully
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
while True:
ret, image = cap.read()
if ret == True:
log.warning('Camera Opened Successfully')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8))
gray1 = clahe.apply(gray)
but what I get in the shell is this:
until I terminated the running script. Any idea on how to make it print only once.
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
hasOpened = False
while True:
ret, image = cap.read()
if ret and not hasOpened:
log.warning('Camera Opened Successfully')
hasOpened = True
If you want to break out of the loop after printing, follow Matt's answer. This option will continue in the loop and only print once.
Add an extra boolean to track whether you have printed it out before:
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
printed = False
while True:
ret, image = cap.read()
if ret == True and not printed:
log.warning('Camera Opened Successfully')
printed = True
You must break out of the loop
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
while True:
ret, image = cap.read()
if ret == True:
log.warning('Camera Opened Successfully')
break
You need to break the while loop, also since you would like to break out of the loop as soon as you get ret
True you can use:
ret = False
while not ret:
ret, image = cap.read()
if ret:
log.warning('Camera Opened Successfully')
# any other code
Set a flag to trigger the log and then make it false. ret is to be made False when you are ready to exit the loop so that it will exit
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
ret = True
logit = True
while ret:
ret, image = cap.read()
if logit == True:
log.warning('Camera Opened Successfully')
logit = False
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
clahe = cv2.createCLAHE(clipLimit = 15.0, tileGridSize=(8,8))
gray1 = clahe.apply(gray)
// process remainder of situation setting
Assuming you want to use your main loop to handle your application logic, and it doesn't make sense to have one loop for detecting if it is opened and another for working with it then I think what you want is to set a variable to determine if the state has changed.
import numpy as np
import cv2
import logging as log
cap = cv2.VideoCapture('5.mpg')
old_ret = False
while True:
ret, image = cap.read()
if old_ret == False and ret == True:
old_red = True
log.warning('Camera Opened Successfully')
if ret == True:
# Do other things that need the camera but no log