yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学)

news2024/11/16 0:08:23

yolov8实战第一天——yolov8部署并训练自己的数据集(保姆式教程)_yolov8训练自己的数据集-CSDN博客

yolov8实战第三天——yolov8TensorRT部署(python推理)(保姆教学)-CSDN博客

今天,我们继续yolov8的实战,实时视频流检测,可以将本地视频或视频流,进行yolov8检测后的结果,推成rtsp流,可以实时看到检测结果。

YOLOv8是YOLO目标检测算法的一个变种。它在YOLOv4的基础上进行了一些改进,如使用更大的图像尺寸、更深的网络结构、更多的训练数据等,从而获得更好的检测精度和更快的检测速度。

实时视频流目标检测是一种非常有用的应用场景。例如,在视频监控系统中,我们需要对视频流进行实时分析和检测,以便及时发现异常事件和行为。另外,实时视频流目标检测也可以用于自动驾驶、无人机等领域。

要将YOLOv8和FFmpeg结合起来进行实时视频流目标检测,通常的做法是使用FFmpeg将视频流转换为图像帧,并将这些图像帧输入到YOLOv8模型中进行目标检测。具体步骤如下:

  1. 定义视频流地址,并使用FFmpeg启动一个进程来读取视频流,并将其转换为图像帧。
  2. 加载YOLOv8模型,并设置相关参数,如输入图像尺寸、阈值等。
  3. 循环读取每一帧图像,并将其输入到YOLOv8模型中进行目标检测。
  4. 处理检测结果,如筛选出置信度高的检测框、绘制边界框等。
  5. 可以将处理后的图像帧保存到视频文件中,也可以直接在屏幕上显示图像帧(使用OpenCV等库)。

实施这个项目的意义在于,它可以帮助我们快速地对实时视频流进行目标检测,并及时发现异常事件和行为。这对于一些需要实时监控和分析的领域非常有用,如安防、交通、医疗等。另外,这个项目也可以为自动驾驶、无人机等领域的研究提供基础支持。

一、下载ffmpeg

下载 FFmpeg

E:\2345Downloads\ffmpeg-2023-12-18-git-be8a4f80b9-essentials_build\bin

ffmpeg -version

 二、(可选)搭建EasyDarwin开源流媒体服务器

第二章和第三章二选一 。

测试:

新建一个 demo.bat 的文件,添加内容为:ffmpeg -f gdigrab -i desktop -vcodec mpeg4 -acodec libmp3ame -r 30 -vf scale=1028*720 -f rtsp rtsp://localhost:554/desktopVideo

 http://localhost:10008

 vlc打开:

rtsp://localhost:554/desktopVideo

在cmd中运行 ffplay rtsp://localhost/desktopVideo 进行拉流。 

本地视频推流:

E:\yolov8>ffmpeg -re -i "E:/yolov8/视频/test.mp4" -rtsp_transport udp -vcodec h264 -f rtsp rtsp://localhost/testPushStream

开始推流 

访问: 

http://localhost:10008/

 

vlc打开:

rtsp://localhost:554/testPushStream

命令行推流完成。

三、(可选)Nginx搭建rtmp流媒体服务器

windows版nginx下载地址:Index of /download/

在conf文件夹下复制一份nginx-win.conf,命名为mynginx.conf

修改配置文件:mynginx.conf

改一下默认的http服务器端口,默认的是80端口,我改成了10080:

在本配置文件末尾添加rtmp的配置:

rtmp {
    server {
        listen 1935;#监听端口,若被占用,可以更改
        chunk_size 4096;#上传flv文件块儿的大小
        application live { #创建一个叫live的应用
             live on;#开启live的应用
             allow publish 127.0.0.1;
             allow play all;
        }
    }
}

这个配置完之后,推流地址就是:

rtmp://127.0.0.1:1935/live/xxxxxx

,其中xxxxxx可自定义名称。

1.使用命令行启动nginx:

nginx.exe -c conf/mynginx.conf

2. 使用ffmpeg推流:

ffmpeg.exe -re -i test.mp4 -vcodec libx264 -acodec aac -f flv rtmp://127.0.0.1:1935/live/stream

3.ffmpeg拉流 

ffplay.exe rtmp://127.0.0.1:1935/live/stream

如果需要停止nginx服务器,直接杀进程就可以:

四、yolov8推理代码推流

我这个代码使用的是nginx流媒体服务器。

1.先将服务打开:

2.运行检测推流代码: 

import cv2
import subprocess
from ultralytics import YOLO

# 载入 YOLOv8 模型
model = YOLO('model/yolov8n.pt')

# 获取视频内容
cap = cv2.VideoCapture("视频/test.mp4")

# 获取原视频的宽度和高度
original_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
original_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))

# 设置 FFmpeg 子进程,用于推流
rtmp_url = 'rtmp://127.0.0.1:1935/live/stream'  # 修改为您的 NGINX RTMP 服务器地址
command = ['ffmpeg',
           '-y',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', "{}x{}".format(original_width, original_height),
           '-r', str(fps),
           '-i', '-',
           '-c:v', 'libx264',
           '-pix_fmt', 'yuv420p',
           '-preset', 'ultrafast',
           '-f', 'flv',
           rtmp_url]

# 启动 FFmpeg 进程
proc = subprocess.Popen(command, stdin=subprocess.PIPE)

# 循环遍历视频帧
while cap.isOpened():
    # 从视频中读取一帧
    success, frame = cap.read()

    if success:
        # 对帧运行 YOLOv8 推理
        results = model(frame)

        # 在帧上可视化结果
        annotated_frame = results[0].plot()

        # 将处理后的帧写入 FFmpeg 进程
        proc.stdin.write(annotated_frame.tobytes())

        # 显示带有标注的帧
        cv2.imshow("YOLOv8 推理", annotated_frame)

        # 如果按下 'q' 键,则中断循环
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        break

# 释放视频捕获对象
cap.release()

# 关闭 FFmpeg 进程
proc.stdin.close()
proc.wait()

# 关闭显示窗口
cv2.destroyAllWindows()

3.vlc 打开:

rtmp://127.0.0.1:1935/live/stream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1368814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

‘pip‘ 不是内部或外部命令、ImportError: cannot import name ‘SCHEME_KEYS‘

错误一:启动程序中出现致命错误:无法使用“f:\pythonv\scripts\python.exe” G:\pythonv\scripts\ pip.exe” 错误二:‘pip‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。 错误三:ImportError: cannot import name SCH…

九州金榜|孩子厌学,不是不想学,而是学不会

不是我不想学,而是我不会学,很多孩子这学习过程中是不是有这种感想,家长也是看孩子非常努力,但是效果却不尽如人意,时间长了,得不到有效的结果,孩子就此产生厌学情绪,这一类孩子原因…

非常好用的三款图片模糊变清晰的软件

在数字时代,照片的清晰度对于呈现高质量的视觉效果至关重要。然而,由于各种原因,我们有时会遇到模糊的照片。这时候,使用适当的软件来提高照片的清晰度就显得尤为重要。本文将介绍一些可以使模糊照片变清晰的软件,帮助…

Windows内存管理(二):内存架构 浅谈一二

《Windows内存管理(一):Windows性能监视器(PerfMon)》 Windows内存管理是一个复杂的主题,涉及多个层次和组件。以下是一个分层的概述。 1、虚拟内存管理 Windows使用虚拟内存来给每个进程提供一个看似连续的内存空间&#xff0c…

20个城市公交线路数据分享,Shp+excel格式,2020年,城市发展、公共设施规划必备数据,已实现数据可视化

随着城市交通的不断发展,公交线路已经成为人们出行的重要方式之一。 公交线路数据和公交站点数据是GIS系统中的重要数据集之一。公交线路数据包括公交车辆行驶的路径和站点之间的连接信息,今天分享的就是部分城市的公交线路数据,始发站、终点…

Spring MVC(day1)

什么是MVC MVC是一种设计模式,将软件按照模型、视图、控制器来划分: M:Model,模型层,指工程中的JavaBean,作用是处理数据 JavaBean分为两类: 一类称为数据承载Bean:专门存储业务数据…

无法自动装配。找不到 ‘RabbitTemplate‘ 类型的 Bean

