run a certain code while it detects something python

前提是你 提交于 2020-01-02 14:56:53

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!