三、计算机视觉_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()

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

相关推荐
武子康38 分钟前
H3-World 为何在加载 LoRA 前,先检查导入的代码?
人工智能·深度学习·算法
装不满的克莱因瓶1 小时前
【SpringAI Alibaba】ReactAgent结构化输出OutputType与OutputSchema实战
java·人工智能·ai·springai·springaialibaba
楚山之石1 小时前
【Radiology】影像组学的标准化与可重复性:IBSI 卷积滤波器共识及其未能覆盖的环节
人工智能·学习·机器学习·mri
东姬AI1 小时前
挖出948个内核漏洞、自动写补丁:GPT-6 Cyber把AI推进“实战岗“,内容行业还卡在哪一关?
人工智能·网络安全·openai·gpt-6
用户2991422196801 小时前
GitHub 热榜项目:日榜(2026-11-10)
人工智能·开源·github
用户2991422196801 小时前
AI 日报(2026年11月10日)
人工智能
QXWZ_IA2 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
java_logo2 小时前
Docker 部署 ReMe:轻松搭建 AI Agent 记忆管理平台
人工智能·docker·容器·ai agent·轩辕镜像·reme·agentscope-ai
硅谷秋水2 小时前
从VLM规划器到机器人智能体:面向依赖历史信息的操控任务自演化框架
人工智能·机器学习·语言模型·机器人
西安小哥2 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能