解决方案&#xff1a;把这个项目的spring-rabbit依赖的<scope>test</scope>删除并重新加载maven

WPF 基础入门(资源字典)

资源字典 每个Resources属性存储着一个资源字典集合。如果希望在多个项目之间共享资源的话&#xff0c;就可以创建一个资源字典。资源字段是一个简单的XAML文档&#xff0c;该文档就是用于存储资源的&#xff0c;可以通过右键项目->添加资源字典的方式来添加一个资源字典文件…

Python基础(二十二、自定义模块和包)

文章目录 一、自定义模块1.如何自定义模块并导入?2.__main__变量的功能3.注意事项 二、自定义包1.什么是Python的包?2.__init __.py文件的作用?3.__all__变量的作用?4.示例 三、自定义模块和自定义包的好处 一、自定义模块 1.如何自定义模块并导入? 在Python代码文件中正…

不通过微软商店进行安装 UWP 软件

参考&#xff1a; 不通过微软商店下载安装uwp应用_uwp应用只能去商店下载吗-CSDN博客离线下载和安装UWP(windows应用商店)软件 - 赵青青 - 博客园UWP程序安装正确步骤(例:华硕奥创安装错误200) - 哔哩哔哩 1 前往线上商店&#xff0c;搜索想要安装的应用。 以安装 Microsoft…

sonarqube配置本地扫描代码

一、本地maven设置setting文件&#xff1a; 1&#xff09;添加pluginGroup <pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups> 2&#xff09;添加profile&#xff1a; <profile><id>sonar</i…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

C#,快速排序算法(Quick Sort)的非递归实现与数据可视化

排序算法是编程的基础。 常见的四种排序算法是&#xff1a;简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显&#xff0c;一般使用递归方式实现&#xff0c;但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。 快速排序(Quick Sor…

基于ssm的常见小儿疾病中医护理系统的设计+jsp论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本小儿疾病中医护理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

揭秘加密货币周期:如何通过顶级代币指标洞察市场变化

作者&#xff1a;stellafootprint.network 加密生态领域如大海般波涛汹涌&#xff0c;如何在这片海域中稳稳航行&#xff1f;关键在于把握市场周期的脉搏。顶级代币的几个核心指标&#xff0c;正是我们窥探市场周期的窗口。 领先的区块链分析平台跟踪的关键代币指标包括&…

开关电源损耗测量之高压空载测试方法 -纳米软件

开关电源在实际使用过程中会产生损耗&#xff0c;损耗过大会直接影响到开关电源的转换效率和性能&#xff0c;从而导致设备无法正常运行。因此测试开关电源的损耗情况也是非常重要的步骤。 高压空载运行测试用来检测开关电源的损耗情况&#xff0c;在空载情况下&#xff0c;带软…

wps word粘贴excel文件直接打开

第一步 创建空白Word文档 第二步 见下图 插入--对象 然后 选择 来自文件 就这么简单 看到了吗 插进来了

kubernetes RBAC Authentication 详解

开头语 写在前面&#xff1a;如有问题&#xff0c;以你为准&#xff0c; 目前24年应届生&#xff0c;各位大佬轻喷&#xff0c;部分资料与图片来自网络 内容较长&#xff0c;页面右上角目录方便跳转 Kubernetes 安全架构 K8S安全控制框架主要由下面3个阶段进行控制&#xf…

NVIDIA Container Toolkit(NVIDIA Docker)

引言 Nvidia Docker该项目已被NVIDIA Container Toolkit取代。此存储库提供的工具已被弃用&#xff0c;并且该存储库已存档。 nvidia-docker不再支持包装器&#xff0c;并且 NVIDIA Container Toolkit 已进行扩展&#xff0c;允许用户配置 Docker 以使用 NVIDIA Container Ru…

Gravatar头像服务器镜像站搭建

前言 Gravatar是Globally Recognized Avatar的缩写&#xff0c;是gravatar推出的一项服务&#xff0c;意为“全球通用头像”。如果在Gravatar的服务器上放置了你自己的头像&#xff0c;那么在任何支持Gravatar的blog或者留言本上留言时&#xff0c;只要提供你与这个头像关联的…