Compare commits
2 Commits
master
...
master-one
Author | SHA1 | Date |
---|---|---|
|
398216ac9e | 9 months ago |
|
1f61f60a93 | 9 months ago |
16 changed files with 810 additions and 543 deletions
@ -0,0 +1,102 @@ |
|||
import threading |
|||
import queue |
|||
import datetime |
|||
import cv2 |
|||
from core.DBManager import DBManager |
|||
from myutils.ConfigManager import myCongif |
|||
|
|||
class WarnData: |
|||
def __init__(self): |
|||
self.width = None #视频画面的width |
|||
self.height = None #视频画面的height |
|||
self.channel_id = None |
|||
self.model_name = None #模型名称,如人员入侵 |
|||
self.img_buffer = None #视频缓冲区 赋值时要拷贝一个备份 |
|||
|
|||
self.warn_text = None |
|||
self.channel_name = None |
|||
|
|||
|
|||
|
|||
class WarnManager: |
|||
def __init__(self): |
|||
self.warn_q = queue.Queue() #线程安全 |
|||
self.brun = True |
|||
# 保存视频相关内容 |
|||
self.FPS = myCongif.get_data("verify_rate") # 视频帧率--是否能实现动态帧率 |
|||
self.fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 使用 mp4 编码 |
|||
|
|||
def __del__(self): |
|||
pass |
|||
|
|||
def add_warn_data(self,warn_data): |
|||
self.warn_q.put(warn_data) |
|||
|
|||
def th_warnmanager(self): |
|||
myDBM = DBManager() |
|||
myDBM.connect() |
|||
while self.brun: |
|||
warn_data = self.warn_q.get() |
|||
self.save_warn(warn_data.model_name,warn_data.img_buffer,warn_data.width,warn_data.height, |
|||
warn_data.channel_id,self.FPS,self.fourcc,myDBM) |
|||
self.send_warn() |
|||
del warn_data.img_buffer |
|||
del warn_data |
|||
|
|||
|
|||
def start_warnmanager_th(self): |
|||
th_warn = threading.Thread(target=self.th_warnmanager) # 一个视频通道一个线程,线程句柄暂时部保留 |
|||
th_warn.start() |
|||
|
|||
def stop_warnmanager_th(self): |
|||
self.brun = False |
|||
del self.warn_q |
|||
|
|||
def send_warn(self): |
|||
'''发送报警信息''' |
|||
pass |
|||
|
|||
def save_warn(self,model_name,buffer,width,height,channnel_id,FPS,fourcc,myDBM): |
|||
''' |
|||
保存报警信息 --- 涉及到I/O操作可以通过线程取执行 -- 避免主线程阻塞 --还未验证-2024-7-6 |
|||
:param model_name: 模型名称,如人员入侵 |
|||
:param w_s_count: 报警已存储的最新帧序列 |
|||
:param buffer_count: 当前视频缓冲区的最新帧序列 |
|||
:param buffer: 视频缓存区 |
|||
:param width: 视频画面的width |
|||
:param height: 视频画面的height |
|||
:param channnel_id: 视频通道ID |
|||
:return: ret 数据库操作记录 |
|||
''' |
|||
now = datetime.datetime.now() # 获取当前日期和时间 |
|||
current_time_str = now.strftime("%Y-%m-%d_%H-%M-%S") |
|||
filename = f"{channnel_id}_{current_time_str}" |
|||
save_path = myCongif.get_data("warn_video_path") |
|||
# 保存视频 |
|||
video_writer = cv2.VideoWriter(f"{save_path}{filename}.mp4", fourcc, FPS, (width, height)) |
|||
if not video_writer.isOpened(): |
|||
print(f"Failed to open video writer for model/warn/{filename}.mp4") |
|||
return False |
|||
ilen = len(buffer) |
|||
istart = 0; |
|||
iend = ilen |
|||
|
|||
for i in range(len(buffer)): |
|||
video_writer.write(buffer[i]) |
|||
video_writer.release() |
|||
# 保存图片 |
|||
ret = cv2.imwrite(f"model/warn/{filename}.png", buffer[-1]) |
|||
# buffer使用完后删除 |
|||
del buffer |
|||
if not ret: |
|||
print("保存图片失败") |
|||
return False |
|||
# 保存数据库 |
|||
|
|||
strsql = (f"INSERT INTO warn (model_name ,video_path ,img_path ,creat_time,channel_id ) " |
|||
f"Values ('{model_name}','model/warn/{filename}.mp4','model/warn/{filename}.png'," |
|||
f"'{current_time_str}','{channnel_id}');") |
|||
ret = myDBM.do_sql(strsql) |
|||
del myDBM # 释放数据库连接资源 |
|||
return ret |
|||
|
Before Width: | Height: | Size: 232 KiB |
@ -1,6 +0,0 @@ |
|||
<?xml version="1.0" encoding="utf-8"?> |
|||
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="35px" height="40px" xmlns="http://www.w3.org/2000/svg"> |
|||
<g transform="matrix(1 0 0 1 -1165 -28 )"> |
|||
<path d="M 34.767578125 28.9192708333333 C 34.9225260416667 30.2300347222222 35 31.6232638888889 35 33.0989583333333 C 35 34.9913194444444 34.4303385416667 36.6145833333333 33.291015625 37.96875 C 32.1516927083333 39.3229166666667 30.7799479166667 40 29.17578125 40 L 5.82421875 40 C 4.22005208333333 40 2.84830729166667 39.3229166666667 1.708984375 37.96875 C 0.569661458333333 36.6145833333333 0 34.9913194444444 0 33.0989583333333 C 0 31.6232638888889 0.0774739583333335 30.2300347222222 0.232421875 28.9192708333333 C 0.387369791666667 27.6085069444444 0.674479166666667 26.2890625 1.09375 24.9609375 C 1.51302083333333 23.6328125 2.04622395833333 22.4956597222222 2.693359375 21.5494791666667 C 3.34049479166667 20.6032986111111 4.197265625 19.8307291666667 5.263671875 19.2317708333333 C 6.330078125 18.6328125 7.55598958333333 18.3333333333333 8.94140625 18.3333333333333 C 11.3294270833333 20.5555555555556 14.1822916666667 21.6666666666667 17.5 21.6666666666667 C 20.8177083333333 21.6666666666667 23.6705729166667 20.5555555555556 26.05859375 18.3333333333333 C 27.4440104166667 18.3333333333333 28.669921875 18.6328125 29.736328125 19.2317708333333 C 30.802734375 19.8307291666667 31.6595052083333 20.6032986111111 32.306640625 21.5494791666667 C 32.9537760416667 22.4956597222222 33.4869791666667 23.6328125 33.90625 24.9609375 C 34.3255208333333 26.2890625 34.6126302083333 27.6085069444444 34.767578125 28.9192708333333 Z M 24.923828125 2.9296875 C 26.974609375 4.8828125 28 7.23958333333333 28 10 C 28 12.7604166666667 26.974609375 15.1171875 24.923828125 17.0703125 C 22.873046875 19.0234375 20.3984375 20 17.5 20 C 14.6015625 20 12.126953125 19.0234375 10.076171875 17.0703125 C 8.025390625 15.1171875 7 12.7604166666667 7 10 C 7 7.23958333333333 8.025390625 4.8828125 10.076171875 2.9296875 C 12.126953125 0.9765625 14.6015625 0 17.5 0 C 20.3984375 0 22.873046875 0.9765625 24.923828125 2.9296875 Z " fill-rule="nonzero" fill="#000000" stroke="none" transform="matrix(1 0 0 1 1165 28 )" /> |
|||
</g> |
|||
</svg> |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,170 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html> |
|||
<head> |
|||
<title>登录</title> |
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/> |
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8"/> |
|||
<link href="resources/css/axure_rp_page.css" type="text/css" rel="stylesheet"/> |
|||
<link href="data/styles.css" type="text/css" rel="stylesheet"/> |
|||
<link href="files/登录/styles.css" type="text/css" rel="stylesheet"/> |
|||
<script src="resources/scripts/jquery-3.2.1.min.js"></script> |
|||
<script src="resources/scripts/axure/axQuery.js"></script> |
|||
<script src="resources/scripts/axure/globals.js"></script> |
|||
<script src="resources/scripts/axutils.js"></script> |
|||
<script src="resources/scripts/axure/annotation.js"></script> |
|||
<script src="resources/scripts/axure/axQuery.std.js"></script> |
|||
<script src="resources/scripts/axure/doc.js"></script> |
|||
<script src="resources/scripts/messagecenter.js"></script> |
|||
<script src="resources/scripts/axure/events.js"></script> |
|||
<script src="resources/scripts/axure/recording.js"></script> |
|||
<script src="resources/scripts/axure/action.js"></script> |
|||
<script src="resources/scripts/axure/expr.js"></script> |
|||
<script src="resources/scripts/axure/geometry.js"></script> |
|||
<script src="resources/scripts/axure/flyout.js"></script> |
|||
<script src="resources/scripts/axure/model.js"></script> |
|||
<script src="resources/scripts/axure/repeater.js"></script> |
|||
<script src="resources/scripts/axure/sto.js"></script> |
|||
<script src="resources/scripts/axure/utils.temp.js"></script> |
|||
<script src="resources/scripts/axure/variables.js"></script> |
|||
<script src="resources/scripts/axure/drag.js"></script> |
|||
<script src="resources/scripts/axure/move.js"></script> |
|||
<script src="resources/scripts/axure/visibility.js"></script> |
|||
<script src="resources/scripts/axure/style.js"></script> |
|||
<script src="resources/scripts/axure/adaptive.js"></script> |
|||
<script src="resources/scripts/axure/tree.js"></script> |
|||
<script src="resources/scripts/axure/init.temp.js"></script> |
|||
<script src="resources/scripts/axure/legacy.js"></script> |
|||
<script src="resources/scripts/axure/viewer.js"></script> |
|||
<script src="resources/scripts/axure/math.js"></script> |
|||
<script src="resources/scripts/axure/jquery.nicescroll.min.js"></script> |
|||
<script src="data/document.js"></script> |
|||
<script src="files/登录/data.js"></script> |
|||
<script type="text/javascript"> |
|||
$axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; }; |
|||
$axure.utils.getOtherPath = function() { return 'resources/Other.html'; }; |
|||
$axure.utils.getReloadPath = function() { return 'resources/reload.html'; }; |
|||
</script> |
|||
</head> |
|||
<body> |
|||
{% if error %} |
|||
<div style="color: red;">{{ error }}</div> |
|||
{% endif %} |
|||
<div id="base" class=""> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u0" class="ax_default flow_shape"> |
|||
<div id="u0_div" class=""></div> |
|||
<div id="u0_text" class="text " style="display:none; visibility: hidden"> |
|||
<p></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u1" class="ax_default flow_shape"> |
|||
<div id="u1_div" class=""></div> |
|||
<div id="u1_text" class="text " style="display:none; visibility: hidden"> |
|||
<p></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u2" class="ax_default heading_1"> |
|||
<div id="u2_div" class=""></div> |
|||
<div id="u2_text" class="text "> |
|||
<p><span>智凡BOX</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u3" class="ax_default heading_3"> |
|||
<div id="u3_div" class=""></div> |
|||
<div id="u3_text" class="text "> |
|||
<p><span>@2024 ZFKJ All Rights Reserved </span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Shape) --> |
|||
<div id="u4" class="ax_default icon"> |
|||
<img id="u4_img" class="img " src="images/登录/u4.svg"/> |
|||
<div id="u4_text" class="text " style="display:none; visibility: hidden"> |
|||
<p></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u5" class="ax_default heading_2"> |
|||
<div id="u5_div" class=""></div> |
|||
<div id="u5_text" class="text "> |
|||
<p><span>用户名:</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Text Field) --> |
|||
<div id="u6" class="ax_default text_field"> |
|||
<div id="u6_div" class=""></div> |
|||
<input id="u6_input" type="text" value="" class="u6_input"/> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u7" class="ax_default heading_2"> |
|||
<div id="u7_div" class=""></div> |
|||
<div id="u7_text" class="text "> |
|||
<p><span>密码:</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Text Field) --> |
|||
<div id="u8" class="ax_default text_field"> |
|||
<div id="u8_div" class=""></div> |
|||
<input id="u8_input" type="text" value="" class="u8_input"/> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Text Field) --> |
|||
<div id="u9" class="ax_default text_field"> |
|||
<div id="u9_div" class=""></div> |
|||
<input id="u9_input" type="text" value="" class="u9_input"/> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u10" class="ax_default heading_2"> |
|||
<div id="u10_div" class=""></div> |
|||
<div id="u10_text" class="text "> |
|||
<p><span>验证码:</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u11" class="ax_default primary_button"> |
|||
<div id="u11_div" class=""></div> |
|||
<div id="u11_text" class="text "> |
|||
<p><span>登录</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Image) --> |
|||
<div id="u12" class="ax_default image"> |
|||
<img id="u12_img" class="img " src="images/登录/u12.png"/> |
|||
<div id="u12_text" class="text " style="display:none; visibility: hidden"> |
|||
<p></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u13" class="ax_default button"> |
|||
<div id="u13_div" class=""></div> |
|||
<div id="u13_text" class="text "> |
|||
<p><span>忘记密码</span></p> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Unnamed (Rectangle) --> |
|||
<div id="u14" class="ax_default label"> |
|||
<div id="u14_div" class=""></div> |
|||
<div id="u14_text" class="text "> |
|||
<p><span>注:通过手机验证码修改密码。</span></p> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
<script src="resources/scripts/axure/ios.js"></script> |
|||
</body> |
|||
</html> |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue