当前位置: 首页 > 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讲解及实战(超详细 附源码和演示视频)
  • 电视剧里的代码真能运行吗?
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • angular学习第一篇-----环境搭建
  • Apache Zeppelin在Apache Trafodion上的可视化
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • LintCode 31. partitionArray 数组划分
  • Mithril.js 入门介绍
  • node学习系列之简单文件上传
  • React-生命周期杂记
  • 记一次和乔布斯合作最难忘的经历
  • 聊聊flink的TableFactory
  • 如何用vue打造一个移动端音乐播放器
  • 使用 @font-face
  • 项目管理碎碎念系列之一:干系人管理
  • 怎么把视频里的音乐提取出来
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • #数学建模# 线性规划问题的Matlab求解
  • #微信小程序:微信小程序常见的配置传值
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)llvm ir转换过程
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Java数据结构)ArrayList
  • (libusb) usb口自动刷新
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (一)Linux+Windows下安装ffmpeg
  • (一)基于IDEA的JAVA基础10
  • (原創) 未来三学期想要修的课 (日記)
  • (转载)深入super,看Python如何解决钻石继承难题
  • .form文件_SSM框架文件上传篇
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET的数据绑定
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .net反混淆脱壳工具de4dot的使用
  • .NET企业级应用架构设计系列之结尾篇
  • /etc/sudoer文件配置简析
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48