# video_detection
**Repository Path**: nyuanye/video_detection
## Basic Information
- **Project Name**: video_detection
- **Description**: 软件集成:解码、回调、检测、通信模块;
软件目的:是通过配置文件方便切换解码、检测、通信的随意组和,以适配不同情况的使用。
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2023-02-10
- **Last Updated**: 2025-05-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# video_detection
#### 通过配置参数实现不同算法,封装的算法有:yolo系列检测、分割、关键点、DepthAnything单目深度估计,结果展示:
#### 介绍
软件集成:解码、回调、检测、通信模块
软件目的:是通过配置文件方便切换解码、检测、通信的随意组和,以适配不同情况的使用。
#### 软件架构
```
1、海康sdk解码、海康sdk Capture图片、ffmpeg cpu解码 三种方式获取RTSP视频流图像,可以通过配置拉取多路视频;
2、支持opencv读取视频文件、usb摄像头、文件夹三种方式获取本地图像;
3、通过std::bind std::std::function 实现函数回调,在类之间完成图片数据传递;及多线程处理
4、封装FY版本、WX版本 yolo系列;封装yolo检测、分割、关键点,DepthAnything单目深度估计
```
#### 后续规划
```
1、如何设计软件架构方便模块间切换;设计参数类、回调类;
2、检测:可以添加其他检测:如人脸检测、分割、OCR等;目标跟踪、关键点等
3、解码:可以添加硬解码相关操作;
```
#### 安装教程
##### 参考记录
```
DepthAnything单目深度估计: https://github.com/LiheYoung/Depth-Anything
FeiYull版本:https://github.com/FeiYull/TensorRT-Alpha
wang-xinyu版本 https://github.com/wang-xinyu
FY版本通过ONNX到 tensorRT 的c++封装好,可以直接在类里面使用;测试其速度在 8-10ms(F32 yolov5s 3080ti 960*720)
WX版本直接调用 tensorRT 的API的c++封装差,不能封装到c++的类里面;测试其速度在 5ms(F32 yolov5s 3080ti 960*720)
FY版本的代码可以实现yolov4-yolov8的全部转换部署
WX版本yolov4-yolov7版本及分割
FY版本在转换yolov5.6.0 时需要使用 alpha_edit.py 转换
python alpha_edit.py --mode=p5 --net_name=yolov5s --model_path=../data/yolov5/yolov5s.onnx
yolo export --model=yolov8s-seg.pt --format=onnx opset=12
yolo export --model=yolov8s-pose.pt --format=onnx opset=12
yolo export --model=YoloV8m_5_class.pt --format=onnx opset=12
yolo export --model=best.pt --format=onnx opset=12
conda activate yolov8
python ./export.py --weights './yolov5s.pt' --img 640 --batch 1 --include onnx
python ./export.py --weights './yolov5s-seg.pt' --img 640 --batch 1 --include onnx
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=yolov5s-seg.onnx --saveEngine=yolov5s-seg.trt
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=yolov8s-seg.onnx --saveEngine=yolov8s-seg.trt
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=bestnyy.onnx --saveEngine=bestnyy.trt
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=best240223.onnx --saveEngine=best240223.trt
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=best.onnx --saveEngine=best.trt --buildOnly --minShapes=images:1x3x640x640 --optShapes=images:2x3x640x640 --maxShapes=images:4x3x640x640
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=best.onnx --saveEngine=best.trt --buildOnly --optShapes=images:2x3x640x640
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=best.onnx --saveEngine=best.trt --buildOnly --avgRuns=12 --dumpRefit --plugins
/dev/shm/TensorRT-8.6.1.6/targets/x86_64-linux-gnu/bin/trtexec --onnx=yolov8s-pose.onnx --saveEngine=yolov8s-pose.trt --fp16
```
##### FFmpeg 安装
```
支持ffmpeg4.3和ffmpeg4.4
apt update && apt install
apt-get install build-essential
apt-get install libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
sudo apt-get install yasm
sudo apt-get install nasm
wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.xz
xz -d ffmpeg-4.3.1.tar.xz
tar xvf ffmpeg-4.3.1.tar
cd ffmpeg-4.3.1
./configure --enable-swscale --enable-swresample --enable-gpl --enable-shared
./configure --prefix=/dev/shm/ffmpeg4.4_bin --enable-swscale --enable-swresample --enable-gpl --enable-shared
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-shared --enable-pthreads --enable-indev=alsa --enable-outdev=alsa
make -j6
make install
export LD_LIBRARY_PATH=/dev/shm/ffmpeg4.4_bin:$LD_LIBRARY_PATH
```
#### 代码问题记录
##### log4cpp的 logger.h 与trensorRT的 logger.h 冲突问题
```
显现:expected unqualified-id before 'while' 错误
解决:通过引用头文件时#"../log4cplus/mylogger.h" 在引用tersorrt后面;
#include "ProApplyYolov8.h"
#include "../log4cplus/mylogger.h"
```
##### 函数回调 问题1
```
现象: terminate called after throwing an instance of 'std::bad_function_call'
what(): bad_function_call 错误
原因:异常std::bad_function_call在调用空的函数对象(std::function)时抛出。空的函数对象一般情况是未给函数对象赋值或赋值null。
解决:判断 m_callFun.operator bool() 为真即可
if(m_callFun.operator bool()){
m_callFun(m_recver,img, img_path, image_time, camid);
}else{
LOG_INFO("fs callable object not set, not callable");
}
```
##### 函数回调 问题2 -----传递this指针时错误 待解决
```
每次m_recver->m_sender = std::bind(&ProcessApply::self, this);
时当触发速度快 会出现错误
现在屏蔽以下代码解决;
m_recver->m_sender = std::bind(&ProcessApply::self, this);
m_callFun(m_recver,img, img_path, image_time, camid);
m_recver->m_sender = NULL;
```
#### vscode快捷键
```
Ctrl+upper+t 方法添加注释
Ctrl+upper+i cpp添加注释
Ctrl+k+j 打开所有折叠
Ctrl+k+o 关闭所有折叠
git reset HEAD 后面什么都不跟的,就是上一次add 里面的内容全部撤销
git reset HEAD XXX 后面跟文件名,就是对某个文件进行撤销
```
#### git记录
```
git reset HEAD 后面什么都不跟的,就是上一次add 里面的内容全部撤销
git reset HEAD XXX 后面跟文件名,就是对某个文件进行撤销
git reset --hard
```