next
This commit is contained in:
@@ -13,6 +13,7 @@ import mediapipe as mp
|
|||||||
from analyzer import MonitorSystem
|
from analyzer import MonitorSystem
|
||||||
from webrtc_server import WebRTCServer
|
from webrtc_server import WebRTCServer
|
||||||
from HeartRateMonitor import HeartRateMonitor
|
from HeartRateMonitor import HeartRateMonitor
|
||||||
|
from hook_mocker import HookMocker
|
||||||
|
|
||||||
API_URL = "http://10.128.48.48:5000/api/states"
|
API_URL = "http://10.128.48.48:5000/api/states"
|
||||||
CAMERA_ID = 5
|
CAMERA_ID = 5
|
||||||
@@ -446,107 +447,114 @@ def alert_thread(server):
|
|||||||
alert_st = ""
|
alert_st = ""
|
||||||
level = 0
|
level = 0
|
||||||
while not stop_event.is_set():
|
while not stop_event.is_set():
|
||||||
frame = ana_video_queue.get(timeout=1)
|
try:
|
||||||
buffered_frame.append(frame)
|
frame = ana_video_queue.get(timeout=1)
|
||||||
now = time.time()
|
buffered_frame.append(frame)
|
||||||
data = None
|
now = time.time()
|
||||||
if now - alert_time >= 1:
|
data = None
|
||||||
data = ana_data_queue.get(timeout=1)
|
if now - alert_time >= 1:
|
||||||
|
data = ana_data_queue.get(timeout=1)
|
||||||
|
|
||||||
# sleep_time
|
# sleep_time
|
||||||
if data["ear"] < 0.2:
|
if data["ear"] < 0.2:
|
||||||
sleep_time += 1
|
sleep_time += 1
|
||||||
else:
|
else:
|
||||||
sleep_time = 0
|
sleep_time = 0
|
||||||
|
|
||||||
# haqian_time
|
# haqian_time
|
||||||
if data["mar"] > 0.95:
|
if data["mar"] > 0.95:
|
||||||
haqian_time += 1
|
haqian_time += 1
|
||||||
|
|
||||||
# heart_spe
|
# heart_spe
|
||||||
heart_spe += data["heart_rate"]
|
heart_spe += data["heart_rate"]
|
||||||
heart_num += 1
|
heart_num += 1
|
||||||
|
|
||||||
# eye_close
|
# eye_close
|
||||||
if data["eye_close_freq"] > 20:
|
if data["eye_close_freq"] > 20:
|
||||||
eye_close = True
|
eye_close = True
|
||||||
|
|
||||||
# down_emo_time
|
# down_emo_time
|
||||||
if data["label"] in ["sad", "bored", "sleepy", "angry", "annoying"]:
|
if data["label"] in ["sad", "bored", "sleepy", "angry", "annoying"]:
|
||||||
down_emo_time += 1
|
down_emo_time += 1
|
||||||
|
|
||||||
# pianyi_time
|
# pianyi_time
|
||||||
if data["pose_0"] > 25 or data["pose_0"] < -10 or data["pose_1"] > 50 or data["pose_1"] < -50:
|
if data["pose_0"] > 25 or data["pose_0"] < -10 or data["pose_1"] > 50 or data["pose_1"] < -50:
|
||||||
pianyi_time += 1
|
pianyi_time += 1
|
||||||
|
|
||||||
# no_face_time
|
# no_face_time
|
||||||
if data["label"] == "":
|
if data["label"] == "":
|
||||||
no_face_time += 1
|
no_face_time += 1
|
||||||
|
|
||||||
alert_time = now
|
alert_time = now
|
||||||
|
|
||||||
if sleep_time >= 20:
|
if sleep_time >= 20:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["sleep_time"] + "; "
|
alert_st += alert_info["sleep_time"] + "; "
|
||||||
sleep_time = 0
|
sleep_time = 0
|
||||||
level += 1
|
level += 1
|
||||||
if pianyi_time >= 20:
|
if pianyi_time >= 20:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["pianyi_time"] + "; "
|
alert_st += alert_info["pianyi_time"] + "; "
|
||||||
pianyi_time = 0
|
pianyi_time = 0
|
||||||
level += 1
|
level += 1
|
||||||
if no_face_time >= 60:
|
if no_face_time >= 60:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["no_face_time"] + "; "
|
alert_st += alert_info["no_face_time"] + "; "
|
||||||
no_face_time = 0
|
no_face_time = 0
|
||||||
level += 1
|
level += 1
|
||||||
|
|
||||||
if now - emo_time >= 300:
|
if now - emo_time >= 300:
|
||||||
if down_emo_time > 150:
|
if down_emo_time > 150:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["down_emo_time"] + "; "
|
alert_st += alert_info["down_emo_time"] + "; "
|
||||||
level += 1
|
level += 1
|
||||||
emo_time = now
|
emo_time = now
|
||||||
down_emo_time = 0
|
down_emo_time = 0
|
||||||
|
|
||||||
if now - last_record_time >= 60:
|
if now - last_record_time >= 60:
|
||||||
heart_spe = heart_spe // heart_num if heart_num != 0 else 0
|
heart_spe = heart_spe // heart_num if heart_num != 0 else 0
|
||||||
if haqian_time > 5:
|
if haqian_time > 5:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["haqian_time"] + ";"
|
alert_st += alert_info["haqian_time"] + ";"
|
||||||
level += 1
|
level += 1
|
||||||
if heart_spe < 60 or heart_spe > 120:
|
if heart_spe < 60 or heart_spe > 120:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["heart_spe"] + ";"
|
alert_st += alert_info["heart_spe"] + ";"
|
||||||
level += 1
|
level += 1
|
||||||
if eye_close:
|
if eye_close:
|
||||||
alert_status = True
|
alert_status = True
|
||||||
alert_st += alert_info["eye_close"] + ";"
|
alert_st += alert_info["eye_close"] + ";"
|
||||||
level += 1
|
level += 1
|
||||||
#TODO: 发送警报
|
#TODO: 发送警报
|
||||||
haqian_time = 0
|
haqian_time = 0
|
||||||
heart_spe = 0
|
heart_spe = 0
|
||||||
heart_num = 0
|
heart_num = 0
|
||||||
eye_close = False
|
eye_close = False
|
||||||
last_record_time = now
|
last_record_time = now
|
||||||
info_level = ""
|
info_level = ""
|
||||||
if level >= 6:
|
if level >= 6:
|
||||||
info_level = "严重"
|
info_level = "严重"
|
||||||
elif level >=4:
|
elif level >=4:
|
||||||
info_level = "中等"
|
info_level = "中等"
|
||||||
else:
|
else:
|
||||||
info_level = "轻微"
|
info_level = "轻微"
|
||||||
if alert_status:
|
if alert_status:
|
||||||
print(f"警报: {alert_st}")
|
print(f"警报: {alert_st}")
|
||||||
alert = server.alert(int(time.time()), alert_st, info_level)
|
alert = server.alert(int(time.time()), alert_st, info_level)
|
||||||
alert.start(width=1280, height=720, fps=30)
|
alert = HookMocker(alert, "http://10.128.48.48:5000/api/osshook")
|
||||||
for f in buffered_frame:
|
alert.start(width=1280, height=720, fps=30)
|
||||||
alert.provide_frame(f)
|
for f in buffered_frame:
|
||||||
alert.end()
|
alert.provide_frame(f)
|
||||||
alert_status = False
|
alert.end()
|
||||||
alert_st = ""
|
alert_status = False
|
||||||
buffered_frame = []
|
alert_st = ""
|
||||||
level = 0
|
buffered_frame = []
|
||||||
|
level = 0
|
||||||
|
except queue.Empty:
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[Alert] 错误: {e}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
|
||||||
def draw_debug_info(frame, result):
|
def draw_debug_info(frame, result):
|
||||||
|
|||||||
Reference in New Issue
Block a user