# 视频目标跟踪
**Repository Path**: cspurs/video_target_tracking
## Basic Information
- **Project Name**: 视频目标跟踪
- **Description**: 视频目标跟踪——视频目标跟踪
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 4
- **Created**: 2024-04-07
- **Last Updated**: 2024-04-09
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 视频目标跟踪
### 环境说明
* 该项目在Python+opencv+windows环境下进行开发;
* 在python版本为3.6, opencv版本为3.4.1下测试发现无法调用yolov3模型,改用opencv3.4.2即可调用;
* 不同opencv版本可能会有错误,这里建议下载已经测试通过的opencv3.4.2。
### 环境安装
* `首先安装opencv`
> pip install opencv-python==3.4.2.16
>
> pip install opencv-contrib-python==3.4.2.16 # 扩展包,包含了一些特征提取算法,版本 要与opencv版本一致
* `安装dlib`
建议用编译好的直接pip安装,对于windows系统,下载对于版本的.whl文件,地址为,将该文件放到Anaconda下的Scripts文件夹下,然后执行如下命令:
> pip install dlib-19.7.0-cp36-cp36m-win_amd64.whl
### 文件说明
* multi-object-tracking-artificial文件夹下实现了人工给定标定框使用opencv集成的追踪器进行单目标或多目标跟踪。
* multi-object-tracking-auto文件夹下实现了先通过检测模型检测目标画出标定框,再通过dlib和opencv工具包集成的追踪算法进行多目标跟踪。
`ssd+dlib.py`:通过参数指定要检测的目标和视频,通过opencv的dnn模块调用ssd检测模型对视频每一帧进行检测,当检测到目标则停止检测,接下来调用dlib里的跟踪算法对检测到的目标跟踪。
`ssd+opencv.py`:通过参数指定要检测的目标和视频,通过opencv的dnn模块调用ssd检测模型对视频每一帧进行检测,当检测到目标则停止检测,接下来调用opencv里的跟踪算法对检测到的目标跟踪。
`ssd_detection.py` : 通过参数指定要检测的目标和视频,通过opencv的dnn模块调用ssd检测模型对视频每一帧进行检测,画出检测框和标签,并在每一帧上显示检测到的目标数。
`yolov3_detection.py`: 通过参数指定要检测的目标和视频,通过opencv的dnn模块调用yolov3检测模型对视频每一帧进行检测,画出检测框、标签和置信度,并在每一帧上显示检测到的目标数。
`yolov3+opencv.py`: 通过参数指定要检测的目标和视频,通过opencv的dnn模块调用yolov3检测模型对视频每一帧进行检测,当检测到目标则停止检测,接下来调用opencv里的跟踪算法对检测到的目标跟踪。
`utils.py`: 计算帧率和和视频检测和跟踪所消耗时间。
`mobilenet_ssd`和`yolov3`文件夹下为预训练模型的权重和配置文件,`coco.names.txt`存储了预训练模型的类别,这些类别都可进行检测。
### 目前效果
* 人工标记框进行跟踪,csrt跟踪器相对是最好的,高速运动的跟踪效果较差,目标消失跟踪也会失败,当目标再次出现无法重新跟踪。csrt跟踪器的跟踪算法为CSR-DCF,论文地址为:(CVPR 2017)
* ssd检测+dlib跟踪,可以指定目标进行检测跟踪,可以计算显示FPS,检测效果还行,跟踪效果不太好但是速度还不错,帧率最高可达10几,对于新出现目标无法检测到,目标消失的问题也没进行处理。dlib跟踪算法为DSST算法,论文地址:
* ssd检测+opencv跟踪,可以指定目标进行检测跟踪,可以计算显示FPS,使用csrt跟踪器跟踪效果优于dlib里的跟踪算法,但是速度要慢,帧率大致为3.x。对于新出现目标也没有进行重新检测,目标消失的问题也没进行处理;
* ssd直接对每一帧视频进行检测会出现当前帧检测到目标,下一帧检测不到的情况,这一点基于跟踪不会出现。ssd的检测效果还不够好,帧率大致为11.x;
* yolov3检测+opencv跟踪,可以指定目标进行检测跟踪,可以计算显示FPS,检测效果提升了,帧率大致为3.x;
* yolov3直接对每一帧视频进行检测效果挺好,基本不会出现某一帧漏检的情况,解决了跟踪目标消失和新目标出现无法跟踪的问题,但是速度很慢,帧率大致为1.x。
### 问题
* 当我尝试用ECO算法时,源码为matlab版本,需要对视频每一帧进行标定框,生成一个groundtruth_rect.txt文件。请问老师,这个文件怎么生成?
* 我还尝试下载了KCF源码matlab实现版本,它是读入的OTB数据库里的视频序列,跟踪效果要比opencv里调用的KCF算法好的多,这里不太理解;
* 对于如何解决目标消失、新目标出现的问题没有思路,希望老师提供一下思路。
### 改进计划
* 采用多进程实现目标检测与跟踪,提升速度;
* 解决新目标重新检测的问题;
* 解决目标消失产生的问题;
* 画出目标运动轨迹;
* 想结合硬件树莓派,发开一个GUI或web程序进行远程目标检测与跟踪。