next
This commit is contained in:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user