当前位置: 首页 > news >正文

北京易思腾网站建设菜谱网站后台代码

北京易思腾网站建设,菜谱网站后台代码,emlog 迁移Wordpress,爱营销app这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考#xff1a;sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹#xff0c;剔除到当前轨迹中为空的轨迹得到当前… 这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹剔除到当前轨迹中为空的轨迹得到当前有效轨迹。 2.2 匹配。用匈牙利算法对有效轨迹和检测框匹配得到匹配id、新检测id、未匹配ida. 如果跟踪器的个数为零即第一帧图像返回值为0的匹配id、新检测id、值为0的未匹配id。b. 如果跟踪器的个数为不为0则计算检测框与当前轨迹的iou,如果iou不为空得到iou大于阈值的掩码矩阵判断掩码矩阵每行是否跟每列是一一对应如果是则不需要匈牙利算法匹配反之用匈牙利算法得到匹配的检测框和轨迹的索引。c. 根据匹配索引得到新检测的框的id和为匹配的轨迹的id。d.根据iou再筛选一次。 2.3 更新轨迹。a. 对匹配上的轨迹根据匹配id得到当前帧的最优估计。b. 添加新的检测。对于没有被匹配上的检测框生成新的跟踪器并添加到轨迹中。c. 筛选轨迹。2 代码 sort代码 https://github.com/abewley/sortSORT: A Simple, Online and Realtime TrackerCopyright (C) 2016-2020 Alex Bewley alexbewley.aiThis program is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program. If not, see http://www.gnu.org/licenses/.-i https://pypi.tuna.tsinghua.edu.cn/simple filterpy1.4.5 scikit-image0.14.0 lap0.4.0 numba0.38.1 scikit-learn0.19.1from __future__ import print_functionimport os import numpy as np import matplotlib matplotlib.use(TkAgg) import matplotlib.pyplot as plt import matplotlib.patches as patches from skimage import ioimport glob import time import argparse from filterpy.kalman import KalmanFilternp.random.seed(0)def linear_assignment(cost_matrix):try:import lap_, x, y lap.lapjv(cost_matrix, extend_costTrue)return np.array([[y[i],i] for i in x if i 0])except ImportError:from scipy.optimize import linear_sum_assignmentx, y linear_sum_assignment(cost_matrix)return np.array(list(zip(x, y)))def iou_batch(bb_test, bb_gt):From SORT: Computes IOU between two bboxes in the form [x1,y1,x2,y2]bb_gt np.expand_dims(bb_gt, 0)bb_test np.expand_dims(bb_test, 1)xx1 np.maximum(bb_test[..., 0], bb_gt[..., 0])yy1 np.maximum(bb_test[..., 1], bb_gt[..., 1])xx2 np.minimum(bb_test[..., 2], bb_gt[..., 2])yy2 np.minimum(bb_test[..., 3], bb_gt[..., 3])w np.maximum(0., xx2 - xx1)h np.maximum(0., yy2 - yy1)wh w * ho wh / ((bb_test[..., 2] - bb_test[..., 0]) * (bb_test[..., 3] - bb_test[..., 1]) (bb_gt[..., 2] - bb_gt[..., 0]) * (bb_gt[..., 3] - bb_gt[..., 1]) - wh) return(o) def convert_bbox_to_z(bbox):Takes a bounding box in the form [x1,y1,x2,y2] and returns z in the form[x,y,s,r] where x,y is the centre of the box and s is the scale/area and r isthe aspect ratiow bbox[2] - bbox[0]h bbox[3] - bbox[1]x bbox[0] w/2.y bbox[1] h/2.s w * h #scale is just arear w / float(h)return np.array([x, y, s, r]).reshape((4, 1))def convert_x_to_bbox(x,scoreNone):Takes a bounding box in the centre form [x,y,s,r] and returns it in the form[x1,y1,x2,y2] where x1,y1 is the top left and x2,y2 is the bottom rightw np.sqrt(x[2] * x[3])h x[2] / wif(scoreNone):return np.array([x[0]-w/2.,x[1]-h/2.,x[0]w/2.,x[1]h/2.]).reshape((1,4))else:return np.array([x[0]-w/2.,x[1]-h/2.,x[0]w/2.,x[1]h/2.,score]).reshape((1,5))class KalmanBoxTracker(object):This class represents the internal state of individual tracked objects observed as bbox.count 0def __init__(self,bbox):Initialises a tracker using initial bounding box.#define constant velocity modelself.kf KalmanFilter(dim_x7, dim_z4) self.kf.F np.array([[1,0,0,0,1,0,0],[0,1,0,0,0,1,0],[0,0,1,0,0,0,1],[0,0,0,1,0,0,0], [0,0,0,0,1,0,0],[0,0,0,0,0,1,0],[0,0,0,0,0,0,1]])self.kf.H np.array([[1,0,0,0,0,0,0],[0,1,0,0,0,0,0],[0,0,1,0,0,0,0],[0,0,0,1,0,0,0]])self.kf.R[2:,2:] * 10.self.kf.P[4:,4:] * 1000. #give high uncertainty to the unobservable initial velocitiesself.kf.P * 10.self.kf.Q[-1,-1] * 0.01self.kf.Q[4:,4:] * 0.01self.kf.x[:4] convert_bbox_to_z(bbox)self.time_since_update 0self.id KalmanBoxTracker.countKalmanBoxTracker.count 1self.history []self.hits 0self.hit_streak 0self.age 0def update(self,bbox):Updates the state vector with observed bbox.self.time_since_update 0self.history []self.hits 1self.hit_streak 1 # 连续匹配并更新的次数self.kf.update(convert_bbox_to_z(bbox))def predict(self):Advances the state vector and returns the predicted bounding box estimate.if((self.kf.x[6]self.kf.x[2])0):self.kf.x[6] * 0.0self.kf.predict()self.age 1if(self.time_since_update0): # 上一次更新距离现在的时间self.hit_streak 0 # 匹配次数归0self.time_since_update 1 # 轨迹只预测没有匹配的的次数➕1self.history.append(convert_x_to_bbox(self.kf.x))return self.history[-1]def get_state(self):Returns the current bounding box estimate.return convert_x_to_bbox(self.kf.x)def associate_detections_to_trackers(detections,trackers,iou_threshold 0.3):Assigns detections to tracked object (both represented as bounding boxes)Returns 3 lists of matches, unmatched_detections and unmatched_trackersif(len(trackers)0):return np.empty((0,2),dtypeint), np.arange(len(detections)), np.empty((0,5),dtypeint)iou_matrix iou_batch(detections, trackers)if min(iou_matrix.shape) 0:a (iou_matrix iou_threshold).astype(np.int32)if a.sum(1).max() 1 and a.sum(0).max() 1:matched_indices np.stack(np.where(a), axis1) # 如果正好是一个检测与一个轨迹匹配则找出匹配的索引else:matched_indices linear_assignment(-iou_matrix) # 匈牙利匹配matched_indices存储的是每个检测框对应的轨迹第一列存储的是检测框的id第二列存储的是检测框匹配的轨迹idelse:matched_indices np.empty(shape(0,2)) unmatched_detections [] # 寻找没有被匹配上的检测框for d, det in enumerate(detections): # 这一步写的麻烦不用枚举if(d not in matched_indices[:,0]):unmatched_detections.append(d)unmatched_trackers [] # 寻找没有被匹配上的轨迹for t, trk in enumerate(trackers):if(t not in matched_indices[:,1]):unmatched_trackers.append(t)#filter out matched with low IOUmatches [] # 寻找被匹配上的检测框的idfor m in matched_indices: # 根据iou再进行一次筛选if(iou_matrix[m[0], m[1]]iou_threshold):unmatched_detections.append(m[0])unmatched_trackers.append(m[1])else:matches.append(m.reshape(1,2))if(len(matches)0):matches np.empty((0,2),dtypeint)else:matches np.concatenate(matches,axis0)return matches, np.array(unmatched_detections), np.array(unmatched_trackers)class Sort(object):def __init__(self, max_age1, min_hits3, iou_threshold0.3):Sets key parameters for SORTself.max_age max_ageself.min_hits min_hitsself.iou_threshold iou_thresholdself.trackers []self.frame_count 0def update(self, detsnp.empty((0, 5))):Params:dets - a numpy array of detections in the format [[x1,y1,x2,y2,score],[x1,y1,x2,y2,score],...]Requires: this method must be called once for each frame even with empty detections (use np.empty((0, 5)) for frames without detections).Returns the a similar array, where the last column is the object ID.NOTE: The number of objects returned may differ from the number of detections provided.self.frame_count 1# get predicted locations from existing trackers.trks np.zeros((len(self.trackers), 5)) # 存储筛选后的轨迹。第一帧shape(0, 5)to_del [] # 没有匹配的轨迹ret [] # 存放检测所有合格的轨迹for t, trk in enumerate(trks):pos self.trackers[t].predict()[0] # 根据上一帧的轨迹当前帧的轨迹.trk[:] [pos[0], pos[1], pos[2], pos[3], 0]if np.any(np.isnan(pos)):to_del.append(t)trks np.ma.compress_rows(np.ma.masked_invalid(trks)) # 剔除当前无效轨迹for t in reversed(to_del):self.trackers.pop(t) # 剔除上一帧中的无效轨迹matched, unmatched_dets, unmatched_trks associate_detections_to_trackers(dets,trks, self.iou_threshold) # 第一帧没有轨迹# update matched trackers with assigned detections 对匹配的轨迹更新for m in matched: # 根据当前轨迹和检测得到当前最优估计self.trackers[m[1]].update(dets[m[0], :])# create and initialise new trackers for unmatched detectionsfor i in unmatched_dets: # 对于没有被匹配上的检测框生成新的跟踪器并添加到轨迹中trk KalmanBoxTracker(dets[i,:])self.trackers.append(trk)i len(self.trackers)for trk in reversed(self.trackers):d trk.get_state()[0]if (trk.time_since_update 1) and (trk.hit_streak self.min_hits or self.frame_count self.min_hits): #当前更新的轨迹and 连续匹配超过min_hits or 检测帧数小于min_hitsret.append(np.concatenate((d,[trk.id1])).reshape(1,-1)) # 1 as MOT benchmark requires positivei - 1# remove dead trackletif(trk.time_since_update self.max_age):self.trackers.pop(i)if(len(ret)0):return np.concatenate(ret)return np.empty((0,5))def parse_args():Parse input arguments.parser argparse.ArgumentParser(descriptionSORT demo)parser.add_argument(--display, destdisplay, helpDisplay online tracker output (slow) [False],actionstore_true)parser.add_argument(--seq_path, helpPath to detections., typestr, defaultdata)parser.add_argument(--phase, helpSubdirectory in seq_path., typestr, defaulttrain)parser.add_argument(--max_age, helpMaximum number of frames to keep alive a track without associated detections., typeint, default1)parser.add_argument(--min_hits, helpMinimum number of associated detections before track is initialised., typeint, default3)parser.add_argument(--iou_threshold, helpMinimum IOU for match., typefloat, default0.3)args parser.parse_args()return argsif __name__ __main__:# all trainargs parse_args()display args.display # 是否显示结果phase args.phase # triantotal_time 0.0 # 总时长total_frames 0 # 记录检测的帧数colours np.random.rand(32, 3) # \used only for display [32,3]if(display):if not os.path.exists(mot_benchmark):print(\n\tERROR: mot_benchmark link not found!\n\n Create a symbolic link to the MOT benchmark\n (https://motchallenge.net/data/2D_MOT_2015/#download). E.g.:\n\n $ ln -s /path/to/MOT2015_challenge/2DMOT2015 mot_benchmark\n\n)exit()plt.ion()fig plt.figure()ax1 fig.add_subplot(111, aspectequal)if not os.path.exists(output):os.makedirs(output)pattern os.path.join(args.seq_path, phase, *, det, det.txt) # 相对路径 data/train/*/det/det.txt# 1. 数据准备for seq_dets_fn in glob.glob(pattern):mot_tracker Sort(max_ageargs.max_age, # 1.1 初始化跟踪器min_hitsargs.min_hits,iou_thresholdargs.iou_threshold) # create instance of the SORT trackerseq_dets np.loadtxt(seq_dets_fn, delimiter,) # 1.2 加载数据seq seq_dets_fn[pattern.find(*):].split(os.path.sep)[0] # data/train/ETH-Bahnhof/det/det.txt -- [ETH-Bahnhof, det, det.txt] -- ETH-Bahnhofwith open(os.path.join(output, %s.txt%(seq)),w) as out_file: # output/ETH-Bahnhof.txtprint(Processing %s.%(seq))for frame in range(int(seq_dets[:,0].max())): # seq_dets[:,0]第一列为图片的序列号遍历每一帧的检测结果frame 1 # detection and frame numbers begin at 1dets seq_dets[seq_dets[:, 0]frame, 2:7] # x1,y1,w,h,cdets[:, 2:4] dets[:, 0:2] # convert to [x1,y1,w,h] to [x1,y1,x2,y2]total_frames 1if(display):fn os.path.join(mot_benchmark, phase, seq, img1, %06d.jpg%(frame))im io.imread(fn)ax1.imshow(im)plt.title(seq Tracked Targets)start_time time.time()trackers mot_tracker.update(dets) # 2. 获取跟踪结果cycle_time time.time() - start_timetotal_time cycle_timefor d in trackers: # 画的是跟踪到的轨迹print(%d,%d,%.2f,%.2f,%.2f,%.2f,1,-1,-1,-1%(frame,d[4],d[0],d[1],d[2]-d[0],d[3]-d[1]),fileout_file)if(display):d d.astype(np.int32)ax1.add_patch(patches.Rectangle((d[0],d[1]),d[2]-d[0],d[3]-d[1],fillFalse,lw3,eccolours[d[4]%32,:]))if(display):fig.canvas.flush_events()plt.draw()ax1.cla()print(Total Tracking took: %.3f seconds for %d frames or %.1f FPS % (total_time, total_frames, total_frames / total_time))if(display):print(Note: to get real runtime results run without the option: --display)
http://www.w-s-a.com/news/760352/

