问题
This code is used to play an alarm if it detects the driver is drowsy
if args["alarm"] != "":
t = Thread(target=sound_alarm,
args=(args["alarm"],))
t.daemon = False
t.start()
The whole code looks like this:
if ear < EYE_AR_THRESH:
COUNTER += 1
# if the eyes were closed for a sufficient number of
# then sound the alarm
if COUNTER >= EYE_AR_CONSEC_FRAMES:
# if the alarm is not on, turn it on
if not ALARM_ON:
ALARM_ON = True
# check to see if an alarm file was supplied,
# and if so, start a thread to have the alarm
# sound played in the background
if args["alarm"] != "":
t = Thread(target=sound_alarm,
args=(args["alarm"],))
t.daemon = False
t.start()
# draw an alarm on the frame
cv2.putText(frame, "DROWSINESS ALERT!", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
fan_on()
# otherwise, the eye aspect ratio is not below the blink
# threshold, so reset the counter and alarm
else:
COUNTER = 0
ALARM_ON = False
fan_off()
To keep it simple. An alarm will sound if it detects the driver is drowsy. How can I run the alarm while it detects the driver is drowsy, because at the meantime the alarm only run once.
This is my sound alarm method:
def sound_alarm(path):
pygame.mixer.init()
pygame.mixer.music.load(path)
pygame.mixer.music.play()
Thanks in advance
回答1:
I recommend you to use a while
loop, in order to repeat your code until a certain condition becomes False
The main structure of the while
loop looks like:
while condition_which_is_true:
do_something()
So, in this particular situation, I would do the following:
if ear < EYE_AR_THRESH:
COUNTER += 1
# if the eyes were closed for a sufficient number of
# then sound the alarm
if COUNTER >= EYE_AR_CONSEC_FRAMES:
# if the alarm is not on, turn it on
while not ALARM_ON:
ALARM_ON = True
# check to see if an alarm file was supplied,
# and if so, start a thread to have the alarm
# sound played in the background
if args["alarm"] != "":
t = Thread(target=sound_alarm,
args=(args["alarm"],))
t.daemon = False
t.start()
# draw an alarm on the frame
cv2.putText(frame, "DROWSINESS ALERT!", (10, 30),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
fan_on()
# otherwise, the eye aspect ratio is not below the blink
# threshold, so reset the counter and alarm
else:
COUNTER = 0
ALARM_ON = False
fan_off()
Please, note that, as you haven't provided a fully working code example it's very difficult to help you
来源:https://stackoverflow.com/questions/53579289/run-a-certain-code-while-it-detects-something-python