📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
YOLO 实战教程:基于 YOLO11 的实时目标检测与视频录制完整解析
一、概述:基于 YOLO11 的实时检测为何重要
实时目标检测(Real-time Object Detection)是计算机视觉领域应用最广泛的方向之一。在机器人、智能监控、安防分析、工业检测以及嵌入式视觉系统中,实时检测能力直接影响系统的决策速度与可用性。YOLO(You Only Look Once)系列因其高效的一阶段网络结构,在实时检测任务中表现突出。
本章节将围绕如下完整实战代码展开讲解:
from ultralytics import YOLO
import cv2
import time
model = YOLO("yolo11x.pt")
cap = cv2.VideoCapture(0)
if not cap.isOpened():
raise RuntimeError("无法打开摄像头")
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter("yolo_detection_output.mp4", fourcc, 20.0, (1280, 720))
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame, conf=0.8)
annotated = results[0].plot()
out.write(annotated)
cv2.imshow("YOLO11n Real-time Detection", annotated)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
out.release()
cv2.destroyAllWindows()
接下来将逐行解析代码结构,并从模型推理逻辑、参数设计、实时检测特性、准确度优化等多个角度,构建一篇可直接用于教学、实战与工程化开发的完整内容。

二、YOLO11 模型体系与实时推理架构
YOLO11 是 Ultralytics 最新发布的 YOLO 系列模型,在结构设计、特征提取能力、推理效率以及统一 API 体系上均做了系统性优化。针对实时检测,它具备以下特点:
1. 结构轻量化与高效推理
YOLO11 在 Backbone 与 Neck 中引入更高效的特征融合模块,使得模型在同等算力下获得更好的速度与精度表现。
2. 多模型尺寸体系
YOLO11 提供五种模型大小,适用于不同设备:
| 模型 | 参数量(M) | 特点 | 使用场景 |
|---|---|---|---|
| YOLO11n | 最轻量 | 推理最快、精度较低 | 边缘设备、移动端 |
| YOLO11s | 轻量级 | 性能均衡 | 中端 GPU、Jetson |
| YOLO11m | 中等规模 | 较高精度、推理速度适中 | 需要精度的通用场景 |
| YOLO11l | 大模型 | 高精度、需要更高算力 | 工业检测、视频分析 |
| YOLO11x | 最大模型 | 最强精度但推理最慢 | 服务器端、大型 GPU、AGX Orin |
本实战代码选用 YOLO11x,其目标是展示精度最高的检测效果,适合教学演示。
三、逐行解析实战代码结构与核心逻辑
下面从工程视角详细分析每一部分代码的目的与工作机制。
1. 加载 YOLO11 模型
model = YOLO("yolo11x.pt")
模型加载阶段主要执行以下任务:
- 解析模型结构与权重文件;
- 根据运行环境选择 CPU/GPU 推理;
- 初始化推理图与优化配置;
- 准备后处理模块(NMS、解码器等)。
YOLO11x 以最高精度为目标,在特征层、检测头等结构中包含更多卷积、注意力机制,因此推理速度较 YOLO11n 慢,但检测效果明显更稳定。
2. 打开摄像头与设置分辨率
cap = cv2.VideoCapture(0)
0 表示系统的默认摄像头输入,在大多数设备上为 USB 摄像头。对于 Jetson 设备,CSI 摄像头一般使用 GStreamer 管线,但 USB 摄像头使用 VideoCapture 是最简单的方式。
摄像头打开失败通常表示:
- 摄像头未连接;
- 权限不足;
/dev/video0不存在;- 驱动未加载。
设置分辨率:
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
720p 在速度与画质之间达到平衡,适合实时展示与录制。
3. 创建视频保存器
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
out = cv2.VideoWriter("yolo_detection_output.mp4", fourcc, 20.0, (1280, 720))
视频保存功能的作用包括:
- 保存推理结果用于回放;
- 收集模型误检样本;
- 用作课程展示素材;
- 调试检测效果。
这里设置为 20 FPS 输出,是保证视频稳定性的通用选择。
4. YOLO 推理核心逻辑
results = model(frame, conf=0.8)
这一行代码触发了 YOLO11x 的完整推理流程:
(1)预处理阶段
YOLO 自动执行:
- 图像缩放到模型输入尺寸(默认 640 × 640);
- 像素归一化;
- 格式转换(BGR → RGB)。
(2)模型推理阶段
YOLO11x 执行多层卷积、特征融合、检测头输出,生成大量候选框(bounding boxes)。
(3)后处理阶段(NMS)
NMS(非极大值抑制)根据置信度压缩重叠框。
(4)置信度(conf)
本代码设置:
conf=0.8
其意义是:
- 严格过滤低置信度检测框;
- 显著减少误检;
- 适合教学演示“高置信度检测结果”。
常见 conf 数值意义:
| conf 值 | 检测数量 | 准确度 | 误检情况 |
|---|---|---|---|
| 0.25(默认) | 多 | 中 | 有误检 |
| 0.5 | 少 | 高 | 基本稳定 |
| 0.8 | 很少 | 很高 | 几乎无误检 |
高置信度适合作为录制视频时的设置,使演示效果更稳定美观。
5. 绘制检测结果
annotated = results[0].plot()
自动绘制以下信息:
- 边界框(Bounding Boxes);
- 目标类别;
- 置信度;
- 颜色标记(按类别区分)。
无需手动绘图,是初学者最容易接受的可视化方式。
6. 保存处理后的画面
out.write(annotated)
写入视频文件,形成完整的检测录像,可用于:
- 模型评估;
- 教学演示;
- 数据回放。
7. 实时显示检测结果
cv2.imshow("YOLO11n Real-time Detection", annotated)
实时展示检测画面,用于:
- 观察模型行为;
- 判断检测稳定性;
- 视频录制与教程演示。
8. 键盘中断逻辑
if cv2.waitKey(1) & 0xFF == ord("q"):
break
确保用户可以随时终止推理与录制过程。
四、置信度(Confidence)、NMS 与准确度提升策略
实时检测的核心质量指标由 conf、iou 等参数共同决定。
1. conf(置信度阈值)解析
置信度本质上是模型对某个预测框属于某类别的“确定程度”。
其作用是过滤低可信度框,当 conf 设置越高:
- 模型越严格;
- 误检减少;
- 漏检小物体可能变多。
本代码使用 conf=0.8,适合追求高稳定性的教学演示场景。
关键推理参数解析:conf(置信度阈值)
在实时检测代码中,下面这一行是影响检测质量最关键的参数之一:
results = model(frame, conf=0.8)
conf(confidence threshold)表示 置信度阈值,即模型只有在“检测结果的置信度 ≥ conf” 时,才会将该物体视为有效目标并绘制边界框。
● 为什么置信度阈值重要?
YOLO 的检测输出包含大量候选框,每个框都有一个置信度分数,表示模型对“这个框中确实包含某类物体”判断的可信程度。若不设置阈值,会出现:
- 误检 / 噪声框(False Positive)增加;
- 对背景区域产生错误识别;
- 输出画面混乱;
- 后处理计算量增加影响 FPS。
● conf 越高越好吗?
不一定,它影响检测性能:
| conf 值 | 结果特点 | 适用场景 |
|---|---|---|
| 0.25–0.4(默认) | 检测更多物体,少量误检 | 通用场景 |
| 0.5–0.7 | 边界框更干净、误检更少 | 实际录制、监控应用 |
| ≥ 0.8 | 非常干净但可能漏检 | 工业检测、演示视频 |
你的代码:
results = model(frame, conf=0.8)
适用于 Jetson AGX Orin 的高性能设备,画面稳定且更专业。
● conf 与 NMS 的关系
YOLO 推理包含两步:
- 按 conf 过滤低置信度框
- NMS 去除重叠框
conf 决定“保留哪些框”,NMS 决定“最终输出哪些框”。
● 场景化建议
| 场景 | 建议 conf | 原因 |
|---|---|---|
| 室内人物检测 | 0.6–0.8 | 减少背景误检 |
| 工业检测 | 0.8–0.9 | 需要高可靠性 |
| 多人户外场景 | 0.4–0.6 | 提高召回率 |
| 低光环境 | 0.3–0.5 | 模型置信度下降时仍能检测 |
● 推荐值
在 Jetson AGX Orin 上进行演示:
results = model(frame, conf=0.75)
可在“干净输出”与“不过度漏检”之间取得平衡。
📺 B站视频讲解(Bilibili):https://www.bilibili.com/video/BV1k1C9BYEAB/
📘 《Yocto项目实战教程》京东购买链接:Yocto项目实战教程
670

被折叠的 条评论
为什么被折叠?



