ffmpeg tensorrt c++多拉流硬解码yolov5 yolov7 bytetrack 人流追踪统计 硬件编码推流直播

ffmpeg拉流硬解码yolov5 bytetrack 人流追踪统计 硬件编码推流直播
编程语言C++,所以环境搭建可能比较复杂,需要有耐心。

我的机器配置

CPU:I5 12490F
GPU:RTX2060 6GB
RAM:16x2 GB双通道
我测试运行可以25路(很极限了),20路比较稳,不会爆显存。
多路编码推流有个问题,就是NVIDIA对消费级显卡编码有限制一般是3路吧,但是这个可以破解的,很简单。照着readme做就好了。
https://github.com/keylase/nvidia-patch

效果

榨干显卡
在这里插入图片描述
如果不推流的话3080TI可以跑60路。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

环境变量大家参考一下

在这里插入图片描述
PS:cuda\bin 是cudnn的目录。

重要的事情说三遍

感谢杜老
感谢杜老
感谢杜老

一:整体架构:

(1) ffmpeg拉流RTSP,RTMP,硬解码,如果有nvidia显卡会根据流的编码格式选择对应的硬件解码器。
(2)推理框架使用的TensorRT8,所以第一次使用的时候,程序会building 模型,因为TensorRT的模型是一卡一模型的。
(3)ffmpeg推流,拿到推理和追踪之后的结果,opencv画框,然后丢给ffmpeg来找对应的编码器编码推流出去。
(4)Nginx服务器配置和flv.js插件。

二:所需的环境及对应库的版本

(1)系统Windows 11,显卡RTX 2060 6GB显存,驱动版本 471.11 cuda版本 11.4 ,VS2022(这里其实建议安装19,22的话nvidia的tenosrrt不支持22,所以到时候需要改一下nvidia对vs的版本判断,都是小问题)。PS:(先装vs再装cuda)
(2)
OpenCV 4.6.0(这个其实问题不大)
TensorRT 8.2.4 (这个很重要 自己看着来吧)
Protobuf 3.11.4 (严格一致)
eigen 3.4.0 (尽量一样)
ffmpeg 4.4 (最好保持一致。不要用5.0以上的API已经变了)

PS:其实Protobuf ,如果你装有Python的TensorFlow会自带Protobuf 的库,这个时候避免冲突你可以把Protobuf 3.11.4的库在环境变量里面提前一点

四:Nginx

代码目录压缩包解压运行即可。
推拉流的地址,但是这个地址不能用浏览器直接播放,可以用VLC media player,PotPlayer(这个更强大) 等软件验证框架是否搭建成功。
rtmp://你本机的IP:1936/live/home
这里说一下为什么用1936 本来rtmp默认是1935但是拉流也是rtmp使用1935,为避免端口堵塞,改用1936。
如果手头没有摄像头流的话 安卓手机可以下载一个APP IP摄像头可以来充当摄像头流测试

五:yolov5 6.0模型导出修改

line 55 forward function in yolov5/models/yolo.py

bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)

x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

modified into:

bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
bs = -1
ny = int(ny)
nx = int(nx)
x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

line 70 in yolov5/models/yolo.py

z.append(y.view(bs, -1, self.no))

modified into:

z.append(y.view(bs, self.na * ny * nx, self.no))

############# for yolov5-6.0 #####################

line 65 in yolov5/models/yolo.py

if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:

self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)

modified into:

if self.grid[i].shape[2:4] != x[i].shape[2:4] or self.onnx_dynamic:
self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)

disconnect for pytorch trace

anchor_grid = (self.anchors[i].clone() * self.stride[i]).view(1, -1, 1, 1, 2)

line 70 in yolov5/models/yolo.py

y[…, 2:4] = (y[…, 2:4] * 2) ** 2 * self.anchor_grid[i] # wh

modified into:

y[…, 2:4] = (y[…, 2:4] * 2) ** 2 * anchor_grid # wh

line 73 in yolov5/models/yolo.py

wh = (y[…, 2:4] * 2) ** 2 * self.anchor_grid[i] # wh

modified into:

wh = (y[…, 2:4] * 2) ** 2 * anchor_grid # wh
############# for yolov5-6.0 #####################

line 52 in yolov5/export.py

torch.onnx.export(dynamic_axes={‘images’: {0: ‘batch’, 2: ‘height’, 3: ‘width’}, # shape(1,3,640,640)

‘output’: {0: ‘batch’, 1: ‘anchors’} # shape(1,25200,85) 修改为

modified into:

torch.onnx.export(dynamic_axes={‘images’: {0: ‘batch’}, # shape(1,3,640,640)
‘output’: {0: ‘batch’} # shape(1,25200,85)

浏览器直接播放的插件:

https://github.com/bilibili/flv.js

引用中提到了一个C封装的FFmpeg拉取音视频接口类,可以通过回调方式获取数据,适用于VS2015开发环境。而引用中提到了一个基于FFmpeg硬解码yolov5 bytetr***硬解码的步骤,还提到了使用TensorRT进行理框架的选择,以及使用FFmpeg进行的过程,并提到了Nginx服务器配置和flv.js插件。 综合以上引用内容,可以了解到FFmpeg在C语言中实现了RTSP拉功能。所以,如果你想在C语言中使用FFmpeg进行RTSP拉,可以参考上述提到的C封装的FFmpeg接口类。具体步骤包括:引入相关库和头文件、创建FFmpeg上下文和输入、设置回调函数来获取音视频数据、循环读取音视频数据并进行处理等。具体的实现细节和代码示例可以参考引用中提到的C封装的FFmpeg拉取音视频接口类。 希望以上回答对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++封装FFMPEG拉取RTSP的音视频接口类](https://download.csdn.net/download/yxhua202/12890563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [ffmpeg tensorrt c++多拉硬解码yolov5 yolov7 bytetrack 人流追踪统计 硬件编码直播](https://blog.csdn.net/qq_43502221/article/details/126314662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大肥柴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值