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

news2025/7/21 4:23:30

目录

前言

课题背景和意义

实现技术思路

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

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

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

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

实现效果图样例


前言


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

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

本次分享的课题是

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

课题背景和意义

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

在如今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)

实现效果图样例

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/35745.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode 907. Sum of Subarray Minimums(子数组最小值的和)

所有子数组的最小值求和。 思路: 最容易想到的就是用DFS找出所有子数组,然后每个子数组找最小值,再求和。但显然不是最优的。 因为费尽心思找到了一堆子数组,它们的最小值竟然是相同的, 是不是有种直接用这个最小值乘…

Alkyne-PEG-Biotin,Alk-PEG-Biotin,炔烃-聚乙二醇-生物素试剂供应

英文:Alkyne-PEG-Biotin,Alk-PEG-Biotin 中文:炔烃-聚乙二醇-生物素 CAS编号:N/A 所属分类:Alkyne PEG Biotin PEG 分子量:可定制,生物素-聚乙二醇5-炔烃、生物素-PEG 20-炔烃 、Biotin-PEG…

HCIA 访问控制列表ACL

一、前言 ACL又称访问控制列表,其实这个东西在很多地方都有用,可能名字不太一样但原理和功能都差不太多,比如服务器、防火墙,都有类似的东西,功能其实也就是“过滤”掉不想收到的数据包。为什么不想收到一些数据包呢&…

C++ 测试框架 Gtest学习——qt版本

目录标题一、参考文档二、获取Gtest三、使用(一)qt项目导入Gtest(二)修改pro文件(三)一个简单的例子(四)EXPECT(期望)和ASSERT(断言)介…

ImportError: cannot import name ‘xxx‘ from ‘xxx‘关于python导包的问题

github clone下来的代码,在矩池云跑的好好的,在自己电脑跑却报错。 ImportError: cannot import name ‘helper’ from ‘utils’ (D:\anaconda\envs\TF2.1\lib\site-packages\utils_init_.py) 搜了网上,说加路径 import sys sys.path.appe…

力控关节机器人(关节扭矩传感器力控)

力控机器人本质上属于协作机器人中的一种,其每个关节都带有力矩传感器; [1] 广泛应用在工业、医疗、新零售领域或智能厨房行业。 Franka Emika: 力控机器人每个关节都带有力矩传感器 力矩传感器提供了一种提高机器人力控性能的途径。 更加…

[毕业设计]基于机器视觉的车辆速度检测与识别算法

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投…

面板平滑转换回归(PSTR)分析案例实现

建模过程包括三个阶段:表述,估计和评估,本文帮助用户进行模型表述、估计,进行PSTR模型评估。 最近我们被客户要求撰写关于PSTR的研究报告,包括一些图形和统计输出。 在程序包中实现了集群依赖性和异方差性一致性检验…

电脑删除的照片怎么找回来?总结了四种方法

照片被删除似乎是常有的事情,如果是重要的照片被删了,想要办法恢复才是最重要的。而对于删除的照片您是如何恢复的呢?这里总结了几种恢复方法,根据自己的需要选择恢复方法,不出意料的话,按照下面的方法你将…

以分割栅格为例实现FME模板的方案优化

一、利用FME分割栅格 (一)问题的产生 对于FME使用者来说,利用FME完成栅格的批量分割是一件极为平常且容易的事情。只需要输入栅格和确定分割方案就可以实现利用FME对栅格数据的分割,再配合FME的“扇出”功能,就能够实…

WebDAV之葫芦儿·派盘+多彩笔记

多彩笔记 支持webdav方式连接葫芦儿派盘。 还记得小时候那款带密码锁的笔记本?有没有好用的笔记app可以将笔记加上密码,不怕小秘密被偷看?推荐朋友们体验下多彩笔记。 多彩笔记是一款简单又精致的记事软件,用户可以在多彩笔记app中存储,编辑,删除或查找记录,对于写作…

干货 | 如何获取Servlet内存马?

前言 对于回显的获取主要是在ApplicationFilterChain类的lastServicedRequest / lastServicedResponse两个属性,是使用的ThreadLocal进行修饰的,并且,在执行请求的过程中,通过反射修改属性值,能够记录下当前线程的req…

CS224W 7 A General Perspective on Graph Neural Networks

目录 A General GNN Framework A single GNN layer 基本形式 Classical GNN Layers: GCN Classical GNN Layers: GraphSAGE Classical GNN Layers: GAT 动机 Attenion Mechanism Multi-head attention Attenion Mechanism的优点 GNN Layer in Practice Stacking Lay…

股票交易接口软件服务涵盖范围有哪些?

通常所说的股票交易接口软件是指量化交易程序员们可以自行查询各大交易网站或交易所的股票历史数据及行情数据的工具,如:实时报价;走势图;价差图;基金、债券、期货、外汇、保险等各类金融数据查询等,进行数…

elasticsearch7.6安装教程及启动常见错误解决方法

elasticsearch就是一个类似数据库用来专门做搜索的一款工具,在大量的搜索条件下,效率很好,可以直接把它当成一个数据库。 1.打开官网 Download Elasticsearch | Elastic,下载历史版本 这里我选择7.6.1 然后点击linux sha 下载,我这里采用迅雷下载到本地后,再利用Xftp上…

【设计模式】装饰器模式( Decorator Pattern)

装饰器模式属于结构型模式,主要解决当系统需要添加新功能,需要向旧类中不断添加新的属性和方法,从而导致整个类的复杂度不断增长的问题。假如新加的代码仅仅是为了满足特定场景下才会执行的需要,那么就没必要全部写在主类中&#…

一个年薪20万软件测试工程师都具备的能力,你有吗?

今天和大家一起来讨论一下一个很火的问题:作为软件测试工程师需要具备哪些实力。 硬实力:学历技术 目前随着社会的发展,各个行业对岗位学历的要求也越来越高,尤其是对于工资水平高的技术岗位。 测试通用技能: 软件…

Revit中参数化弹簧族怎么做?

Revit中参数化弹簧族制作 第一步:新建族,族样板选择 “公制常规模型第二步:在平面视图中,在中心参照平面两端创建两条参照平面,等分标注,赋予其参数“一圈弹簧直径”,如图 1 第三步:…

环糊精-PEG-麦芽糖 maltose-Cyclodextrin 麦芽糖-环糊精

环糊精-PEG-麦芽糖 maltose-Cyclodextrin 麦芽糖-环糊精 英文名称:maltose-Cyclodextrin 别称:环糊精修饰麦芽糖,环糊精-麦芽糖 还可以提供PEG接枝修饰麦芽糖,麦芽糖-聚乙二醇-环糊精Cyclodextrin-PEG-maltose,环糊…

05、Spring事务详解

本文主要介绍Spring中的事务相关知识: 1、熟悉事务管理的三个核心接口 2、了解Spring事务的两种方式 3、掌握基于XML和注解的事务使用 1、Spring事务管理概述 1、事务管理的核心接口 1、PlatformTransactionManager PlatformTransactionManage接口是Spring平台提…