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


    目录

    前言

    课题背景和意义

    实现技术思路

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

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

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

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

    实现效果图样例


    前言


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

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

    本次分享的课题是

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

    课题背景和意义

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

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

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

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

    实现技术思路

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

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

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

    1. from __future__ import print_function
    2. import sys
    3. import cv2
    4. from random import randint
    5. trackerTypes = ['BOOSTING', 'MIL', 'KCF','TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']
    6. def createTrackerByName(trackerType):
    7. # Create a tracker based on tracker name
    8. if trackerType == trackerTypes[0]:
    9. tracker = cv2.TrackerBoosting_create()
    10. elif trackerType == trackerTypes[1]:
    11. tracker = cv2.TrackerMIL_create()
    12. elif trackerType == trackerTypes[2]:
    13. tracker = cv2.TrackerKCF_create()
    14. elif trackerType == trackerTypes[3]:
    15. tracker = cv2.TrackerTLD_create()
    16. elif trackerType == trackerTypes[4]:
    17. tracker = cv2.TrackerMedianFlow_create()
    18. elif trackerType == trackerTypes[5]:
    19. tracker = cv2.TrackerGOTURN_create()
    20. elif trackerType == trackerTypes[6]:
    21. tracker = cv2.TrackerMOSSE_create()
    22. elif trackerType == trackerTypes[7]:
    23. tracker = cv2.TrackerCSRT_create()
    24. else:
    25. tracker = None
    26. print('Incorrect tracker name')
    27. print('Available trackers are:')
    28. for t in trackerTypes:
    29. print(t)
    30. return tracker

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

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

    1.视频的一帧

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

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

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

    1. # Create a video capture object to read videos
    2. cap = cv2.VideoCapture(videoPath)
    3. # Read first frame
    4. success, frame = cap.read()
    5. # quit if unable to read the video file
    6. if not success:
    7. print('Failed to read video')
    8. sys.exit(1)

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

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

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

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

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

    1. # Specify the tracker type
    2. trackerType = "CSRT"
    3. # Create MultiTracker object
    4. multiTracker = cv2.MultiTracker_create()
    5. # Initialize MultiTracker
    6. for bbox in bboxes:
    7. multiTracker.add(createTrackerByName(trackerType), frame, bbox)

    实现效果图样例

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

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

  • 相关阅读:
    【JavaEE】常见的锁策略 -- 多线程篇(4)
    iptables DNAT和de-DNAT
    [微服务源码等]精品基于SpringCloud实现的高并发商城系统-微服务-分布式[包运行成功]
    mysql之主备延迟
    剑指 Offer 44. 数字序列中某一位的数字
    Disruptor详细介绍
    不会写复杂的SQL,该怎么学习?
    SpringBoot-Web开发-请求映射与请求参数处理
    Linux是什么?一个老生常谈的问题
    SCM供应链管理系统解决方案:助力企业采购流程高效运行,全面降低供应链风险
  • 原文地址:https://blog.csdn.net/qq_37340229/article/details/128043944