123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- import os
- import numpy as np
- import math
- class VehiclePressingRecognizer(object):
- def __init__(self, cfg):
- self.cfg = cfg
- def judge(self, Ax1, Ay1, Ax2, Ay2, Bx1, By1, Bx2, By2):
- if (max(Ax1,Ax2)>=min(Bx1,Bx2) and min(Ax1,Ax2)<=max(Bx1,Bx2)) and \
- (max(Ay1,Ay2)>=min(By1,By2) and min(Ay1,Ay2)<=max(By1,By2)):
- if ((Bx1-Ax1)*(Ay2-Ay1)-(By1-Ay1)*(Ax2-Ax1)) * ((Bx2-Ax1)*(Ay2-Ay1)-(By2-Ay1)*(Ax2-Ax1))<=0 \
- and ((Ax1-Bx1)*(By2-By1)-(Ay1-By1)*(Bx2-Bx1)) * ((Ax2-Bx1)*(By2-By1)-(Ay2-By1)*(Bx2-Bx1)) <=0:
- return True
- else:
- return False
- else:
- return False
- def is_intersect(self, line, bbox):
- Ax1, Ay1, Ax2, Ay2 = line
- xmin, ymin, xmax, ymax = bbox
- bottom = self.judge(Ax1, Ay1, Ax2, Ay2, xmin, ymax, xmax, ymax)
- return bottom
- def run(self, lanes, det_res):
- intersect_bbox_list = []
- start_idx, boxes_num_i = 0, 0
- for i in range(len(lanes)):
- lane = lanes[i]
- if det_res is not None:
- det_res_i = {}
- boxes_num_i = det_res['boxes_num'][i]
- det_res_i['boxes'] = det_res['boxes'][start_idx:start_idx +
- boxes_num_i, :]
- intersect_bbox = []
- for line in lane:
- for bbox in det_res_i['boxes']:
- if self.is_intersect(line, bbox[2:]):
- intersect_bbox.append(bbox)
- intersect_bbox_list.append(intersect_bbox)
- start_idx += boxes_num_i
- return intersect_bbox_list
- def mot_run(self, lanes, det_res):
- intersect_bbox_list = []
- if det_res is None:
- return intersect_bbox_list
- lanes_res = lanes['output']
- for i in range(len(lanes_res)):
- lane = lanes_res[i]
- for line in lane:
- for bbox in det_res:
- if self.is_intersect(line, bbox[3:]):
- intersect_bbox_list.append(bbox)
- return intersect_bbox_list
|