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

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

相关推荐
集芯微电科技有限公司8 小时前
替代HT6310/KP3310离线式AC-DC无感线性稳压器
数据结构·人工智能·单片机·嵌入式硬件·fpga开发
悟道心8 小时前
6. 自然语言处理NLP - 迁移学习
人工智能·transformer
juxieyiyi8788 小时前
CDN与PCDN在边缘计算中的分工
人工智能·边缘计算·cdn·pcdn·平台搭建·互联网项目·pcdn平台搭建双收益
fantasy_arch8 小时前
Transformer vs Stable Diffusion vs LLM模型对比
深度学习·stable diffusion·transformer
peixiuhui8 小时前
OpenPLC与RK3576边缘计算网关中结合应用的技术案例与分析
人工智能·边缘计算·rk3588·rk3568·openplc·rk3576·g8701
vyuvyucd8 小时前
Python库使用全攻略
人工智能
m0_613607018 小时前
小土堆-P3-笔记
pytorch·python·深度学习
十三画者8 小时前
【文献分享】SpatialZ弥合从平面空间转录组学到三维细胞图谱之间的维度差距
人工智能·数据挖掘·数据分析·数据可视化
一条咸鱼_SaltyFish8 小时前
[Day13] 微服务架构下的共享基础库设计:contract-common 模块实践
开发语言·人工智能·微服务·云原生·架构·ai编程
童欧巴8 小时前
DeepSeek V4,定档春节
人工智能·aigc