欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 三、计算机视觉_08YOLO目标检测

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

2024/11/29 17:48:42 来源:https://blog.csdn.net/weixin_43767064/article/details/144056675  浏览:    关键词:三、计算机视觉_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()

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com