基于dlib的目标追踪

2023-11-14

之前都在做目标检测,训练自己的检测器做检测,缺点就是电脑性能稍微差点的话,预测一次的时间就会稍久,我做的又正好是视频预测,所以连续播放都卡成PPT了,无奈之下选择抽帧检测,于是那闪烁效果堪比蹦迪现场的灯光,最后拍板定案的方法就是目标追踪了。开始研究目标追踪d额时候着实让我走了不少的弯路,吃了不少苦头。我尝试过两种方法,第一次选择opencv,做出来差强人意(当然也可能是我菜),而第二种就是我下面要写的,选择dlib库的目标追踪了。话不多说,直接上代码了。

import cv2
import dlib

video_path= r'E:\MBY\2103_ship-detection\pic\s2.mp4'
cap = cv2.VideoCapture(video_path)

count = 0
timeF = 24                 #设定帧率
TRACKER= []                #设置放置追踪器的总列表

while(1):
    ret, frame = cap.read()
    if not ret:
        break
    if (count % timeF == 0) :                          #抽帧检测,可以自己设定帧率
        f,result = predict_video(detector,frame,0.9)   #这里可以更换自己的检测器
        boxes = result['boxes'].tolist()               #检测信息,我的检测信息是一个字典里套数组,故将其转成列表形式,若有多个检测物体,则是列表嵌套列表形式,列表里的信息包含标签,得分与预测框的坐标
        if boxes != []:                                #当检测到目标物体时
            trackers = []                              #设置一个分追踪器列表
            for i in boxes:
                tracker = dlib.correlation_tracker()                               #设定追踪器
                rect = dlib.rectangle(int(i[2]),int(i[3]),int(i[4]),int(i[5]))     #获取检测信息,主要是获取检测信息中预测框的坐标
                tracker.start_track(frame,rect)                                    #将检测信息传入追踪器
                trackers.append(tracker)                                           #将追踪器添加到分追踪器列表中
                TRACKER = trackers                    #将分追踪器列表的值赋予总追踪器列表
    else:
        # 对每一个追踪器进行更新
        for tracker in TRACKER:
            tracker.update(frame)
            pos = tracker.get_position()              #得到追踪器的位置信息
            cv2.rectangle(frame, (int(pos.left()), int(pos.top())), (int(pos.right()), int(pos.bottom())),(0, 0, 0), 2)      #画图
    count += 1
    cv2.imshow("Frame", frame)
    key = cv2.waitKey(1) & 0xFF      #按下q键退出
    if key == ord("q"):
        break
cap.release()
cv2.destroyAllWindows()

要说的都写在注释里啦,要是有不对的地方欢迎指正~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于dlib的目标追踪 的相关文章

