alert finish
This commit is contained in:
@@ -14,9 +14,7 @@ from analyzer import MonitorSystem
|
||||
from webrtc_server import WebRTCServer
|
||||
from HeartRateMonitor import HeartRateMonitor
|
||||
|
||||
SERVER_HOST = "10.128.50.6"
|
||||
SERVER_PORT = 65432
|
||||
API_URL = "http://10.128.50.6:5000/api/states"
|
||||
API_URL = "http://10.128.48.48:5000/api/states"
|
||||
CAMERA_ID = 5
|
||||
|
||||
BASIC_FACE_DB = {
|
||||
@@ -122,10 +120,11 @@ def analysis_thread():
|
||||
if ana_video_queue.full():
|
||||
ana_video_queue.get_nowait()
|
||||
ana_video_queue.put(result["frame"])
|
||||
# print(f"[Analysis] {time.strftime('%Y-%m-%d %H:%M:%S')} - Frame processed")
|
||||
|
||||
payload = {
|
||||
"seat_id": CAMERA_ID,
|
||||
"timestamp": int(time.time()),
|
||||
"timestamp": time.time(),
|
||||
"heart_rate": 0,
|
||||
"emo_v": 0,
|
||||
"emo_a": 0,
|
||||
@@ -142,7 +141,7 @@ def analysis_thread():
|
||||
|
||||
front_data = {
|
||||
"seat_id": CAMERA_ID,
|
||||
"timestamp": int(time.time()),
|
||||
"timestamp": time.time(),
|
||||
"label": "",
|
||||
"eye_close_freq": 0.0,
|
||||
"iris_ratio_x": 0,
|
||||
@@ -241,13 +240,10 @@ def analysis_thread():
|
||||
print("[Analysis] 分析线程结束")
|
||||
|
||||
|
||||
def video_stream_thread():
|
||||
def video_stream_thread(server):
|
||||
"""
|
||||
发送线程:优化了 Socket 设置和压缩参数
|
||||
"""
|
||||
print(f"[Video] 准备连接服务器 {SERVER_HOST}:{SERVER_PORT} ...")
|
||||
server = WebRTCServer(60, 5, "ws://10.128.50.6:5000")
|
||||
server.start()
|
||||
fourcc = cv2.VideoWriter_fourcc(*'avc1')
|
||||
# # jetson-nvenc 编码器
|
||||
# # -----------------------------------------------------------
|
||||
@@ -419,7 +415,7 @@ def data_upload_thread():
|
||||
print("[Data] 数据上报线程结束")
|
||||
|
||||
|
||||
def alert_thread():
|
||||
def alert_thread(server):
|
||||
last_record_time = time.time()
|
||||
file_id = 0
|
||||
|
||||
@@ -442,16 +438,17 @@ def alert_thread():
|
||||
"no_face_time": "长时间无人脸,存在离岗或睡岗可能性",
|
||||
}
|
||||
|
||||
fourcc1 = cv2.VideoWriter_fourcc(*'avc1')
|
||||
alert_out = cv2.VideoWriter(VIDEO_FILE[file_id], fourcc1, 30.0, (1280, 720))
|
||||
buffered_frame = []
|
||||
alert_time = time.time()
|
||||
emo_time = time.time()
|
||||
|
||||
alert_status = False
|
||||
alert_st = ""
|
||||
level = 0
|
||||
while not stop_event.is_set():
|
||||
frame = ana_video_queue.get(timeout=1)
|
||||
alert_out.write(frame)
|
||||
buffered_frame.append(frame)
|
||||
now = time.time()
|
||||
alert_status = False
|
||||
alert_st = ""
|
||||
data = None
|
||||
if now - alert_time >= 1:
|
||||
data = ana_data_queue.get(timeout=1)
|
||||
@@ -492,41 +489,64 @@ def alert_thread():
|
||||
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 - last_record_time >= 60:
|
||||
file_id^= 1
|
||||
alert_out.release()
|
||||
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"] + ";"
|
||||
haqian_time = 0
|
||||
level += 1
|
||||
if heart_spe < 60 or heart_spe > 120:
|
||||
alert_status = True
|
||||
alert_st += alert_info["heart_spe"] + ";"
|
||||
heart_spe = 0
|
||||
level += 1
|
||||
if eye_close:
|
||||
alert_status = True
|
||||
alert_st += alert_info["eye_close"] + ";"
|
||||
eye_close = False
|
||||
level += 1
|
||||
#TODO: 发送警报
|
||||
alert_out = cv2.VideoWriter(VIDEO_FILE[file_id], fourcc1, 30.0, (1280, 720))
|
||||
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
|
||||
|
||||
|
||||
def draw_debug_info(frame, result):
|
||||
@@ -616,15 +636,19 @@ def draw_debug_info(frame, result):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
server = WebRTCServer(60, 5, "ws://10.128.48.48:5000")
|
||||
server.start()
|
||||
t1 = threading.Thread(target=capture_thread, daemon=True)
|
||||
t2 = threading.Thread(target=analysis_thread, daemon=True)
|
||||
t3 = threading.Thread(target=video_stream_thread, daemon=True)
|
||||
t3 = threading.Thread(target=video_stream_thread, daemon=True, args=(server,))
|
||||
t4 = threading.Thread(target=data_upload_thread, daemon=True)
|
||||
t5 = threading.Thread(target=alert_thread, daemon=True, args=(server,))
|
||||
|
||||
t1.start()
|
||||
t2.start()
|
||||
t3.start()
|
||||
t4.start()
|
||||
t5.start()
|
||||
|
||||
try:
|
||||
while not stop_event.is_set():
|
||||
@@ -649,3 +673,4 @@ if __name__ == "__main__":
|
||||
t2.join()
|
||||
t3.join()
|
||||
t4.join()
|
||||
t5.join()
|
||||
|
||||
Reference in New Issue
Block a user