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

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等库)。

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

一、下载ffmpg

下载 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"):breakelse:break# 释放视频捕获对象
cap.release()# 关闭 FFmpeg 进程
proc.stdin.close()
proc.wait()# 关闭显示窗口
cv2.destroyAllWindows()

3.vlc 打开:

rtmp://127.0.0.1:1935/live/stream

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

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

相关文章

Java TBA访问NetSuite Restlet时的403错误

本周有同学问为啥Java访问NetSuite Restlet时,按照知识会之前的文章分享,会一直报403 INVALID_LOGIN_ATTEMPT错误。 https://nk-community.blog.csdn.net/article/details/131399801https://nk-community.blog.csdn.net/article/details/131399801原因是…

线程同步之:QReadWriteLock

1、 使用互斥量QMutex时候存在一个问题 每次只能有一个线程获得互斥量的权限。如果在一个程序中有多个线程“读”取某个变量,使用互斥量时也必须排队! 然而,实际情况是允许:让多个线程同时“读”! 这样互斥量 就会降…

面试官:说说flexbox(弹性盒flex布局),以及适用场景?

面试官:说说flexbox(弹性盒布局模型),以及适用场景? 一、是什么 Flexible Box 简称 flex,意为”弹性布局”,可以简便、完整、响应式地实现各种页面布局 采用Flex布局的元素,称为flex容器conta…

面试官:线程池的7种创建方式,你都清楚吗?

文章目录 前言1. 固定数量的线程池a. 线程池返回结果b. ⾃定义线程池名称或优先级 2. 带缓存的线程池3. 执⾏定时任务a. 延迟执行(一次)b. 固定频率执行c. scheduleAtFixedRate VS scheduleWithFixedDelay 4. 定时任务单线程5. 单线程线程池6. 根据当前CPU⽣成线程池 前言 线程…

CRM管理系统八大特性,如何帮助企业提升业务效能?

CRM管理系统的使用率逐年上升,这离不开企业对客户的依赖——管理好客户关系是企业发展你的重要因素,由此可见CRM对于任何成长中的企业都是必不可少的。以前我们写过很多关于CRM功能的文章,这篇文章换个思路,想一想CRM管理系统主要…

Pytorch从零开始实战15

Pytorch从零开始实战——ResNeXt-50算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNeXt-50算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…

Unity中Shader序列图动画(UV流动的通用起始点)

文章目录 前言一、一般序列帧动画是按照序列图如下顺序读取的二、在Shader找到UV流动的起始点1、先实现纹理采样2、得到 uv 走格的单位格子大小3、定位到左上角为起始单位格 三、使UV流动的起始点通用化1、在属性面板接收 行 和 列的属性2、看图片可以总结出第一个单元格的公式…

Kotlin/JS工程构建及编译运行到浏览器

概述 Kotlin/JS 提供了转换 Kotlin 代码、Kotlin 标准库的能力,并且兼容 JavaScript 的任何依赖项。Kotlin/JS 的当前实现以 ES5 为目标。 使用 Kotlin/JS 的推荐方法是通过 kotlin.multiplatform Gradle 插件。它提供了一种集中且便捷的方式来设置与控制以 JavaS…

华为DriveONE电机控制器拆解实拍

如果说之前的问界M5、M7,华为让我们看到其在智能化上确实拥有遥遥领先的能力,那么在智界S7上,则让我们看到华为在动力、底盘这些硬件执行层面,竟然也有不输给很多车企的实力。1、华为电驱,全球第一?在智界S…

8K超高清应用:输电线网智慧巡检提升巡视效率

电力安全关系国计民生,是国家安全的重要保障,因此确保电力线路系统的安全运行至关重要。电力线路系统整体分为三大板块:输电线路、变电站和配电线路。然而,由于自然灾害、人为破坏等因素影响,这三大板块的设备很容易发…

开启Hyper-V

开启Hyper-V 为了给windows-ltsc激活,只好给系统装个虚拟机服务器。VMware太大了,于是想起Hyper-V。 走起。 在搜索栏直接搜索“windows功能”就能找到“开启或关闭windows功能”,直接勾选Hyper-V,就能安装了。重启后,…

不同阶数的巴特沃斯低通滤波器的空间域表示——数字图像处理

原理 巴特沃斯低通滤波器(Butterworth Low-Pass Filter)在频率域中的定义是明确的,但它在空间域中的表示不是直观的。这是因为巴特沃斯滤波器的形式是基于频率的,并且其空间域表示涉及到一个复杂的逆傅里叶变换,该变换…

透明展示柜的安装方法

透明展示柜的安装方法主要包括以下步骤: 准备工具和材料:在安装前,需要准备相应的工具和材料,如螺丝刀、电钻、固定架、玻璃板、胶水等。 确定安装位置:选择一个合适的安装位置,确保展示柜的摆放位置合理&…

关于“Python”的核心知识点整理大全62

目录 20.2.2 安装 Heroku Toolbelt 20.2.3 安装必要的包 注意 20.2.4 创建包含包列表的文件 requirements.txt requirements.txt requirements.txt 注意 20.2.5 指定 Python 版本 runtime.txt 注意 20.2.6 为部署到 Herohu 而修改 settings.py settings.py 20.2.7…

SparkStreaming基础解析(四)

1、 Spark Streaming概述 1.1 Spark Streaming是什么 Spark Streaming用于流式数据的处理。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据输入后可以用Spark的高度抽象原语如:map、…

鸿蒙南向开发—OpenHarmony技术编译构建框架

概述 OpenHarmony编译子系统是以GN和Ninja构建为基座,对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能扩展的系统,该系统提供以下基本功能: 以部件为最小粒度拼装产品和独立编译。支持轻量、小型、标准三种系…

竞赛保研 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来,疫情牵动着全国人民的心,一线医护工作者在最前线抗击疫情的同时,我们也可以看到很多科技行业和人工智能领域的从业者,也在贡献着他们的力量。近些天来,旷视、商汤、海康、百度都多家科技公司研…

思科常用图标大全Cisco产品图标库Icon(附PPT下载)

华为企业网络常用图标大全(附PPT下载)-CSDN博客文章浏览阅读2.8k次。PPT完整版获取交换机&WLAN服务器网络&网管建筑公共终端end_华为企业网络常用图标大全https://blog.csdn.net/XMWS_IT/article/details/120864637?ops_request_misc%257B%2522…

OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice

Updates on Function Calling were a major highlight at OpenAI DevDay. In another world,原来的function call都不再正常工作了,必须全部重写。 function和function call全部由tool和tool_choice取代。2023年11月之前关于function call的代码都准备翘翘。 干嘛…

【Java EE初阶八】多线程案例(计时器模型)

1. java标准库的计时器 1.1 关于计时器 计时器类似闹钟,有定时的功能,其主要是到时间就会执行某一操作,即可以指定时间,去执行某一逻辑(某一代码)。 1.2 计时器的简单介绍 在java标准库中,提供…