YOLO26 计算机视觉 - YOLO26图片与视频推理 & 摄像头与实时检测

大家好,我是 Java1234 小锋老师。最近正在更新《一天学会 YOLO26 计算机视觉 机器视觉 视频教程》系列专辑,感谢大家的支持与关注。

本课程将系统讲解 YOLO26 的完整知识体系,涵盖 YOLO26 简介、HelloWorld 项目实现、模型架构解析、图片与视频推理、摄像头实时检测、数据集与标注、训练自己的 YOLO26 模型、多任务(分割 / 姿态 / 分类 / OBB)以及模型导出等内容。

视频教程+课件+源码打包下载 :

链接:https://pan.baidu.com/s/1_NzaNr0Wln6kv1rdiQnUTg

提取码:0000

具体位置:进入【第三十一期】技术目录即可找到。

YOLO26 计算机视觉 - YOLO26图片与视频推理 & 摄像头与实时检测

YOLO26图片与视频推理

predict 常用参数

参数 含义 入门建议
source 图片/文件夹/视频/摄像头 先单图
conf 置信度阈值 0.25~0.5
iou NMS IoU(传统头更相关) 默认即可
imgsz 推理边长 640
device 0 / cpu / 0,1 有卡用 0
save / show 保存 / 弹窗 调试用
end2end 是否端到端头 默认 True

我们来一些具体示例:

python 复制代码
# -*- coding: utf-8 -*-
"""
图片 / 视频 / 批量推理精讲
演示 conf 对比、结果解析、端到端开关、文件夹批量推理。
"""

from pathlib import Path
import sys

from ultralytics import YOLO

sys.path.append(str(Path(__file__).resolve().parents[1]))
from utils.common import print_detections, ensure_dir


def predict_one_image(model: YOLO, image: str, conf: float, tag: str) -> None:
    """对单张图推理并打印结果。"""
    out_dir = ensure_dir(Path(__file__).parent / "runs")  # 保存路径
    results = model.predict(
        source=image,  # 图片路径
        conf=conf,  # 置信度 只保留 置信度 > conf 的检测框,低于阈值的会被丢弃 默认0.25
        imgsz=640,  # 图像大小 默认640
        save=True,  # 保存结果
        project=str(out_dir),  # 保存路径
        name=f"conf_{tag}",  # 保存名称
        exist_ok=True,  # 是否覆盖保存
    )
    print(f"\n=== conf={conf} ({tag}) ===")
    print_detections(results[0], model.names)


def predict_video(model: YOLO, video: str) -> None:
    """对视频文件推理。"""
    out_dir = ensure_dir(Path(__file__).parent / "runs")  # 保存路径
    model.predict(
        source=video,  # 视频路径
        conf=0.45,  # 置信度 只保留 置信度 > conf 的检测框,低于阈值的会被丢弃 默认0.25
        imgsz=640,  # 图像大小 默认640
        save=True,  # 保存结果
        project=str(out_dir),  # 保存路径
        name="video",  # 保存名称
        exist_ok=True,  # 是否覆盖保存
    )
    print(f"视频推理完成,结果目录: {out_dir / 'video'}")  # 打印保存路径


def predict_folder(model: YOLO, folder: str) -> None:
    """对文件夹内所有图片批量推理。"""
    out_dir = ensure_dir(Path(__file__).parent / "runs")  # 保存路径
    results = model.predict(
        source=folder,  # 文件夹路径
        conf=0.5,  # 置信度 只保留 置信度 > conf 的检测框,低于阈值的会被丢弃 默认0.25
        save=True,  # 保存结果
        project=str(out_dir),  # 保存路径
        name="batch",  # 保存名称
        exist_ok=True,  # 是否覆盖保存
    )
    print(f"\n批量推理完成,共 {len(results)} 张")  # 打印批量推理完成


def compare_end2end(model: YOLO, image: str) -> None:
    """
    对比端到端头(默认,无需 NMS)与传统 one-to-many 头。
    入门默认使用 end2end=True 即可。
    """
    print("\n=== 默认端到端 (end2end=True) ===")
    r1 = model.predict(image, conf=0.5, end2end=True, verbose=False)  # verbose 控制是否在终端打印推理过程的日志信息。
    print_detections(r1[0], model.names)

    print("\n=== 传统头 (end2end=False, 需 NMS) ===")
    r2 = model.predict(image, conf=0.5, end2end=False, verbose=False)
    print_detections(r2[0], model.names)


