https://github.com/dancing-ui/uestc_vhm

使用yolov8、fast-reid、deepsort完成目标跟踪

GPL-3.0 License

Stars
6

uestc_vhm

项目介绍

  • 本项目的开发目标是为了快速部署目标检测、特征提取等算法模型,并将其通过流媒体的方式推流到前端页面进行显示。
  • 本项目在开发过程中深入贯彻“高内聚、低耦合”的编码原则,力争很轻松地对目标检测、目标跟踪、流媒体等算法和技术进行扩展。

效果展示

技术路线

  • 本项目主要使用了yolo系列模型完成目标检测,然后使用fast-reid提取目标框的特征向量,最后使用deepsort算法完成目标跟踪。

支持特性

  • 流媒体:支持使用RTMP对摄像头或者视频进行推拉流,后续考虑添加RTSP以支持实时监控功能。
  • 特征向量提取:支持Fast-Reid提取目标框的特征向量。
  • 目标检测:支持Yolov8n模型实现目标检测。
  • 目标跟踪:支持DeepSORT算法实现目标跟踪,后续考虑添加ByteTrack算法。

行人重识别服务

检测到行人之后

  • 首先在数据库里检索是否有相似度比较高的人
    • 这一步需要用向量数据库来做,若出现,则给出对应的id,否则id为无效值
  • 之后给系统后端发送一个http消息,http消息的json格式如下:
    {
      "PersonId": 1 // 行人id
      "Picture": "xxx"// base64码后的行人图片
      "CameraIP": "192.169.0.0" //摄像头地址
      "TimeStamp": "xxx"//时间戳
    }
    
  • 判定这段视频里后面几秒内是否重复出现该行人,注意以下事项:
    • 视频可见范围内,只发一次http消息
    • 相似度高的人不管在摄像头中消失多少次,都是一个相同的ID

开发环境

  • CPU: 13th Gen Intel(R) Core(TM) i5-13500HX 2.50 GHz
  • GPU: NVIDIA GeForce RTX 4060 Laptop GPU
  • RAM: 32GB
  • OS platform: WSL 2.0(Ubuntu 22.04.3 LTS)
  • Docker Development Environment: Ubuntu 20.04
  • Architecture: x86_64
  • Development editor: VSCode
  • Compiler: Clang 18.1.8
  • TensorRT: 8.6.1.6
  • Ffmpeg: 4.2.7

Quick Start

前置安装

  1. 安装nvidia驱动,安装教程
  2. 安装WSL2.0,并在WSL2.0中安装Ubuntu 22.04.3 LTS,安装教程
  3. 安装docker-desktop
  4. 在powershell中使用如下命令检验WSL安装情况,下图中的Ubuntu-22.04-UESTC是我自己取的名字

环境检查

  • 检验docker环境
    • 本项目使用Dockerfile管理开发环境,环境中已自带所有可用的TensorRT、Cuda、Cudann、Opencv、Ffmpeg等依赖。按理来说,无需下载多余的包,仅需下载安装docker-desktop保证docker环境,并使用项目中的Dockerfile构建镜像即可。
    • 由于WSL使用的是docker-desktop,所以无需在Ubuntu 22.04.3 LTS安装docker,只需要保证docker-desktop在后台运行即可
    • 进入安装好的Ubuntu 22.04.3 LTS,使用以下命令在WSL中检验当前安装的docker-desktop是否可以调用GPU,,如果调用不了,尝试更新docker-desktop版本至v4.34.2及以上,或查看文档寻找解决方案,也可利用后记中的联系方式与我取得联系,我会尽力帮助解决问题。
# 检验nvidia驱动是否正常,这里右上角输出的CUDA Version必须大于等于11.3
nvidia-smi
# 检验docker是否可以调用GPU
docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
- 正常输出应该有你的显卡型号,如下图输出 RTX 4060 Laptop GPU

项目下载

# https
git clone https://github.com/dancing-ui/uestc_vhm.git
# or ssh
git clone [email protected]:dancing-ui/uestc_vhm.git

环境配置

  • 构建镜像:使用以下命令构建docker镜像,该镜像占硬盘空间大约15GB,请确保硬盘空间足够。
# docker开发环境配置
cd /home/xy/work/uestc_vhm/docker/Dockerfile
docker build -t uestc_vhm:v0 .
docker run --gpus all -it --name uestc_vhm -v /home/xy/work/uestc_vhm:/workspace -d uestc_vhm:v0
  • 打开容器:使用VSCode的docker插件,进入docker容器中进行开发,VSCode环境配置见链接,只需要看插件配置那里,把插件安装上即可。

  • zsh配置:初次进入容器,会进入zsh配置界面,无需惊慌,按照屏幕提示选择即可。

  • 检验TensorRT是否正常

cd /usr/local/TensorRT-8.6.1.6/samples/sampleOnnxMNIST
make -j20
cd ../../bin
./sample_onnx_mnist
- 正常截图如下图,有PASSED TensorRT.sample_onnx_mnist输出

模型配置

  • 本项目所使用模型均通过官方仓库本地编译得来,且由于本项目使用了git lfs来管理模型文件、视频文件和第三方库文件,因此初期阶段(若更换TensorRT版本,需要重新生成模型,模型生成教程)无需在其他地方下载模型文件和测试视频,用仓库中现成的就行。
    • 模型文件存放在model_file目录下,视频文件在test_video目录下。
  • 可以通过修改src/etc/uestc_vhm_cfg.json配置文件的路径来自定义配置(流媒体配置、模型配置)。

第三方库编译

  • 本项目使用了fast-reid、cnpy第三方库,如果仓库里的库文件无法使用,需要在容器中重新编译一下,替换仓库中的原始库文件。
    • fast-reid、cnpy本地编译教程:链接

项目编译

  • 提供两种编译方式,一种是用VSCode的.vscode配置文件,一种是使用脚本文件。
# 脚本文件编译
cd /workspace
chmod +x ./local_build.sh
./local_build.sh

程序运行

  • 使用以下命令启动程序
cd /workspace/build/src
./uestc_vhm --config=/workspace/src/etc/uestc_vhm_cfg.json

程序退出

共有2种方式退出程序

  1. 使用ctrl+c退出uestc_vhm程序
  2. 使用 kill -2 uestc_vhm_pid 命令退出uestc_vhm程序,如下命令:
ps -e|grep uestc_vhm|awk '{print $1}'|xargs kill -2

程序资源占用

参考资料

后记

  • 有任何问题都可以联系我,欢迎提issues和pr
  • 联系方式:
  • 如果该项目有帮助到您,请点一下右上角的小星星,感谢您的支持 :)
Badges
Extracted from project README
Cuda GitHub stars