From 453273a2c6eb629175692b5fce7d02c402836f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=93=E6=99=BA=E8=88=AA?= <23373333@buaa.edu.cn> Date: Fri, 6 Mar 2026 17:01:22 +0800 Subject: [PATCH] next --- reproject/main.py | 196 ++++++++++++++++++++++++---------------------- 1 file changed, 102 insertions(+), 94 deletions(-) diff --git a/reproject/main.py b/reproject/main.py index 6142c62..45f04b3 100644 --- a/reproject/main.py +++ b/reproject/main.py @@ -13,6 +13,7 @@ import mediapipe as mp from analyzer import MonitorSystem from webrtc_server import WebRTCServer from HeartRateMonitor import HeartRateMonitor +from hook_mocker import HookMocker API_URL = "http://10.128.48.48:5000/api/states" CAMERA_ID = 5 @@ -446,107 +447,114 @@ def alert_thread(server): alert_st = "" level = 0 while not stop_event.is_set(): - frame = ana_video_queue.get(timeout=1) - buffered_frame.append(frame) - now = time.time() - data = None - if now - alert_time >= 1: - data = ana_data_queue.get(timeout=1) - - # sleep_time - if data["ear"] < 0.2: - sleep_time += 1 - else: - sleep_time = 0 + try: + frame = ana_video_queue.get(timeout=1) + buffered_frame.append(frame) + now = time.time() + data = None + if now - alert_time >= 1: + data = ana_data_queue.get(timeout=1) - # haqian_time - if data["mar"] > 0.95: - haqian_time += 1 - - # heart_spe - heart_spe += data["heart_rate"] - heart_num += 1 + # sleep_time + if data["ear"] < 0.2: + sleep_time += 1 + else: + sleep_time = 0 + + # haqian_time + if data["mar"] > 0.95: + haqian_time += 1 + + # heart_spe + heart_spe += data["heart_rate"] + heart_num += 1 - # eye_close - if data["eye_close_freq"] > 20: - eye_close = True - - # down_emo_time - if data["label"] in ["sad", "bored", "sleepy", "angry", "annoying"]: - down_emo_time += 1 + # eye_close + if data["eye_close_freq"] > 20: + eye_close = True + + # down_emo_time + if data["label"] in ["sad", "bored", "sleepy", "angry", "annoying"]: + down_emo_time += 1 - # pianyi_time - if data["pose_0"] > 25 or data["pose_0"] < -10 or data["pose_1"] > 50 or data["pose_1"] < -50: - pianyi_time += 1 - - # no_face_time - if data["label"] == "": - no_face_time += 1 + # pianyi_time + if data["pose_0"] > 25 or data["pose_0"] < -10 or data["pose_1"] > 50 or data["pose_1"] < -50: + pianyi_time += 1 + + # no_face_time + if data["label"] == "": + no_face_time += 1 - alert_time = now + alert_time = now - if sleep_time >= 20: - alert_status = True - alert_st += alert_info["sleep_time"] + "; " - sleep_time = 0 - level += 1 - if pianyi_time >= 20: - alert_status = True - alert_st += alert_info["pianyi_time"] + "; " - pianyi_time = 0 - level += 1 - if no_face_time >= 60: - alert_status = True - alert_st += alert_info["no_face_time"] + "; " - no_face_time = 0 - level += 1 + if sleep_time >= 20: + alert_status = True + alert_st += alert_info["sleep_time"] + "; " + sleep_time = 0 + level += 1 + if pianyi_time >= 20: + alert_status = True + alert_st += alert_info["pianyi_time"] + "; " + pianyi_time = 0 + level += 1 + if no_face_time >= 60: + alert_status = True + alert_st += alert_info["no_face_time"] + "; " + no_face_time = 0 + level += 1 - if now - emo_time >= 300: - if down_emo_time > 150: - alert_status = True - alert_st += alert_info["down_emo_time"] + "; " - level += 1 - emo_time = now - down_emo_time = 0 + if now - emo_time >= 300: + if down_emo_time > 150: + alert_status = True + alert_st += alert_info["down_emo_time"] + "; " + level += 1 + emo_time = now + down_emo_time = 0 - if now - last_record_time >= 60: - heart_spe = heart_spe // heart_num if heart_num != 0 else 0 - if haqian_time > 5: - alert_status = True - alert_st += alert_info["haqian_time"] + ";" - level += 1 - if heart_spe < 60 or heart_spe > 120: - alert_status = True - alert_st += alert_info["heart_spe"] + ";" - level += 1 - if eye_close: - alert_status = True - alert_st += alert_info["eye_close"] + ";" - level += 1 - #TODO: 发送警报 - haqian_time = 0 - heart_spe = 0 - heart_num = 0 - eye_close = False - last_record_time = now - info_level = "" - if level >= 6: - info_level = "严重" - elif level >=4: - info_level = "中等" - else: - info_level = "轻微" - if alert_status: - print(f"警报: {alert_st}") - alert = server.alert(int(time.time()), alert_st, info_level) - alert.start(width=1280, height=720, fps=30) - for f in buffered_frame: - alert.provide_frame(f) - alert.end() - alert_status = False - alert_st = "" - buffered_frame = [] - level = 0 + if now - last_record_time >= 60: + heart_spe = heart_spe // heart_num if heart_num != 0 else 0 + if haqian_time > 5: + alert_status = True + alert_st += alert_info["haqian_time"] + ";" + level += 1 + if heart_spe < 60 or heart_spe > 120: + alert_status = True + alert_st += alert_info["heart_spe"] + ";" + level += 1 + if eye_close: + alert_status = True + alert_st += alert_info["eye_close"] + ";" + level += 1 + #TODO: 发送警报 + haqian_time = 0 + heart_spe = 0 + heart_num = 0 + eye_close = False + last_record_time = now + info_level = "" + if level >= 6: + info_level = "严重" + elif level >=4: + info_level = "中等" + else: + info_level = "轻微" + if alert_status: + print(f"警报: {alert_st}") + alert = server.alert(int(time.time()), alert_st, info_level) + alert = HookMocker(alert, "http://10.128.48.48:5000/api/osshook") + alert.start(width=1280, height=720, fps=30) + for f in buffered_frame: + alert.provide_frame(f) + alert.end() + alert_status = False + alert_st = "" + buffered_frame = [] + level = 0 + except queue.Empty: + continue + except Exception as e: + print(f"[Alert] 错误: {e}") + continue def draw_debug_info(frame, result):