From 1bf393d01ea4bad80f50f82cb12a644873abb6d6 Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Sun, 28 Dec 2025 15:27:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- face_rec.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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()