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

做网站 视频加载太慢百度明星人气排行榜

做网站 视频加载太慢,百度明星人气排行榜,上海网站建设 迈若,泰安市住房和城乡建设局网站目标跟踪算法大致可以分为两类#xff0c;一类是用前后两帧目标的相似程度来判断它们是否为同一个目标#xff0c;另一类是预测目标的运动轨迹来判断下一帧同一目标的位置。 本文也编写一个目标跟踪算法#xff0c;其原理是计算相邻两帧目标中心点的距离来判断它们是否为同…目标跟踪算法大致可以分为两类一类是用前后两帧目标的相似程度来判断它们是否为同一个目标另一类是预测目标的运动轨迹来判断下一帧同一目标的位置。 本文也编写一个目标跟踪算法其原理是计算相邻两帧目标中心点的距离来判断它们是否为同一目标即我们默认一个目标移动的范围不会超过某一阈值。该算法原理简单、易于实现虽然比不上成熟的DeepSORT或ByteTrack但在某些不是那么复杂的场合下还是具有一定的准确性的。 下面我们就来介绍该算法及其代码。 设置ID from collections import defaultdict import numpy as np import mathid_history defaultdict(lambda: []) id_counter 0 now_id []def set_id(centerPt):return_id 0flag_new_id Truefor k, v in id_history.items():dist math.hypot(v[-1][0]-centerPt[0], v[-1][1]-centerPt[1])if dist 35:id_history[k].append((float(centerPt[0]), float(centerPt[1])))return_id know_id.append(k)flag_new_id Falseif len(id_history[k]) 20: id_history[k].pop(0)breakif flag_new_id is True:global id_counterid_history[id_counter].append((float(centerPt[0]), float(centerPt[1])))return_id id_counternow_id.append(id_counter)id_counter 1return return_id字典变量id_history用于保存目标ID和该目标的中心点的坐标字典的key为IDvalue为该ID的坐标。在这里我们除了为目标标注ID外还实现了另一个功能绘制了该目标的运动轨迹所以这里的坐标不仅仅是当前帧的坐标还包括以前同一目标的坐标。 id_counter为目标ID的编号。 我们除了为目标设置ID外还需要删除那些不再出现的ID因此我们还需要一个数组变量now_id用于记录当前帧内的所有ID。 函数set_id的作用就是为当前目标设置ID它的输入变量是被设置目标ID的中心点坐标centerPt返回的是该目标的ID号return_id。变量flag_new_id用于标注当前目标是否在前一帧出现过如果出现过则赋予前一帧同一目标的ID否则赋予新的ID。for循环遍历所有以前的目标ID计算距离测度当小于35时我们就认为它们是用一个目标并把它的坐标添加至该ID内同时也把该ID添加至now_id内。由于我们只绘制一定长度的运动轨迹所以需删除早期存储的该ID的多余坐标。if flag_new_id is True内用于为该目标赋予以前从未出现的新ID。 除了为目标设置ID外还需要删除不再出现的ID否则跟踪算法会不准确 def del_id():[id_history.pop(k) for k in set(id_history.keys()) - set(now_id)] now_id.clear() 由于我们已经把当前帧内出现的ID保存在了now_id内所以我们只需要把id_history内的ID与now_id比较将now_id内没有出现的ID从id_history内剔除掉即可。 算法的核心部分就介绍完了下面我们介绍一个附加功能绘制目标运动轨迹 def traj(img, trackid, thick15, color(70, 250, 116),):points np.hstack(id_history[trackid]).astype(np.int32).reshape((-1, 2))leng len(id_history[trackid])for i in range(leng-1):thickness max(thick - i, 3)cv2.line(frame, points[-1*(i1)], points[-1*(i2)], colorcolor, thicknessthickness, lineTypecv2.LINE_AA)函数traj实现了绘制ID为trackid的运动轨迹。轨迹坐标就保存在id_history的key为trackid的value内这些坐标是按先后顺序保存的。为了使轨迹看起来更形象逼真我们并没有使用cv2.polylines一次性的绘制而是采用cv2.line两两坐标画线而采用的线宽thickness是渐变的。 代码的其他部分就是目标检测器和绘制目标边框。与上一篇博文一样我们仍然选择YOLOv8来检测目标具体的注解就不再赘述在这里只是附上代码 import torch from ultralytics import YOLO import cv2model YOLO(yolov8l.pt) device torch.device(cuda) model.to(device)cap cv2.VideoCapture(D:/track/british_highway_traffic.mp4) fps cap.get(cv2.CAP_PROP_FPS) size (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) fNUMS cap.get(cv2.CAP_PROP_FRAME_COUNT) fourcc cv2.VideoWriter_fourcc(*mp4v) videoWriter cv2.VideoWriter(D:/track/track.mp4, fourcc, fps, size)def box_label(image, box, label, color(128, 128, 128), txt_color(255, 255, 255)):p1, p2 (int(box[0]), int(box[1])), (int(box[2]), int(box[3]))cv2.rectangle(image, p1, p2, color, thickness2, lineTypecv2.LINE_AA)if label:w, h cv2.getTextSize(label, 0, fontScale2 / 3, thickness1)[0] outside p1[1] - h 3p2 p1[0] w, p1[1] - h - 3 if outside else p1[1] h 3cv2.rectangle(image, p1, p2, color, -1, cv2.LINE_AA)cv2.putText(image,label, (p1[0], p1[1] - 2 if outside else p1[1] h 2),0,2 / 3,txt_color,thickness1,lineTypecv2.LINE_AA)while(cap.isOpened()):ret, frame cap.read()if not ret:breakresults model(frame,devicecuda)[0]boxes results.boxes.datafor box in boxes:x1, y1, x2, y2 box[:4]x (x1x2)/2y (y1y2)/2track_id set_id((x,y)) #为当前目标设置IDif box[-1] 2:box_label(frame, box, #str(track_id) car, (89, 161, 197))traj(frame, track_id) #为该目标绘制轨迹elif box[-1] 7:box_label(frame, box, #str(track_id) truck, (67, 161, 255))traj(frame, track_id)elif box[-1] 3:box_label(frame, box, #str(track_id) motorcycle, (186, 55, 2))traj(frame, track_id)elif box[-1] 5:box_label(frame, box, #str(track_id) bus, (19, 222, 24))traj(frame, track_id)cv2.imshow(frame,frame)cv2.putText(frame, https://blog.csdn.net/zhaocj, (25, 50),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)videoWriter.write(frame)del_id() #删除该帧内没有出现的IDif cv2.waitKey(1) 0xFF ord(q):breakcap.release() videoWriter.release() cv2.destroyAllWindows() 上述代码的详细解释还请移步上一篇博文。 下面展示该算法的效果 track 该算法在目标被遮挡甚至断帧的情况下识别效果肯定不行但在一般情况下该算法也不失为一种简单有效的方法。
http://www.pierceye.com/news/334326/

