diff --git a/face_rec.py b/face_rec.py index 8b2e2dd..19cb959 100644 --- a/face_rec.py +++ b/face_rec.py @@ -1440,6 +1440,8 @@ class FaceRecognitionSystem: self.logger.error(f"处理WebSocket消息错误: {e}") self.ws_connected = False break + + await asyncio.sleep(0.01) # 短暂延迟,避免 CPU 空转 except Exception as e: self.logger.error(f"WebSocket消息处理任务异常: {e}") self.ws_connected = False @@ -1551,14 +1553,32 @@ class FaceRecognitionSystem: stream_check_counter = 0 stream_check_interval = 150 # 每150帧(约5秒)检查一次 + # 帧率控制 + target_fps = 30 + frame_interval = 1000 // target_fps # 每帧间隔毫秒 + last_frame_time = time.time() * 1000 + + # 清理定时控制 + last_cleanup_time = time.time() + # 添加人脸消失计数器 no_face_counter = 0 no_face_threshold = 30 # 连续30帧(约1秒)没有检测到人脸才清空 try: while True: - # 定期清理过期记录,防止内存无限增长 - self.cleanup_expired_records() + current_time = time.time() + + # 每60秒清理一次过期记录,防止内存无限增长 + if current_time - last_cleanup_time >= 60: + self.cleanup_expired_records() + last_cleanup_time = current_time + + # 帧率控制:控制到约30fps + elapsed = time.time() * 1000 - last_frame_time + if elapsed < frame_interval: + await asyncio.sleep((frame_interval - elapsed) / 1000) + last_frame_time = time.time() * 1000 # 检查机器人角色并显示/隐藏视频 self._check_role_and_display_video()