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.
A good way to achieve printing under certain conditions is to declare a Variable like e.g. "printed" and initialize it with 0. Once you printed what you wanted you set the variable to 1 and you can only print if the condition is "printed == 0". After the whole process is done you reset the variable to 0 again.
In Python 3, print() is a function that prints output on different lines, every time you use the function. However, you can avoid this by introducing the argument end and assigning an empty string to it. This will prevent the next output from being printed in a new line.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With