修改信息面板窗口大小字体;修改展厅界面为全屏

This commit is contained in:
Tian jianyong 2025-12-18 17:21:24 +08:00
parent b9f8e1ed17
commit a01f8aa386

View File

@ -246,47 +246,18 @@ class FaceRecognitionSystem:
self.logger.error(f"无法打开视频文件: {self.video_path}")
return False
# 创建视频窗口
cv2.namedWindow(self.video_window_name, cv2.WINDOW_NORMAL | cv2.WINDOW_GUI_NORMAL)
# 创建视频窗口并设置为全屏
cv2.namedWindow(self.video_window_name, cv2.WINDOW_NORMAL)
# 获取视频尺寸
# 设置窗口为全屏模式
cv2.setWindowProperty(self.video_window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
# 获取视频信息
video_width = int(self.video_capture.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(self.video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
video_fps = self.video_capture.get(cv2.CAP_PROP_FPS)
# 设置窗口大小和位置
try:
import screeninfo
screen = screeninfo.get_monitors()[0]
# 设置视频显示尺寸为屏幕的80%
target_width = int(screen.width)
target_height = int(screen.height)
# 保持宽高比
scale_width = target_width / video_width
scale_height = target_height / video_height
scale = min(scale_width, scale_height)
new_width = int(video_width * scale)
new_height = int(video_height * scale)
# 计算居中位置
x_pos = (screen.width - new_width) // 2
y_pos = (screen.height - new_height) // 2
# 设置窗口大小和位置
cv2.resizeWindow(self.video_window_name, new_width, new_height)
cv2.moveWindow(self.video_window_name, x_pos, y_pos)
self.logger.info(f"视频显示尺寸: {new_width}x{new_height}, 位置: ({x_pos}, {y_pos})")
except Exception as e:
self.logger.warning(f"无法获取屏幕信息,使用默认尺寸: {e}")
cv2.resizeWindow(self.video_window_name, 1280, 720)
# 设置窗口置顶
cv2.setWindowProperty(self.video_window_name, cv2.WND_PROP_TOPMOST, 1)
self.logger.info(f"视频全屏显示: 原始尺寸 {video_width}x{video_height}, FPS: {video_fps:.2f}")
self.video_showing = True
self.video_start_time = time.time()
@ -390,6 +361,18 @@ class FaceRecognitionSystem:
# 在视频帧上绘制机器人状态
frame_with_status = self._draw_robot_status_on_video(frame)
# 获取屏幕尺寸并拉伸视频帧到全屏
try:
import screeninfo
screen = screeninfo.get_monitors()[0]
screen_width, screen_height = screen.width, screen.height
# 拉伸视频帧到屏幕尺寸
frame_with_status = cv2.resize(frame_with_status, (screen_width, screen_height), interpolation=cv2.INTER_LINEAR)
except:
# 如果获取屏幕信息失败,使用默认尺寸
frame_with_status = cv2.resize(frame_with_status, (1920, 1080), interpolation=cv2.INTER_LINEAR)
# 显示视频帧
cv2.imshow(self.video_window_name, frame_with_status)
else:
@ -1477,9 +1460,9 @@ class FaceRecognitionSystem:
(255, 255, 255)
)
# 绘制状态信息面板(左角小窗口)
panel_width = 350
panel_height = 180
# 绘制状态信息面板(左角小窗口)
panel_width = 200
panel_height = 150
panel_bg = np.zeros((panel_height, panel_width, 3), dtype=np.uint8)
panel_bg[:] = (40, 40, 40)
@ -1490,7 +1473,6 @@ class FaceRecognitionSystem:
# WebSocket连接状态
ws_status = "已连接" if self.ws_connected else "未连接"
ws_color = (0, 255, 0) if self.ws_connected else (0, 0, 255)
status_texts = [
f"质量: {self.display_info['quality']:.1f}",
@ -1507,25 +1489,16 @@ class FaceRecognitionSystem:
remaining = max(0, face_duration - elapsed)
status_texts.append(f"识别倒计时: {remaining:.1f}")
# 使用PIL绘制中文状态文本
# 使用PIL绘制中文状态文本全部使用浅灰色
light_gray = (200, 200, 200)
for i, text in enumerate(status_texts):
# WebSocket状态使用特殊颜色
if "WebSocket" in text:
panel_bg = self.cv2_add_chinese_text(
panel_bg,
text,
(x_offset, y_offset + i * line_spacing),
self.font_small,
ws_color
)
else:
panel_bg = self.cv2_add_chinese_text(
panel_bg,
text,
(x_offset, y_offset + i * line_spacing),
self.font_small,
(255, 255, 255)
)
panel_bg = self.cv2_add_chinese_text(
panel_bg,
text,
(x_offset, y_offset + i * line_spacing),
self.font_small,
light_gray
)
# 将小面板叠加到画面左下角
h, w = display_frame.shape[:2]