【高空无人机视角下的路口车辆与行人检测跟踪与轨迹刻画】

  • 背景需求
  • 可参考的方法
    • 1、 opencv + python 实现目标跟踪的方法:
    • 主要代码
      • ① main.py
      • ② items.py
    • 检测效果
    • 2、 dlib库单目标检测方法
    • 3、 深度学习方法
      • 代码
      • 效果
    • 推荐相关目标追踪的博文

背景需求

背景:
项目需要在高空视角下,对视频流中的行人与车辆进行跟踪与轨迹记录,理想的状态如下所示:


完全达到上述实际达到可能有点难度。但是可以逐步尝试实现。

可参考的方法

1、 opencv + python 实现目标跟踪的方法:

这里是为了更加准确获取具体目标的坐标信息,减小检测模型带来的误差因素,所以考虑单目标的跟踪检测。先用人工标注视频流的第一帧,选择要跟踪的目标,之后进行逐帧跟踪并刻画轨迹。

采用opencv + python 结合的方法

  • 环境依赖
  • opencv-python==3.4.9.33
  • contrib==0.3.0
  • pytho==3.7

主要代码

① main.py


# -*- coding: utf-8 -*-
# @Time    : 2021/09/03
# @Author  : Wupke
# Purpose  :  Single-object detection & Trajectory tracking  using opencv and pythonimport cv2
from items import MessageItem
import time
import numpy as npclass ObjectTracker(object):def __init__(self, dataSet):self.cascade = cv2.CascadeClassifier(dataSet)def track(self, frame):gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = self.cascade.detectMultiScale(gray, 1.03, 5)for (x, y, w, h) in faces:cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)return frameclass Tracker(object):'''对于指定目标,进行后续跟踪'''def __init__(self, tracker_type="BOOSTING", draw_coord=True):'''初始化追踪器种类'''# 查看opencv版本(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')self.tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN']self.tracker_type = tracker_typeself.isWorking = Falseself.draw_coord = draw_coord# 构造追踪器if int(minor_ver) < 3:self.tracker = cv2.Tracker_createBoosting(tracker_type)else:if tracker_type == 'BOOSTING':self.tracker = cv2.TrackerBoosting_create()if tracker_type == 'MIL':self.tracker = cv2.TrackerMIL_create()if tracker_type == 'KCF':self.tracker = cv2.TrackerKCF_create()if tracker_type == 'TLD':self.tracker = cv2.TrackerTLD_create()if tracker_type == 'MEDIANFLOW':self.tracker = cv2.TrackerMedianFlow_create()if tracker_type == 'GOTURN':self.tracker = cv2.TrackerGOTURN_create()def initWorking(self, frame, box):'''追踪器工作初始化,frame:初始化追踪画面,box:追踪的区域'''if not self.tracker:raise Exception("追踪器未初始化")status = self.tracker.init(frame, box)if not status:raise Exception("追踪器工作初始化失败")self.coord = boxself.isWorking = Truedef track(self, frame):'''开启追踪,记录记录追踪目标坐标'''message = Noneif self.isWorking:status, self.coord = self.tracker.update(frame)if status:message = {"coord": [((int(self.coord[0]), int(self.coord[1])),(int(self.coord[0] + self.coord[2]), int(self.coord[1] + self.coord[3])))]}if self.draw_coord:center_x = ''center_y = ''p1 = (int(self.coord[0]), int(self.coord[1]))p2 = (int(self.coord[0] + self.coord[2]), int(self.coord[1] + self.coord[3]))cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)message['msg'] = "is tracking"center_x,center_y=int((p1[0]+p2[0])/2),int((p1[1]+p2[1])/2)return MessageItem(frame, message),center_x,center_y        # 导出绘制的跟踪框中心坐标if __name__ == '__main__':a = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN']tracker = Tracker(tracker_type="KCF")   # 跟踪器可以切换其他的来看效果# video = cv2.VideoCapture(0)cap = cv2.VideoCapture("E:/Desktop/D_0239.mp4")'''获得视频流帧数,保存跟踪的视频,保存处理后的视频,注意保存处理后的视频画面帧的大小是否改变等等问题,否则会储存视频失败'''fps,w,h, = int(cap.get(5)),int(cap.get(3)),int(cap.get(4))print('fps: ', fps,'w: ', w,'h: ', h)fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') res_path = 'E:/Desktop/实验室文字编辑工作/20210827无人机/demo/result000.mp4'res = cv2.VideoWriter(res_path,fourcc,fps,(w,h),True) i=0car_tri=[]    # 存储系列轨迹点中心的坐标while True:ret, frame = cap.read()frame = cv2.resize(frame, (1200, 800))if i==0:# 暂停第一帧进行手工标注bbox = cv2.selectROI(frame, False)tracker.initWorking(frame, bbox)i+=1#第二帧以后,开始保存每一帧的跟踪框中心坐标center=[]if (ret):item = tracker.track(frame)[0]  # 得到追踪的画面x,y= tracker.track(frame)[1:]  # 取到MessageItem(frame, message),center_x,center_y   返回的center_x,center_y 分别赋值给 x,ycenter.append(x)center.append(y)car_tri.append(center)# # 限制轨迹最大长度# if len(car_tri)> 300:#     for k in range(len(car_tri) - 300):#         del car_tri[k]# # # 绘制轨迹if len(car_tri) > 2:for j in range(1, len(car_tri) - 1):pot1_x = car_tri[j][0]pot1_y = car_tri[j][1]pot2_x = car_tri[j + 1][0]pot2_y = car_tri[j + 1][1]cv2.line(frame, (pot1_x, pot1_y), (pot2_x, pot2_y), (255,0,0), 2)# print(x,y)frame=item.getFrame()cv2.imshow("track", frame)frame = cv2.resize(frame, (w, h))    # 还原视频的原始尺寸res.write(frame)k = cv2.waitKey(1) & 0xffif k == 27:breakcap.release()res.release()cv2.destroyAllWindows()

