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

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

3.vlc 打开:

rtmp://127.0.0.1:1935/live/stream

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

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

相关文章

前端面试题集合四(html)

HTML 面试知识点总结 本部分主要是笔者在复习 HTML 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出! 目录 1. DOCTYPE 的作用是什么?2. 标准模式与兼容模式各有什么区别?3. HTML5 为什么只需要写…

[DM8] 达梦8配置兼容Oracle

查看版本信息 select *,id_code from v$version; 查询解释: DM Database Server 64 V8 1-1-190-21.03.12-136419-ENT 64 版本位数标识,64表示为64位版本,无64则表示为32位版本 V8 大版本号,目前主要是V7、V8 1-1-190…

.NET 6中如何使用Redis

1、安装redis Redis在windows平台上不受官方支持,所以想要在window安装Redis就必须去下载windows提供的安装包。安装地址:https://github.com/tporadowski/redis/releases 2、在NueGet安装包 3、在appsettings.json文件里面添加Redis相关配置信息 &quo…

网页内容任君采撷-右键无法复制

CSDN一年一度的博客之星评选活动已经结束,刚好点击来看看学习一下大佬们的博客。 发现绝大部分的博主对于知识的公开度都是非常高的,当然除了收费的专栏外。 其中少部分博主对自己的博文设定了一定的操作,无法直接使用博文中的内容。 现在大…

nuxt 不解析HTML结构bug

记录一个本人Vue3迁移Nuxt3的报错 报错信息 [Vue warn]: Failed to resolve directive: top [nitro] [unhandledRejection] TypeError: Cannot read properties of undefined (reading ‘getSSRProps’) 原因是Vue3在迁移到nuxt3的时候有一个自定义指令没有搬过来&#xff0…

掌握Lazada API接口:开启电商开发新篇章,引领业务增长潮流

一、概述 Lazada API接口是Lazada平台提供的软件开发工具包,它允许第三方开发者通过编程方式访问Lazada平台上的商品、订单、用户等数据,并执行相关操作。通过使用Lazada API接口,开发者可以快速构建与Lazada平台集成的应用程序,…

10亿数据高效插入MySQL最佳方案

写在文章开头 你好,我叫sharkchili,目前还是在一线奋斗的Java开发,经历过很多有意思的项目,也写过很多有意思的文章,是CSDN Java领域的博客专家,也是Java Guide的维护者之一,非常欢迎你关注我的…

烟雾识别摄像机

烟雾识别摄像机是一种具有智能识别功能的监控设备,它能够通过图像识别技术检测和识别烟雾,提供实时监测和报警功能。这种摄像机通常应用于各种场所,如工厂、仓库、办公楼、酒店等,起到了重要的安全监测作用。 烟雾识别摄像机的工作…

使用Trie数据结构实现搜索自动完成功能

本文旨在讨论使用 Java 的搜索自动完成的低级实现&#xff0c;将Trie在用例中使用数据结构。 这是一个示例TrieNode类&#xff1a; class TrieNode{ Map<Character,TrieNode> children; boolean isEndOfWord; TrieNode(){ children new HashMap<>(); isEndOfWor…

Making Large Language Models Perform Better in Knowledge Graph Completion

Making Large Language Models Perform Better in Knowledge Graph Completion 基本信息 博客贡献人 鲁智深 作者 Yichi Zhang, Zhuo Chen, Wen Zhang, Huajun Chen 隶属于浙江大学计算机学院和软件学院 摘要 本文主要探讨了如何将有用的知识图谱结构信息融入大语言模型中…

精进单元测试技能——Pytest断言的艺术

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中&#xff0c;断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等&#xff0c;例如&#xf…

java Servlet体育馆运营管理系统myeclipse开发mysql数据库网页mvc模式java编程计算机网页设计

一、源码特点 JSP 体育馆运营管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统采用serlvetdaobean&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。 java Servlet体育馆运营管理系…