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

[毕业设计]机器学习的运动目标跟踪-opencv

目录

前言

课题背景和意义

实现技术思路

第一步:创建单目标追踪器

第二步:读取视频的第一帧

第三步:在第一帧中定位物体

第四步:初始化多目标追踪器

实现效果图样例


前言


    📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

本次分享的课题是

🎯机器学习的运动目标跟踪

课题背景和意义

目标跟踪指的是对视频中的移动目标进行定位的过程。

在如今AI行业有着很多应用场景,比如监控,辅助驾驶等。

对于如何实现视频的目标跟踪,也有着许多方法。

比如跟踪所有移动目标时,视频每帧之间的变化就显得很有用。

实现技术思路

第一步:创建单目标追踪器

一个多目标追踪器是由一系列简单的单目标追踪器组成的。一开始,我们先定义一个函数,用追踪器类型作为输入并创建一个追踪器对象。OpenCV 有八个不同的追踪器类型:BOOSTING, MTL, KCF, TLD, MEDIANFLOW, GOTURN, MOSSE, CSRT.

如果你想用 GOTURN 追踪器,请确保阅读这篇文章并下载caffe模型。在下面的代码中,给出追踪器类别的名字,我们返回追踪器对象。这个追踪器会用于多目标追踪器。

from __future__ import print_function
import sys
import cv2
from random import randint

trackerTypes = ['BOOSTING', 'MIL', 'KCF','TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']

def createTrackerByName(trackerType):
 # Create a tracker based on tracker name
 if trackerType == trackerTypes[0]:
   tracker = cv2.TrackerBoosting_create()
 elif trackerType == trackerTypes[1]: 
   tracker = cv2.TrackerMIL_create()
 elif trackerType == trackerTypes[2]:
   tracker = cv2.TrackerKCF_create()
 elif trackerType == trackerTypes[3]:
   tracker = cv2.TrackerTLD_create()
 elif trackerType == trackerTypes[4]:
   tracker = cv2.TrackerMedianFlow_create()
 elif trackerType == trackerTypes[5]:
   tracker = cv2.TrackerGOTURN_create()
 elif trackerType == trackerTypes[6]:
   tracker = cv2.TrackerMOSSE_create()
 elif trackerType == trackerTypes[7]:
   tracker = cv2.TrackerCSRT_create()
 else:
   tracker = None
   print('Incorrect tracker name')
   print('Available trackers are:')
   for t in trackerTypes:
     print(t)
   
 return tracker

第二步:读取视频的第一帧

一个多目标追踪器需要两个输入

1.视频的一帧

2.你想要追踪的所有目标的位置(边界框)

给定这些信息,追踪器会在多有子序列帧中追踪这些特定目标的位置。

在下面的代码中,我们先用 VidoeCapture 类加载视频,读取第一帧。这一帧将会用于之后的 MultiTracker 的初始化。

 # Create a video capture object to read videos
 cap = cv2.VideoCapture(videoPath)

 # Read first frame
 success, frame = cap.read()
 # quit if unable to read the video file
 if not success:
   print('Failed to read video')
   sys.exit(1)

第三步:在第一帧中定位物体

OpenCV 提供了一个叫做 selectROI 的功能,它可以弹出一个 GUI 来选择边界框(也叫做感兴趣的区域(ROI))

while True:
 # draw bounding boxes over objects
 # selectROI's default behaviour is to draw box starting from the center
 # when fromCenter is set to false, you can draw box starting from top left corner
 bbox = cv2.selectROI('MultiTracker', frame)
 bboxes.append(bbox)
 colors.append((randint(0, 255), randint(0, 255), randint(0, 255)))
 print("Press q to quit selecting boxes and start tracking")
 print("Press any other key to select next object")
 k = cv2.waitKey(0) & 0xFF
 if (k == 113):  # q is pressed
   break

print('Selected bounding boxes {}'.format(bboxes))

第四步:初始化多目标追踪器

初始化单目标追踪器,我们需要视频第一帧和用来标定我们想要追踪的目标位置的边界框。多目标追踪器将这些信息传递给它内部封装的单目标追踪器。

# Specify the tracker type
trackerType = "CSRT"   

# Create MultiTracker object
multiTracker = cv2.MultiTracker_create()

# Initialize MultiTracker 
for bbox in bboxes:
 multiTracker.add(createTrackerByName(trackerType), frame, bbox)

实现效果图样例

我是海浪学长,创作不易,欢迎点赞、关注、收藏、留言。

毕设帮助,疑难解答,欢迎打扰!

相关文章:

  • Ubuntu 软件管理学习笔记
  • python中pytest库用法详解
  • CSRF漏洞简介
  • C/C++航空客运订票系统
  • 编译原理之词法分析器随笔和简单实现
  • 47 - 父子间的冲突
  • 单片机和ARM A的区别
  • STC 51单片机40——汇编语言 串口 接收与发送
  • python破解wifi教程
  • Android App开发即时通信中通过SocketIO在客户端与服务端间传输文本和图片的讲解及实战(超详细 附源码)
  • 【网络安全】文件上传之安全狗bypass
  • MATLAB | 世界杯来用MATLAB画个足球玩叭~
  • LeetCode | 循环队列的爱情【恋爱法则——环游世界】
  • Android App开发音量调节中实现拖动条和滑动条和音频管理器AudioManager讲解及实战(超详细 附源码和演示视频)
  • 电视剧里的代码真能运行吗?
  • 【翻译】babel对TC39装饰器草案的实现
  • Android开源项目规范总结
  • Bootstrap JS插件Alert源码分析
  • EOS是什么
  • Java IO学习笔记一
  • Javascript Math对象和Date对象常用方法详解
  • js作用域和this的理解
  • MySQL用户中的%到底包不包括localhost?
  • PHP 的 SAPI 是个什么东西
  • Spring Cloud Feign的两种使用姿势
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 动态规划入门(以爬楼梯为例)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 物联网链路协议
  • 详解移动APP与web APP的区别
  • 小程序开发之路(一)
  • 赢得Docker挑战最佳实践
  • 国内开源镜像站点
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 选择阿里云数据库HBase版十大理由
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (2022 CVPR) Unbiased Teacher v2
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (三)终结任务
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (转)项目管理杂谈-我所期望的新人
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • ?
  • @property python知乎_Python3基础之:property
  • [2021 蓝帽杯] One Pointer PHP
  • [22]. 括号生成
  • [hdu 2896] 病毒侵袭 [ac自动机][病毒特征码匹配]
  • [HTML]HTML5实现可编辑表格
  • [IE编程] 如何设置IE8的WebBrowser控件(MSHTML) 的渲染模式
  • [LeetCode]--61. Rotate List
  • [Notice] 朋友们,blog更新http://jiang-hongfei.spaces.live.com