随机推荐

  • 用实例给新手讲解RSA加密算法

    http www cfca com cn zhishi wz 012 htm 用实例给新手讲解RSA加密算法 图为 RSA公开密钥算法的发明人 从左到右Ron Rivest Adi Shamir Leonard Adleman 照片摄于19
  • SpringMVC 框架详解

    目录 1 什么是 Spring MVC 1 1 什么是MVC 1 2 MVC 和 Spring MVC 的关系 2 第一个SpringMVC程序 2 1 RequestMapping 注解 2 2 ResponseBody 注解 2 3 g
  • opencv函数:flip函数

    flip函数是矩阵或者图像翻转 其实图像的本质也是矩阵 void flip InputArray src OutputArray dst int flipCode 参数 src 输入矩阵 dst 翻转后矩阵 类型与src一致 flipCod
  • CTS Failed 项解决

    CTS Failed 项解决 CtsWindowManagerDeviceTestCases Test android server wm MultiDisplaySystemDecorationTests testLaunchSecond
  • idea连接数据库实现增删改查

    连接数据库 在application properties中编写代码实现数据库连接 创建Student类 编写插入到数据库里的信息 id name等 并创建set get tostring方法 创建接口 创建StudentImp类实现Stu
  • 安居客滑块js逆向 - 逻辑详解

    注 本篇博客仅供学习使用 请勿用做其他商业用途 如有侵权 请联系本菜鸟 本菜鸟在最近的学习过程中又遇到了一个带有滑块的验证码 觉得有点意思 所以写这篇博客记录一下 对比而言 难度比某验和某盾的简单一丢丢 目标网址 aHR0cHM6Ly93d
  • logback appender简介说明

    转自 logback appender简介说明 下文笔者讲述logback的appender的简介说明 如下所示 logback中appender是负责写日志的组件 appender的功能 用于设置日志输出的目的地 日志输出的位置可为控制台
  • 惨痛的教训,疫情下失业的中年程序员

    最近身边的一个朋友突然间就被辞退了 而且是一线互联网大厂 周末跟我聚了下 喝了点小酒 聊了很多 他说我可以把他的经历发出来 因为他已经看淡了 只要不提他名字就行 我本来不擅长写这种文章 让他把心路历程写了一遍 写完发现简直没法看 这两天被我
  • TypeScript类型注解和类型推断

    类型注解和类型推断 类型注解 let count number count 123 这段代码就是类型注解 意思是显示的告诉代码 我们的count变量就是一个数字类型 这就叫做类型注解 当你明白了类型注解的概念之后 再学类型推断就更简单了 先
  • 类的定义方法

    一 类的定义方法 注意 1 类定义最后的分号不能省略 2 类中的数据成员不能在类中进行初始化 需要在构造函数中初始化 3 类名最好能体现其功能 首字母建议大写 二 类的实现方法 1 在类定义时同时实现 若成员函数中在类中定义 则被计算机自动
  • 陀螺产业区块链第四季

    2020年4月 国家发改委在例行新闻发布会上宣布区块链被正式列为新型基础设施中的信息基础设施 自此区块链正式搭上新基建的 风口 与传统基础设施建设相比 新型基础设施建设更加侧重于突出产业转型升级的新方向 无论是5G还是区块链 都体现出加快推
  • SIFT特征提取-应用篇

    SIFT特征具有缩放 旋转特征不变性 下载了大牛的matlab版SIFT特征提取代码 解释如下 1 调用方法 将文件加入matlab目录后 在主程序中有两种操作 op1 寻找图像中的Sift特征 image descrips locs si
  • 最全iOS 应用上架流程(提交到AppStore)

    一 上架基本需求资料 1 苹果开发者账号 公司已有可以不用申请 需要开通开发者功能 每年 99 美元 2 开发好的APP 借助辅助工具appuploader创建证书跟描述文件 二 证书 描述文件 借助辅助工具appuploader 上架版本
  • django runserver开启服务(开启外网访问与ipv6访问)

    首先setting要设置 ALLOWED HOSTS 然后在启动时 使用 python manage py runserver 8000 或是 python manage py runserver 8000 这样 开启外网访问 ipv4与i
  • numpy中argsort()排序函数的使用

    argsort 函数返回的是数组从小到大的索引值 直接上例子 一 对于一维数组 1 升序排列 默认是升序 import numpy as np 一维数组升序排列 data np array 3 5 1 np argsort data 输出结
  • 数据库原理-关系模式的规范化

    关系数据库的规范化理论是数据库逻辑设计的工具 一个关系只要其分量都是不可分的数据项 它就是规范化的关系 但这只是最基本的规范化 规范化程度可以有6个不同的级别 即6个范式 规范化程度过低的关系不一定能够很好地描述现实世界 可能会存在插入异
  • 通过WIndows命令行访问MySQL数据库

    在cmd命令行里输入mysql h127 0 0 1 uroot p用户密码 这样就可以连接了 使用 show databases 这个命令可以显示出所有的database表以方便我们查看 输入 quit 退出
  • @vant/weapp

    文章目录 一 介绍 二 安装 1 cd 到项目文件目录 2 使用 npm 安装 3 修改项目配置 4 构建 5 其他文件 三 使用 四 参考 微信小程序使用 vant weapp组件 一 介绍 Vant 是一个开源的移动端组件库 在微信小程
  • 基本的tcp套接口编程

    基本的tcp套接口编程 1 socket函数 为了执行网络I O 一个进程必须做的第一件事情是调用socket函数 指定期望的通信协议类型 include
  • 基于dlib的目标追踪

    之前都在做目标检测 训练自己的检测器做检测 缺点就是电脑性能稍微差点的话 预测一次的时间就会稍久 我做的又正好是视频预测 所以连续播放都卡成PPT了 无奈之下选择抽帧检测 于是那闪烁效果堪比蹦迪现场的灯光 最后拍板定案的方法就是目标追踪了