def main() -> None:
    model = YOLO("yolo26n.pt")
    image = "bus.jpg"  # 改成你的图片

    # 1) 不同置信度对比
    predict_one_image(model, image, conf=0.25, tag="025")
    predict_one_image(model, image, conf=0.60, tag="060")

    # 2) 端到端 vs 传统头
    # compare_end2end(model, image)

    # 3) 视频推理(准备好 video.mp4 后取消注释)
    # predict_video(model, "video.mp4")

    # 4) 文件夹批量(准备好 images/ 后取消注释)
    # predict_folder(model, "images")


if __name__ == "__main__":
    main()

首先是不同置信度对比,置信度 > conf 的检测框,低于阈值的会被丢弃 默认0.25

运行输出,低于0.6的直接丢弃。

接下来是 端到端 vs 传统头

目前图片简单,运行结果还是差不多的。

在看一个视频识别,逐帧检测。

最后是文件里批量检测:

YOLO26摄像头与实时检测

predict方法把source设置成0,就可以把数据源设置成摄像头;

我们通过两个实例来讲解下摄像头与实时检测。

第一个实例:直接用Ultralytics predict(最简单)

第二个实例:OpenCV 读帧 + 模型推理,方便叠加业务逻辑(ROI、计数等)。

实例代码:

python 复制代码
# -*- coding: utf-8 -*-
"""
摄像头实时检测
source=0 为默认摄像头;也可换成 RTSP 地址或本地视频。
"""

from pathlib import Path
import sys

import cv2
from ultralytics import YOLO

sys.path.append(str(Path(__file__).resolve().parents[1]))
from utils.common import FpsCounter  # noqa: E402


def run_predict_api(source: int | str = 0) -> None:
    """
    方式一:直接用 Ultralytics predict(最简单)。
    show=True 会弹出可视化窗口。
    """
    model = YOLO("yolo26n.pt")  # 加载模型
    results = model.predict(
        source=source,  # 视频源
        conf=0.45,  # 置信度
        imgsz=640,  # 图像大小
        show=True,  # 显示窗口
        stream=True,  # 流式,适合实时
    )  # 预测结果
    for _ in results:  # 必须消费生成器,摄像头才会真正打开
        pass


def run_opencv_loop(source: int | str = 0) -> None:
    """
    方式二:OpenCV 读帧 + 模型推理,方便叠加业务逻辑(ROI、计数等)。
    按 q 退出。
    """
    model = YOLO("yolo26n.pt")  # 加载模型
    cap = cv2.VideoCapture(source)  # 打开视频源
    if not cap.isOpened():  # 如果视频源无法打开,则抛出异常
        raise RuntimeError(f"无法打开视频源: {source}")

    fps = FpsCounter()  # 创建FPS计数器
    print("按键 q 退出窗口")

    while True:  # 循环读取视频帧
        ok, frame = cap.read()  # 读取视频帧
        if not ok:  # 如果视频帧无法读取,则退出循环
            break  # 退出循环

        results = model.predict(frame, conf=0.45, imgsz=640, verbose=False)  # 预测结果
        plotted = results[0].plot()  # 画框后的 BGR 图

        cur_fps = fps.tick()  # 计算FPS 并更新FPS计数器
        cv2.putText(  # 在图像上添加文本
            plotted,  # 图像
            f"FPS: {cur_fps:.1f}",  # 文本
            (12, 32),  # 位置
            cv2.FONT_HERSHEY_SIMPLEX,  # 字体
            1.0,  # 字体大小
            (0, 255, 0),  # 颜色
            2,  # 字体厚度
        )

        cv2.imshow("YOLO26 Webcam", plotted)  # 显示图像
        if cv2.waitKey(1) & 0xFF == ord("q"):  # 如果按下q键,则退出循环
            break  # 退出循环

    cap.release()  # 释放视频源
    cv2.destroyAllWindows()  # 关闭所有窗口


def main() -> None:
    """选择一种实时方式运行。"""
    # 本地摄像头
    source: int | str = 0
    # RTSP 示例:
    # source = "rtsp://user:pass@192.168.1.10:554/stream"
    # 本地视频:
    # source = "demo.mp4"

    run_predict_api(source)
    # run_opencv_loop(source)


if __name__ == "__main__":
    main()

RTSP(实时流传输协议):这是视频流的"快递单号协议",专门用来传输实时音视频数据(比如监控画面)。

