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

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

相关推荐
回眸&啤酒鸭2 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智2 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅2 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein2 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu2 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb2 天前
智能网联汽车安全能力框架
人工智能
龙亘川2 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化
飞猫的边缘AI2 天前
边缘AI应用:家用AI摄像头怎么做数据训练?
人工智能·边缘计算·ai算法·边缘ai