1 Star 1 Fork 0

nyy / video_detection

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
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

空文件

简介

软件集成:解码、回调、检测、通信模块; 软件目的:是通过配置文件方便切换解码、检测、通信的随意组和,以适配不同情况的使用。 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/nyuanye/video_detection.git
git@gitee.com:nyuanye/video_detection.git
nyuanye
video_detection
video_detection
master

搜索帮助