YOLOv8摄像头实时目标检测搭建笔记

1.实现原理

  1. 搭建RTMP流媒体服务器
  2. 手机安装推流软件直播推送到流媒体服务器
  3. YOLOv8从RTMP服务器拉流获取,并实现实时目标检测

2.搭建SRS流媒体服务器

安装地址: Build | SRS (ossrs.net)

3.手机摄像头直播推流

下载app: 易推流

4.查看rtmp服务器

5.执行yolov8脚本程序

python 复制代码
import cv2
import subprocess
from ultralytics import YOLO

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

# 获取本地视频内容
# cap = cv2.VideoCapture("video/source.flv")

# 通过cv2中的类获取视频流操作对象cap
rtmp_str = 'rtmp://192.168.2.114/live/videoName'
cap = cv2.VideoCapture(rtmp_str)

# 获取原视频的宽度和高度
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 子进程,用于推流
# 修改为您的 NGINX RTMP 服务器地址
rtmp_url = 'rtmp://192.168.2.114/live/stream'
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()

6.执行程序

相关推荐
北芝科技几秒前
2026年AI营销公司推荐:广州GEO服务品牌多维度对比
人工智能·搜索引擎
Try, Again几秒前
【小龙虾-OpenClaw】Railway如何部署小龙虾-OpenClaw
人工智能
CLOUD ACE几秒前
Gemini 3.1 Flash-Lite 正式上线:专为规模化智能而生
人工智能·谷歌云·gemini
带娃的IT创业者1 分钟前
专栏系列3.3《时序关联学习:r=0.733 背后的记忆形成》
人工智能·深度学习·神经网络·时序学习·nct·神经调质
格林威1 分钟前
工业相机图像高速存储(C++版):先存内存,后批量转存方法,附堡盟相机实战代码!
开发语言·c++·人工智能·数码相机·计算机视觉·视觉检测·堡盟相机
程序员夏末1 分钟前
【AI Agent基础 | 第四篇】Spring AI 集成与多模型支持
java·人工智能·spring·ai·ai agent
徐礼昭|商派软件市场负责人2 分钟前
“80%应用将消亡”?后App时代:AI智能体重构人机交互与数字商业新秩
大数据·人工智能·人机交互·零售·智能搜索·ai推荐
快乐非自愿3 分钟前
NIO核心原理深度解析:非阻塞I/O的块式设计与高并发实现逻辑
人工智能·深度学习·nio
十铭忘3 分钟前
EgoPoseFormer v2:解决 AR/VR 场景中的第一视角人体动捕问题
人工智能·计算机视觉·ar·vr
东离与糖宝3 分钟前
Gradle 9.4爆改Java构建:编译速度提升300%,微服务多模块一键优化
java·人工智能