② items.py


#encoding=utf-8
import json
'''
封装类
'''
class MessageItem(object):#用于封装信息的类,包含图片和其他信息def __init__(self,frame,message):self._frame = frameself._message = messagedef getFrame(self):#图片信息return self._framedef getMessage(self):#文字信息,json格式return self._message# def getBase64Frame(self):#返回base64格式的图片,将BGR图像转化为RGB图像# jepg = IOUtil.array_to_bytes(self._frame[...,::-1])# return IOUtil.bytes_to_base64(jepg)def getBase64FrameByte(self):#返回base64格式图片的bytesreturn bytes(self.getBase64Frame())def getJson(self):#获得json数据格式dicdata = {"frame":self.getBase64Frame().decode(),"message":self.getMessage()}return json.dumps(dicdata)def getBinaryFrame(self):return IOUtil.array_to_bytes(self._frame[...,::-1])

检测效果

  • 车辆

  • 行人

2、 dlib库单目标检测方法

还有dlib库中的dlib.correlation_tracker()类实现目标跟踪的方法
dlib官方文档入口:
http://dlib.net/python/index.html#dlib.correlation_tracker
相关博文:https://blog.csdn.net/hongbin_xu/article/details/78359663

3、 深度学习方法

采用深度学习方法,先进行检测,在结合跟踪算法进行轨迹刻画。在这种视角下,需要重新训练检测的模型,而且行人目标较小,检测难度大,效果不敢说(尝试yolov+deepsort)。正在整合,后续会更新。

代码

在这里插入代码片

效果

后续更新。。。。。。

推荐相关目标追踪的博文

https://blog.csdn.net/qq_35488769/article/details/79103264
https://blog.csdn.net/hongbin_xu/article/details/78359663
https://blog.csdn.net/MHxiaoS/article/details/106675585

高空无人机视角下的检测跟踪数据集网址:
① https://www.ind-dataset.com/
② http://aiskyeye.com/download/multi-object-tracking_2021/

