如何让人脸识别程序运行5秒未检测到人脸时自动执行else逻辑
实现方案
你可以通过Python内置的time模块计时,配合标志位判断人脸检测状态实现需求,步骤如下:
- 第一步:导入
time模块,在进入识别循环前记录程序启动时间,同时定义人脸检测状态标志位 - 第二步:每次检测到符合要求的人脸时,将标志位置为已检测状态
- 第三步:每次循环末尾判断运行时长,超过5秒直接终止循环
- 第四步:循环结束后根据标志位判断是否执行未检测到人脸的逻辑
修改后的完整可运行代码如下:
import time import cv2 # 进入循环前初始化参数 start_time = time.time() face_detected = False # 你的其他初始化代码,比如names、font、cam初始化等放在此处 # 此处替换为你原来的for/while循环头即可 while True: # 你的摄像头读取、人脸检测前置逻辑 # ... # 原有识别逻辑 if (accuracy >= 55): id = names[id] accuracy = " {0}%".format(round(100 - accuracy)) face_detected = True # 检测到有效人脸,更新标志位 else: id = "unknown" accuracy = " {0}%".format(round(100 - accuracy)) cv2.putText(img, str(id), (x+5, y-5), font, 1, (255, 255, 255), 2) cv2.putText(img, str(accuracy), (x+5, y+h-5), font, 1, (255, 255, 0), 1) # 计时判断,运行超过5秒直接终止循环 if time.time() - start_time >= 5: break k = cv2.waitKey(10) & 0xff if k == 2: break cam.release() cv2.destroyAllWindows() # 5秒计时结束后执行对应逻辑 if not face_detected: # 此处放入你要执行的「5秒内未检测到人脸」的对应逻辑 print("5秒内未检测到有效人脸")
- 如果你需要连续多帧检测到人脸才算有效,可调整标志位的赋值逻辑,比如增加计数判断
- 计时逻辑调用开销极低,不会影响原有识别帧率
内容的提问来源于stack exchange,提问作者Priyanshu Kadave
相关产品推荐
相关产品推荐