相关文章:

  • 外贸都是在哪些网站做怎么做个手机版的网站
  • 北京社保网站做社保增减员锦绣大地seo官网
  • 分析影响网站排名的因素河南省住房和城乡建设厅网站文件
  • 宁城网站建设公司引流最好的推广方法
  • 辽宁省建设厅官方网站网站免费正能量直接进入浏览器下载安装
  • 怎么给公司建网站广州互联网营销师培训
  • 用阿里云做网站注意事项绵阳的网站建设公司哪家好
  • 电商网站设计工作内容深圳国际设计学院
  • 国内界面优秀的网站科技有限公司名字叫什么好
  • 网站底部悬浮代码搭建网站的主要风险
  • 长安网站建设公司常做网站首页的文件名
  • 学网站开发的能找什么工作赣州网站设计较好的公司
  • 网站建设接单微信营销软件收费排行榜
  • 佛山网站建设公司排名佛山微网站推广哪家专业
  • 招商网站建设网设备 光速东莞网站建设
  • 网站建设公司如何wordpress用多大主机
  • 东莞网站建设规范网页美工设计(第2版)素材
  • 论文 网站建设值得推荐的深圳app外包公司
  • 建网站的电脑可以换位置吗莆田建站培训
  • 外贸必看网站离职模板网
  • 内网网站建设正能量不良网站软件下载
  • 制作手机广告的网站吉林省建设厅网站评职称系统
  • 云南建设厅网站资质证书查询自动生成app
  • 柳州正规网站制作公司大连建设厅网站
  • 北京市保障房建设投资中心网站瘫痪广州大型网站建设公司排名
  • 做电池网站的引导页室内设计联盟效果图
  • 查询备案网站成绩查询系统网站开发
  • 网站后台编辑器上传不了图片建筑工程承包网app
  • wordpress多站点插件168工程信息网
  • 网站工信部备案号没有ftp wordpress