【高空无人机视角下的路口车辆与行人检测跟踪与轨迹刻画】相关推荐

  1. python航拍无人机视角下多车型车流量检测车流量多车型计数无人机车流检测yolov5

    航拍无人机视角下车流量检测车流量多车型计数无人机车流检测yolov5 最近在研究告诉高速公路无人机航拍多车型车流量检测,分为car和bus,这里主要说一下遇到的问题以及想法,如有问题欢迎大家指正. 设 ...

  2. 目标检测~无人机视角

    本文综合考察了无人机视角下的目标检测研究进展近年的发展和进步,总结并分析了无人机视角下目标检测所面临的不均衡挑战问题,然后对已有算法进行了归类.分析和比较,评述代表性方法的技术特点和区别,并系统对比分 ...

  3. 23年 车辆检测+车距检测+行人检测+车辆识别+车距预测(附yolo v5最新版源码)

    我们先看一下效果2023年最新版 yolo车距 行人识别yolov5和v7对比 yolo车距 其他步骤参考另外一篇文章: yolo 车辆测距+车辆识别+单目测距(双目测距)_SYBH.的博客-CSDN ...

  4. 【车辆行人检测和跟踪数据集及代码汇总】

    车辆行人检测和跟踪数据集和代码汇总 1. 车辆检测和跟踪 1.1 车辆检测数据集和训练权重 1.2 车辆跟踪 2. 行人检测和跟踪 2.1 行人检测数据集和训练权重 2.2行人多目标跟踪 3. 车辆行 ...

  5. 城市机动性视角下的城市交通人性化策略

    城市交通的人性化问题并不是一个新问题.近年来社会各界对它的关注度有所提高,与我国城市中小汽车交通的快速增长不无关系.以小汽车为代表的快速机动化不仅造成城市道路拥堵.停车难和乱停车.噪声和尾气污染,更是 ...

  6. 政、企、学三方视角下的智慧城市发展 | 2020中关村论坛“人工智能与城市可持续发展论坛”成功举办...

    人工智能技术在城市中孕育,城市亦为人工智提供了广阔的应用场景.如何更好地将智能与城市结合,是政府.企业与学术三界人士共同关心的重要问题.2020中关村论坛"人工智能与城市可持续发展论坛&qu ...

  7. 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...

    钱江会计实务精英讲坛预告第84期 # 主题 战略视角下之财务分析应用实践 --兼选股案例分享 # 时间 2020年12月25日 2:00 pm---4:00 pm # 地点 C楼213 主讲人简介 何 ...

  8. 【机器学习】机器学习视角下的因果推断

    机器学习可以通过样本直接匹配以及提升倾向性得分(PSM)准确度来实现样本的精准匹配,使得样本对反事实预测的研究更具有随机化实验的特性.本文从匹配法.断点回归法.双重差分法.合成控制法四个方面讲解机器学 ...

  9. 能量视角下的GAN模型(二):GAN=“分析”+“采样”

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在这个系列中,我们尝试从能量的视角理解 GAN.我们会发现这个视角如此美妙和直观,甚至让人拍案叫绝 ...

最新文章

  1. 3.1 A Historical Perspective 历史观点
  2. 第02期 基础算法(Leetcode)刻意练习开营计划
  3. 开发日记-20190329
  4. C#基础巩固之基础类型
  5. 编写你的第一个 Django 应用,第 7 部分
  6. 一步步使用SAP CRM Application Enhancement Tool创建扩展字段
  7. Fragment切换。radiobutton加fragment切换(附件源码下载)
  8. python list转map_Python 进阶之术 Map Filter Reduce
  9. python界面开发webview_python在webview和activity混合页面下怎么定位
  10. 蛮力法在求解最优解问题中的应用(JAVA)--旅行家问题、背包问题、分配问题
  11. c#与api类型对照表
  12. Python标准库中的random
  13. BZOJ3531-[Sdoi2014]旅行(树剖+线段树动态开点)
  14. 【代码规范】Google C++开源风格指南
  15. Atitit 企业文化之道 ---假日文化 attilax总结
  16. windows下载东西提高速度的方式。
  17. 北斗/GPS差分定位技术有哪些?
  18. Tableau超市案例分析
  19. 为什么阿里 P7 都找不到工作了?
  20. Go设计模式学习准备——下载bilibili合集视频

热门文章

  1. html的过渡属性,CSS3 transition 过渡属性
  2. 常见B端产品经理面试问题及答案(二)【11年大厂面试官呕心制作】
  3. cookie可存的最大限制_苹果完全屏蔽第三方 Cookie,七天清空本地存储
  4. 关于post请求接受不到参数
  5. 通威股份80亿投建5万吨多晶硅 欲打造世界级清洁能源企业
  6. java se 05
  7. 游戏服务器怎么设置防护?游戏服务器安全防护策略
  8. 云计算考试版本1.0
  9. IE11兼容性问题——网站提示“打印插件只支持IE浏览器”
  10. 烧脑打游戏计算机,盘点极度烧脑的游戏有哪些 烧脑解谜游戏推荐