三、计算机视觉_08YOLO目标检测

0、前言

YOLO作为目前CV领域的扛把子,分类、检测等任务样样精通,本文将基于两个小案例,用YOLO做检测任务,看看效果如何

1、对图片内容做检测

假设我有一张名为picture.jpeg的图片,其内容如下

我将图片和代码放到了同级目录

代码如下:

复制代码
from ultralytics import YOLO
import cv2
import os

# 解决OMP问题
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"

# 加载模型
model = YOLO("yolo11n.pt")

# 读取图片(这里要写图片的路径和名称)
image = cv2.imread("picture.jpeg")

# 预测
results = model(image)

# 绘制预测结果
img = results[0].plot()

from matplotlib import pyplot as plt
import matplotlib
matplotlib.use('TkAgg')
# 显示图像(BGR转RGB)
# OpenCV默认使用BGR颜色顺序,matplotlib默认使用RGB颜色顺序,所以需要先进行转换,然后才能正常显示
plt.imshow(X=img[:, :, ::-1])
plt.show()

运行结果:(检测出了图片中的目标物,并对边框线、标签以及置信度做了标注)

2、对视频内容做检测

2.1 本地视频

假设我有一段视频文件(bwgqmy.mp4),我需要对视频中的内容进行检测

我将视频文件和代码放到了同级目录

代码如下:

PS:其实视频检测和上面的图片检测一样,是将视频拆分成一帧一帧的图片来做检测,连起来就是视频效果

复制代码
from ultralytics import YOLO
import cv2

# 加载YOLO模型
model = YOLO("yolo11n.pt")

# 打开视频(填写自己电脑上想要检测的视频路径和名称即可)
cap = cv2.VideoCapture("bwgqmy.mp4")

while cap.isOpened():
    # read方法用于尝试读取一帧图像,并返回两个值:
    # (1)status(布尔值,表示是否成功读取帧)
    # (2)frame(读取到的帧图像)
    status, frame = cap.read()

    # 如果读取失败,则跳出循环
    if not status:
        print("error")
        break

    # 如果视频太大了,则缩小尺寸
    # height, width = frame.shape[:2]
    # new_width = width // 2
    # new_height = height // 2
    # frame = cv2.resize(frame, (new_width, new_height))

    # 使用YOLO模型检测物体
    results = model(frame)
    # 绘制预测结果
    img = results[0].plot()

    # 显示图像(循环显示预测结果的图像,就相当于视频效果)
    cv2.imshow("demo", img)

    # 如果按下的是ESC键(ASCII码为27),则跳出循环
    if cv2.waitKey(delay=1000 // 24) == 27:
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

运行结果:(检测出了视频中的目标物,并对边框线、标签以及置信度做了标注)

2.2 摄像头

假设我需要对我电脑摄像头拍摄到的内容进行检测

代码如下:

PS:其实和视频检测一样,是将摄像头拍到的内容拆分成一帧一帧的图片来做检测

复制代码
from ultralytics import YOLO
import cv2

# 加载YOLO模型
model = YOLO("yolo11n.pt")

# 调起电脑的第0个摄像头
cap = cv2.VideoCapture(0)

while cap.isOpened():
    # read方法用于尝试读取一帧图像,并返回两个值:
    # (1)status(布尔值,表示是否成功读取帧)
    # (2)frame(读取到的帧图像)
    status, frame = cap.read()

    # 如果读取失败,则跳出循环
    if not status:
        print("error")
        break

    # 如果显示区域太大了,则缩小尺寸
    # height, width = frame.shape[:2]
    # new_width = width // 2
    # new_height = height // 2
    # frame = cv2.resize(frame, (new_width, new_height))

    # 使用YOLO模型检测物体
    results = model(frame)
    # 绘制预测结果
    img = results[0].plot()

    # 显示图像(循环显示预测结果的图像,就相当于视频效果)
    cv2.imshow("demo", img)

    # 如果按下的是ESC键(ASCII码为27),则跳出循环
    if cv2.waitKey(delay=1000 // 24) == 27:
        break

# 释放资源
cap.release()
cv2.destroyAllWindows()

运行结果:(检测出了摄像头中的目标物,并对边框线、标签以及置信度做了标注)

相关推荐
步步为营DotNet9 分钟前
深入剖析.NET 11 中 Microsoft.Extensions.AI 在 AI 驱动后端开发的进阶应用
人工智能·microsoft·.net
空空潍12 分钟前
Spring AI 实战系列(三):多模型共存+双版本流式输出
java·人工智能·spring
gaozhiyong081312 分钟前
提示词的解剖学:Gemini 3.1 Pro 提示工程高级策略与国内实战
人工智能·算法·机器学习
Langchain13 分钟前
2026 年 AI 最值得关注的方向:上下文工程!
人工智能·python·自然语言处理·llm·agent·大模型开发·rag
学习者00719 分钟前
大模型之VLLMA
人工智能
iThinkAi智能体19 分钟前
1个运营带4个实习生,周产350篇笔记:小红书图文矩阵真的没那么玄乎
人工智能·经验分享·笔记
chaofan98020 分钟前
深度实战:2026年大模型应用如何解决“接口抖动”?五大主流平台横向测评
人工智能·自动化·api·claude opus
2501_9460187030 分钟前
六渡婚恋推出“真经”公益课堂 ——以系统化成长支持助力家庭建设与社会发展
大数据·人工智能
competes32 分钟前
深圳程序员职业生涯
java·大数据·开发语言·人工智能·java-ee
金融RPA机器人丨实在智能35 分钟前
OpenClaw正在重写AI产业逻辑:当“行动式AI”席卷全球,实在Agent如何定义商业新范式?
人工智能·ai