YOLOv11实时视频流检测:摄像头接入部署实战
YOLO11 是 Ultralytics 推出的最新目标检测算法,延续了 YOLO 系列“快速、准确、易部署”的核心优势。相比前代版本,YOLOv11 在推理速度和小目标检测能力上进一步优化,特别适合用于实时视频流处理场景,如安防监控、智能交通、工业质检等。它不仅支持高帧率下的稳定检测,还能在普通算力设备上实现低延迟运行,真正做到了高性能与轻量化兼顾。
本文将带你从零开始,在一个完整可运行的 YOLO11 深度学习环境中,完成摄像头视频流的目标检测部署。该环境基于官方 Ultralytics 代码库构建,预装了 PyTorch、OpenCV、CUDA 等必要依赖,开箱即用,无需手动配置复杂依赖链。无论是本地开发机还是云端容器镜像,都能快速启动并接入真实摄像头进行实时检测。
1. Jupyter 使用方式
如果你更习惯交互式编程,Jupyter Notebook 是一个理想选择。通过浏览器即可访问代码编辑界面,边写边调试,非常适合初学者或做实验性开发。
启动服务后,打开浏览器输入提供的 URL 地址(通常为http://localhost:8888),你会看到 Jupyter 的文件管理界面。找到项目根目录下的ultralytics-8.3.9文件夹,进入后可以新建 Python Notebook 或打开已有的.ipynb脚本。
你可以在这个环境中分步执行以下操作:
- 加载预训练模型
- 测试单张图片检测效果
- 接入摄像头并实现实时推理
- 可视化结果并保存视频输出
例如,在单元格中输入以下代码即可快速验证模型是否正常工作:
from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov11s.pt') # 对图像进行推理 results = model('bus.jpg') # 显示结果 results[0].show()Jupyter 的最大优势在于可视化调试方便,每一步都可以立即看到输出图像或中间数据,极大提升了开发效率。
2. SSH 使用方式
对于熟悉命令行操作的开发者来说,SSH 登录是更高效的选择。通过终端直接连接远程服务器或容器实例,能够完全掌控运行环境,并便于批量处理任务。
使用如下命令连接你的实例(请替换实际 IP 和端口):
ssh username@your-server-ip -p 22登录成功后,你会进入系统的命令行界面。此时可以使用常规 Linux 命令导航到项目目录:
cd ultralytics-8.3.9/这个目录包含了 YOLOv11 的全部源码、配置文件和示例脚本。你可以在这里运行训练、推理、导出模型等各种操作。
推荐使用tmux或screen工具保持长时间运行的任务不中断。比如你想持续运行一个摄像头检测程序,可以用:
tmux new -s yolov11_cam python detect_from_camera.py即使关闭终端,任务也会在后台继续执行。
此外,SSH 方式还支持文件上传下载。你可以用scp命令将本地的测试视频传上去:
scp test_video.mp4 username@your-server-ip:/path/to/ultralytics-8.3.9/data/也可以把生成的结果视频拉回本地查看:
scp username@your-server-ip:/path/to/ultralytics-8.3.9/runs/detect/exp/output.avi ./local_results/这种方式灵活、稳定,适合生产级部署和自动化脚本集成。
3. 使用 YOLOv11 实现摄像头实时检测
现在我们正式进入实战环节——如何利用 YOLOv11 完成摄像头视频流的实时目标检测。
3.1 首先进入项目目录
无论你是通过 Jupyter 还是 SSH 登录,第一步都是定位到主项目路径:
cd ultralytics-8.3.9/确保当前目录下有detect.py、train.py等核心脚本,以及ultralytics/模块包。
3.2 编写摄像头检测脚本
虽然官方提供了detect.py支持图像和视频文件检测,但要实现实时摄像头接入,我们需要自定义一段代码来调用 OpenCV 的 VideoCapture 功能。
创建一个新的 Python 脚本:
nano detect_from_camera.py粘贴以下内容:
from ultralytics import YOLO import cv2 # 加载模型 model = YOLO('yolov11s.pt') # 也可换为 yolov11m.pt 或 yolov11x.pt # 打开摄像头(默认设备索引为0) cap = cv2.VideoCapture(0) # 设置分辨率(可选) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) # 检查摄像头是否成功打开 if not cap.isOpened(): print("无法打开摄像头") exit() print("正在使用摄像头进行实时检测...按 'q' 键退出") while True: ret, frame = cap.read() if not ret: print("无法接收帧,退出...") break # 使用 YOLOv11 进行推理 results = model(frame, stream=True) # stream=True 提升性能 # 绘制检测结果 for r in results: annotated_frame = r.plot() # 自动绘制边界框和标签 # 显示画面 cv2.imshow('YOLOv11 实时检测', annotated_frame) # 按 'q' 退出循环 if cv2.waitKey(1) == ord('q'): break # 释放资源 cap.release() cv2.destroyAllWindows()这段代码做了几件事:
- 加载预训练的 YOLOv11 小型模型(可根据硬件升级为中型或大型)
- 调用系统默认摄像头(通常是笔记本内置摄像头或 USB 摄像头)
- 实时读取每一帧画面并送入模型推理
- 利用
results.plot()自动渲染检测框、类别名和置信度 - 使用 OpenCV 展示带标注的视频流
保存并退出编辑器(在 nano 中按 Ctrl+X → Y → Enter)。
3.3 运行脚本开始检测
执行脚本:
python detect_from_camera.py如果一切正常,会弹出一个窗口,显示来自摄像头的实时画面,所有被识别出的物体都会被加上彩色边框和标签,例如“person”、“car”、“phone”等。
提示:首次运行时模型会自动下载权重文件(如
yolov11s.pt),需确保网络畅通。后续运行则无需重复下载。
你可以在环境中观察到类似下图的效果:
这是一个人物和手机同时被准确检测出来的画面。可以看到,即使是小尺寸目标(如手中的手机),YOLOv11 也能稳定捕捉,说明其对多尺度目标具有良好的适应性。
3.4 扩展功能建议
为了提升实用性,你可以在此基础上添加以下功能:
- 保存检测视频:使用
cv2.VideoWriter将带标注的视频流保存为文件 - 区域入侵检测:设定 ROI 区域,当有人进入特定范围时触发警报
- 多路摄像头支持:修改代码以同时接入多个摄像头(如 RTSP 流)
- Web 页面展示:结合 Flask 或 FastAPI 将检测画面推送到网页浏览器
- 边缘设备部署:将模型导出为 ONNX 或 TensorRT 格式,部署到 Jetson Nano 等嵌入式设备
例如,导出为 ONNX 模型只需一行命令:
model.export(format='onnx', dynamic=True, simplify=True)这将生成可在多种推理引擎上运行的通用模型文件,极大拓展部署可能性。
4. 总结
本文带你完整走完了 YOLOv11 在真实摄像头视频流中的部署流程。从环境准备、工具使用(Jupyter / SSH)、项目目录进入,到编写并运行实时检测脚本,每一步都力求贴近实际应用场景。
我们验证了 YOLOv11 不仅具备出色的检测精度,而且在普通摄像头输入下仍能保持流畅的帧率表现,充分体现了其作为新一代实时目标检测模型的强大能力。无论是用于科研实验、教学演示,还是工业落地,这套方案都具备高度可复用性和扩展性。
下一步,你可以尝试:
- 更换不同大小的模型(s/m/l/x)比较速度与精度权衡
- 接入 IP 摄像头或无人机视频流
- 结合 DeepSORT 实现多目标跟踪
- 构建完整的 AI 视觉应用系统
动手实践是最好的学习方式,现在就去试试让 YOLOv11 “看见”你周围的世界吧!
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。