提交 ec5cbb70 authored 作者: zw.wang's avatar zw.wang

feat: [pre_event] 过滤无效时间的事件点

上级 4bc5f699
......@@ -13,6 +13,7 @@ class PreEvent(object):
influxdb.reconnect()
self.start_time = start_time
self.end_time = end_time
self.invalid_hour = [0, 1, 2, 3, 4, 5, 6, 23]
self.tz_start_time = dt_parse(self.start_time.replace(' ', 'T') + '.001000Z').astimezone(tz)
self.tz_end_time = dt_parse(self.end_time.replace(' ', 'T') + '.001000Z').astimezone(tz)
......@@ -21,9 +22,9 @@ class PreEvent(object):
select *
from "one_week"."event_vss"
where
time >= $start_time
and time < $end_time
$start_time <= time and time < $end_time
and camera_index = $camera_index
order by time
'''
res = influxdb.query(sql, bind_params={
'start_time': self.start_time,
......@@ -36,14 +37,16 @@ class PreEvent(object):
return points
def merge_alarm_to_event(self, alarm_list):
def _alarm_point_to_event(self, alarm_list):
pre_events = []
pre_status = -1
# 告警消息转换成事件
for alarm_point in alarm_list:
# 报警时间转换成上海时区
alarm_time = dt_parse(alarm_point['time']).astimezone(tz)
if alarm_time.hour in self.invalid_hour:
# 过滤无效时间
continue
if alarm_point['status'] == 1:
if pre_status == 1:
......@@ -69,28 +72,22 @@ class PreEvent(object):
if pre_status == 1:
pre_events[-1]['end_time'] = self.tz_end_time
return pre_events
def merge_alarm_to_event(self, alarm_list):
pre_events = self._alarm_point_to_event(alarm_list)
# 合并时间间隔较短的事件或切分时间过长的事件
events = []
for pre_event in pre_events:
for pre_event_item in pre_events:
if len(events) > 0 \
and pre_event['start_time'] - events[-1]['end_time'] <= timedelta(seconds=30) \
and pre_event_item['start_time'] - events[-1]['end_time'] <= timedelta(seconds=30) \
and events[-1]['end_time'] - events[-1]['start_time'] <= timedelta(hours=0.5):
events[-1]['end_time'] = pre_event['end_time']
events[-1]['end_time'] = pre_event_item['end_time']
else:
events.append({
'start_time': pre_event['start_time'],
'end_time': pre_event['end_time'],
'start_time': pre_event_item['start_time'],
'end_time': pre_event_item['end_time'],
})
return events
if __name__ == '__main__':
from isc_video_record.recorder import recorder
pre_event = PreEvent('2021-04-26 00:00:00', '2021-04-26 16:00:00')
alarm_points = pre_event.get_alarm_list('f8a3c4d9b8ae42118b4db9fcf7895031')
for event in pre_event.merge_alarm_to_event(alarm_points):
recorder('f8a3c4d9b8ae42118b4db9fcf7895031', event['start_time'], event['end_time'])
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论