yolov8实战第五天 您所在的位置:网站首页 ffmpeg分割实时视频 yolov8实战第五天

yolov8实战第五天

2024-05-08 21:38| 来源: 网络整理| 查看: 265

本文主要是介绍yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

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

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

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

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

这篇关于yolov8实战第五天——yolov8+ffmpeg实时视频流检测并进行实时推流——(推流,保姆教学)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有