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

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

上级 4bc5f699
...@@ -13,6 +13,7 @@ class PreEvent(object): ...@@ -13,6 +13,7 @@ class PreEvent(object):
influxdb.reconnect() influxdb.reconnect()
self.start_time = start_time self.start_time = start_time
self.end_time = end_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_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) self.tz_end_time = dt_parse(self.end_time.replace(' ', 'T') + '.001000Z').astimezone(tz)
...@@ -21,9 +22,9 @@ class PreEvent(object): ...@@ -21,9 +22,9 @@ class PreEvent(object):
select * select *
from "one_week"."event_vss" from "one_week"."event_vss"
where where
time >= $start_time $start_time <= time and time < $end_time
and time < $end_time
and camera_index = $camera_index and camera_index = $camera_index
order by time
''' '''
res = influxdb.query(sql, bind_params={ res = influxdb.query(sql, bind_params={
'start_time': self.start_time, 'start_time': self.start_time,
...@@ -36,14 +37,16 @@ class PreEvent(object): ...@@ -36,14 +37,16 @@ class PreEvent(object):
return points return points
def merge_alarm_to_event(self, alarm_list): def _alarm_point_to_event(self, alarm_list):
pre_events = [] pre_events = []
pre_status = -1 pre_status = -1
# 告警消息转换成事件 # 告警消息转换成事件
for alarm_point in alarm_list: for alarm_point in alarm_list:
# 报警时间转换成上海时区 # 报警时间转换成上海时区
alarm_time = dt_parse(alarm_point['time']).astimezone(tz) alarm_time = dt_parse(alarm_point['time']).astimezone(tz)
if alarm_time.hour in self.invalid_hour:
# 过滤无效时间
continue
if alarm_point['status'] == 1: if alarm_point['status'] == 1:
if pre_status == 1: if pre_status == 1:
...@@ -69,28 +72,22 @@ class PreEvent(object): ...@@ -69,28 +72,22 @@ class PreEvent(object):
if pre_status == 1: if pre_status == 1:
pre_events[-1]['end_time'] = self.tz_end_time 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 = [] events = []
for pre_event in pre_events: for pre_event_item in pre_events:
if len(events) > 0 \ 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): 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: else:
events.append({ events.append({
'start_time': pre_event['start_time'], 'start_time': pre_event_item['start_time'],
'end_time': pre_event['end_time'], 'end_time': pre_event_item['end_time'],
}) })
return events 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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论