YOLOv5在线识别安全帽(rtsp流)

内容分享2个月前发布
0 0 0

本项目在YOLOv5算法上加以改进,通过独立线程处理拉流、推流、模型推理实现实时预览识别安全帽。在项目中需要用到视频播放,需要搭建一个流媒体服务器,做视频点播 直播包括视频服务器的负载,所以开始自己探索搭建视频流媒体服务器,用于存储和传输视频资源

整体流程思路:

        海康威视rtsp直播流→OpenCV拉取流→YOLOv5推理识别安全帽→ffmpeg推流→EasyDarwin流媒体服务器→vlc实时播放

一、EasyDarwin下载安装

下载:EasyDarwin流媒体音视频资源汇总

我这里使用的是win版本的EasyDarwin流媒体服务器

双击start.bat

YOLOv5在线识别安全帽(rtsp流)

运行成功自动跳转:http://127.0.0.1:10086/#/login

YOLOv5在线识别安全帽(rtsp流)

用户名:admin

密码:admin

进入之后看一下自己的rtsp端口,可以在下图中修改

YOLOv5在线识别安全帽(rtsp流)

二、YOLOv5项目

具体YOLOv5项目数据集、训练模型已经在前边的文章介绍过了,文章链接地址

三、下载安装FFmpeg

1、进入官网Download FFmpeg

2、根据自己的电脑选择对应系统进行点击。我用到的是windows,选择下面出现的“Windows builds from gyan.dev”

YOLOv5在线识别安全帽(rtsp流)

3、下载完成压缩文件之后,解压文件。

4、将bin文件夹添加到Windows环境路径变量中,在搜索栏中搜索环境变量,然后单击环境变量。

5、找到自己的安装路径下的bin的路径进行新建

YOLOv5在线识别安全帽(rtsp流)

6、验证是否安装成功,打开命令提示符cmd窗口输入命令,如果你看到打印出 FFmpeg 版本,则表示 FFmpeg 安装成功。

YOLOv5在线识别安全帽(rtsp流)

四、项目实现

查看自己设备rtsp流地址,一般设备都有开发文档,我使用的是海康威视sadp,直接访问海康威视官网找设备开发文档。rtsp流地址:

rtsp://用户名:密码@ip:端口号/h264/ch1/main/av_stream

参数代码如下:



def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='模型文件地址',
                        help='模型路径')
    parser.add_argument('--source', type=str, default='rtsp流地址',
                        help='输入流地址')
    # RTSP推流参数
    parser.add_argument('--output-rtsp', type=str, default='rtsp://localhost:25544/output', help='RTSP输出地址')
    parser.add_argument('--rtsp-fps', type=float, default=10, help='RTSP输出帧率(默认10FPS)')
    parser.add_argument('--rtsp-codec', type=str, default='libx264', help='RTSP编码(如libx264)')
    parser.add_argument('--rtsp-preset', type=str, default='ultrafast', help='编码速度预设')
    # 推理参数
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='推理分辨率')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='置信度阈值')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS阈值')
    parser.add_argument('--max-det', type=int, default=1000, help='单帧最大检测数')
    parser.add_argument('--device', default='cpu', help='设备(0=GPU/cpu)')
    # 结果保存
    parser.add_argument('--view-img', action='store_true', default=False, help='显示预览(默认关闭)')
    parser.add_argument('--save-txt', action='store_true', help='保存标签文件')
    parser.add_argument('--save-conf', action='store_true', help='标签包含置信度')
    parser.add_argument('--save-crop', action='store_true', help='保存裁剪检测框')
    parser.add_argument('--nosave', action='store_true', help='不保存结果(默认保存H264)')
    # 其他参数
    parser.add_argument('--classes', nargs='+', type=int, help='过滤类别(如--classes 0)')
    parser.add_argument('--agnostic-nms', action='store_true', help='类别无关NMS')
    parser.add_argument('--augment', action='store_true', help='增强推理')
    parser.add_argument('--visualize', action='store_true', help='可视化特征')
    parser.add_argument('--update', action='store_true', help='更新模型')
    parser.add_argument('--project', default='runs/detect', help='结果保存根目录')
    parser.add_argument('--name', default='epoch_300_', help='结果子目录名')
    parser.add_argument('--exist-ok', action='store_true', help='允许覆盖现有目录')
    parser.add_argument('--line-thickness', default=3, type=int, help='框线厚度')
    parser.add_argument('--hide-labels', default=False, action='store_true', help='隐藏标签')
    parser.add_argument('--hide-conf', default=False, action='store_true', help='隐藏置信度')
    parser.add_argument('--half', action='store_true', help='半精度推理')
    parser.add_argument('--dnn', action='store_true', help='ONNX用DNN推理')
 
    opt = parser.parse_args()
    opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # 扩展分辨率(如[640]→[640,640])
    print_args(FILE.stem, opt)
    return opt

如有需要详细代码,关注私信博主白嫖

© 版权声明

相关文章

暂无评论

none
暂无评论...