当你把YOLO(目标检测算法)用于安防监控或工厂质检时,不能把摄像头插在电脑上(因为距离太远),而是让摄像头连接网络。YOLO代码拿着这个RTSP地址去"取流"。

OpenCV(Open Source Computer Vision Library,开源计算机视觉库) 。它是一个跨平台的免费开源算法库,非常优秀,功能强大,专为实时图像处理计算机视觉而设计。

1. ROI(Region of Interest,感兴趣区域)

大白话 :你不需要让YOLO分析整个摄像头画面,只盯着画面里的那一小块特定区域看。

为什么要设ROI?

  • 省算力:画面很大,但有效信息只占一小块(比如只检测门口区域),设定ROI后,传给YOLO的像素变少,推理速度会明显提升。
  • 降误报:画面边缘可能有无关的路人或者花坛,设定ROI后,YOLO只检测这个框里的目标,能过滤掉大量无效报警。

2. 计数(Count),具体在计什么?

在工业视觉和安防领域,"计数"绝不是数画面里此刻有几个人 ,而是指累计统计穿越某个"虚拟线"或停留在"特定区域"内的目标数量。分三种常见业务:

  • A. 区域驻留计数(此刻数) :统计当前ROI区域内有多少人/车。比如候车厅排队人数工位占用数。每帧检测,取当前帧的检测框中心点是否落在ROI内,实时更新数字。
  • B. 越线计数(累计数) :统计单向或双向 穿越了一条黄色虚拟警戒线的人数。比如商场客流量统计(进出人数)传送带上的工件产量
  • C. 行为计数(违规数) :统计闯入 禁区或长时间停留的次数。比如某员工进入了吊车作业的红色危险ROI区域,触发一次告警计数。

3. 核心难点:为什么"计数"不能只看单帧?

如果只是单帧数人,画面里人稍微重叠一下,YOLO漏检一个,数字就会乱跳。所以真正的计数逻辑必须结合"目标跟踪(Tracking)"

  1. 给每个检测到的人分配一个唯一的 ID(如1号人、2号人)。
  2. 记录每个ID的运动轨迹(过去5帧的坐标点)。
  3. 判断逻辑:当ID的轨迹线与预设的虚拟线(Line)发生交叉,且方向符合设定时,计数+1。

4. 组合实战逻辑(ROI + 计数 联动)

假设你是工厂产线质检,传送带从左往右走:

  1. 设定ROI:只截取传送带中间窄窄的一条竖条区域。
  2. YOLO推理:只检测ROI内的"瑕疵品"或"工件"。
  3. 越线计数:在ROI中间画一条虚拟竖线。每当一个工件的检测框中心点从左往右越过这条线,累计产量 +1;如果检测到瑕疵标签,不良品计数 +1。
相关推荐
冬奇Lab22 分钟前
企业知识库系列(04):HyperGraphRAG 实测——超图结构的多跳推理
人工智能·开源
Golden小狗种自己的花[哇]23 分钟前
书接上回(Convolution)
人工智能·深度学习
海盗123423 分钟前
AI新闻日报_2026-08-26——Vera Rubin 实测 30 倍吞吐跃升、Ilya SSI 持续学习模型或本周亮相、开源模型调用首超闭源
人工智能
裕晟资质规划25 分钟前
西安政务信息化项目涉密系统集成资质准入解析:甲级/乙级承接边界、等保差异与合规承接路径
大数据·运维·数据库·人工智能·安全·政务
HyperAI超神经27 分钟前
MiniMax H3 突破视频生成边界,音画内容一体生成;Ornith-1.5-35B-A3B 探索推理模型自进化训练新模式
人工智能·深度学习·学习·音视频·多模态·视频生成·推理模型
神奇霸王龙27 分钟前
Codex MCP GA 实测:Qwen / GLM / Kimi / DeepSeek / MiniMax 调度 Codex 沙箱的真实成本
人工智能·ai·agent·ai编程·原型模式·mcp
gt202629 分钟前
机器翻译是怎么工作的:从规则、统计到神经网络的三次演进
人工智能·神经网络·机器翻译
赛博三把手30 分钟前
DeepSeek Harness (dsh) 国内网络接入第三方大模型聚合平台 API:以 Claude Opus 5 /Fable 5为例
人工智能·架构·开源
我是浮华38 分钟前
团队ai工具栈
人工智能·个人ai学习