相关文章:

  • 推广学校网站怎么做公司可以做多个网站吗
  • 游戏网站后台建设郑州定制网站
  • 商务公司网站建设网站建设如何自学
  • 现在建网站可以拖拉式的吗中国国内最新新闻
  • phpstorm网站开发产品logo设计
  • 电子商务网站建设与运营什么是单页面网站
  • 西安优化网站公司南阳微信网站
  • 购物网站线下推广方案佛山快速建站哪家服务专业
  • 临沂网站排名外贸网站推广方法之一
  • 手机网站百度关键词排名查询吕梁网站制作吕梁安全
  • 做网站媒体wordpress管理员账号数据库添加
  • php如何自己做网站wordpress怎么修改编辑代码
  • 网站建网站建设公司WordPress互联
  • 泊头市网站建设价格wordpress导航菜单位置
  • 怎么设立网站赚广告费网页制作素材模板图片
  • 做班级网站的目的网站设计制作公司需要什么资质
  • 济南做网站哪家好财政网站平台建设不足
  • php网站建设招聘网站开发与设计论文
  • 上海 网站建设平台 补贴网站开发招标文件范本
  • 延安网站建设公司电话手机上那个网站做农产品推广比较好
  • 增城哪家网站建设好如何做网站实名认证
  • 常州地区做网站个人购物网站需要备案吗
  • 网站建设公司 跨界鱼科技专业做服务器的网站都有哪些
  • 欧洲网站服务器网站建设费用计入什么科目
  • 网站的色调苏州策划网站模板建站公司
  • 怎么看网站用的什么后台公路建设项目可行性研究报告编制办法哪个网站查最新版
  • 可以看的网站的浏览器有哪些专业APP客户端做网站
  • 如何做网站推广自己的产品推荐个网站好吗
  • 网站经营范围wordpress注入点
  • 学校网站开发协议夫妻网络网站建设