首页 > 编程语言 >Python中实现YOLO目标检测

Python中实现YOLO目标检测

时间:2024-12-15 21:27:24浏览次数:6  
标签:Python 检测 模型 YOLO cv2 track frame

文章目录

Python中实现YOLO目标检测

一、引言

YOLO(You Only Look Once)是一种流行的实时目标检测算法,以其速度快和准确性高而闻名。在Python中,我们可以使用Ultralytics提供的YOLO模型来实现目标检测。本文将介绍如何在Python中使用YOLO进行目标检测,并提供代码示例。
在这里插入图片描述

二、环境准备

1、安装依赖

在开始之前,确保你的环境中安装了必要的库。主要依赖是torchopencv-python,可以通过以下命令安装:

pip install torch opencv-python

2、下载预训练模型

在Python中使用YOLOv8进行目标检测,首先需要下载预训练的模型。Ultralytics提供了多种预训练模型,这些模型在不同的任务上进行了优化,例如目标检测、实例分割、姿态估计等。以下是如何在Python中加载预训练的YOLOv8模型的示例代码:

import torch

# 加载预训练的YOLOv8模型
# 'yolov8n' 是模型的名称,'n' 表示轻量级版本
model = torch.hub.load('ultralytics/yolov8', 'yolov8n') 

这段代码通过torch.hub.load方法直接从Ultralytics的GitHub仓库下载并加载预训练的YOLOv8模型。你可以根据需要选择不同的模型版本,例如yolov8syolov8myolov8lyolov8x,这些模型在大小和性能上有所不同,以适应不同的应用场景。

Ultralytics的官方文档提供了详细的模型列表和特点,包括每种模型支持的任务和操作模式。例如,如果你需要进行实例分割,可以选择yolov8n-seg模型;如果需要进行姿态估计,则可以选择yolov8n-pose模型。这些模型在首次使用时会自动从Ultralytics的发布页面下载。

通过这种方式,你可以轻松地在Python项目中集成YOLOv8的强大功能,无需从头开始训练模型,大大节省了时间和计算资源。

三、目标检测

在这里插入图片描述

1、图像检测

使用YOLO模型对单张图像进行目标检测的步骤如下:

import cv2

# 读取图像
img_path = 'path_to_your_image.jpg'
img = cv2.imread(img_path)

# 使用YOLO模型进行检测
results = model(img)

# 显示检测结果
results.show()

2、视频检测

对于视频流的目标检测,你可以使用以下代码:

video_path = 'path_to_your_video.mp4'
cap = cv2.VideoCapture(video_path)

while cap.isOpened():
    success, frame = cap.read()
    if success:
        # 在帧上运行YOLOv8追踪
        results = model(frame, persist=True)
        # 展示结果
        annotated_frame = results[0].plot()
        cv2.imshow("YOLOv8 Tracking", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

在这里插入图片描述

四、使用示例

1、轨迹追踪

在视频中识别并追踪物体的运行轨迹,可以使用以下代码:

from collections import defaultdict
import cv2
import numpy as np

# 加载模型
model = torch.hub.load('ultralytics/yolov8', 'yolov8n')

# 打开视频
video_path = "0.mp4"
cap = cv2.VideoCapture(video_path)

# 保存历史记录
track_history = defaultdict(lambda: [])

while cap.isOpened():
    success, frame = cap.read()
    if success:
        # 追踪
        results = model(frame, persist=True)
        # 读取当前帧中物体的框
        boxes = results[0].boxes.xywh.cpu()
        # 获取每个被追踪的物体 id
        track_ids = results[0].boxes.id.int().cpu().tolist()
        annotated_frame = results[0].plot()
        # 绘制
        for box, track_id in zip(boxes, track_ids):
            x, y, w, h = box
            track = track_history[track_id]
            track.append((float(x), float(y)))
            if len(track) > 30:
                track.pop(0)
            points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
            cv2.polylines(annotated_frame, [points], isClosed=False, color=(230, 230, 230), thickness=10)
        cv2.imshow("YOLOv8 Tracking", annotated_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
cv2.destroyAllWindows()

五、总结

YOLO是一个强大的目标检测工具,可以在Python中轻松实现。通过使用预训练模型,我们可以快速地对图像和视频进行目标检测和追踪。本文提供了基本的使用示例,你可以根据需要进行扩展和定制。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

标签:Python,检测,模型,YOLO,cv2,track,frame
From: https://blog.csdn.net/NiNg_1_234/article/details/144492778

相关文章

  • Windows系统-Python获取当前资源管理器路径及打开控制台、资源管理器到指定路径的方法
    Python获取当前资源管理器路径及打开控制台、资源管理器到指定路径的方法文章目录Python获取当前资源管理器路径及打开控制台、资源管理器到指定路径的方法获取资源管理器路径方法运行错误打开控制台到指定路径方法打开资源管理器到指定路径方法闲着没事还开发了个......
  • 【Python应用】Jep:将Python无缝嵌入到Java应用程序中,充分发挥两种语言的潜力
    Python以其简洁的语法和丰富的库而闻名,而Java则以其性能和稳定性著称。如果能将两者的优势结合起来,将会产生巨大的开发效率提升。Jep(JavaEmbeddedPython)正是这样一个桥梁,它允许你将CPython无缝嵌入到Java应用程序中,从而充分发挥两种语言的潜力。Jep的核心功能:无缝衔接Java......
  • opencv-python连接计算机摄像头,连接手机摄像头
    前言提醒:文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。文章目录前言环境搭建读取文件夹中图片并显示打......
  • 基于Python对xsl&xslx文件进行操作
    利用python操作表格文件读取xsl格式文件-源码import xlrd# 读取xls文件中的工作对象wb = xlrd.open_workbook('示例文件/xxx物理学与信息技术学院.xls')print(wb)# 获取所有的工作表名称sheet_names = wb.sheet_names()# print(sheet_names)# 选择要读取......
  • yolo11的分类模型可能遇到的问题
    1、魔改的yolo11-cls(主改head.py内容),加载时使用如下方式,否则可能魔改无效yolo=YOLO("yolo11n-cls.yaml").load("yolo11n-cls.pt")yolo11n-cls.yaml里将nc写成自己的类别数 2、train时data指定的yaml无效,提示数据集未找到直接用目录,到train、val的上一层即可。我的train......
  • Proteus基于STM32的联网楼宇智能灯光防火检测控制系统
    基于STM32的联网楼宇智能灯光防火检测控制系统感觉有帮助的点个赞谢谢演示视频:【Proteus仿真大赛】基于stm32的联网楼宇智能灯光防火检测控制系统系统方案设计设计背景与系统功能目前,‌现代楼宇普遍存在的问题主要包括房间数量众多、‌走廊通道长度较长,‌这使得......
  • Python小区物业报修管理系统_78ahx-
    文章目录项目介绍具体实现截图开发技术设计思路开发与测试:核心代码部分展示文章目录/协作提纲源码/演示视频获取方式项目介绍管理员用例图依据管理员的权限需求以及对系统的管理需求进行分析,主要包括了个人中心、物业管理、业主管理、维修员管理、小区公告管理、小......
  • 【C#脚本】C#调用Python脚本的方式(一),以PaddleOCR-GUI为例
    以下文章来源于mingupup的学习记录,作者DotNet学习交流前言每种语言都有每种语言的优势,Python由于其强大的生态,很多任务通过调用包就可以实现,那么学会从C#项目中调用Python脚本完成任务就很重要。C#调用Python代码有多种方式,如果Python那边内容比较多,可以考虑起一个WebApi进行......
  • (免费领源码)python#Django#mysql餐厅点餐管理系统06940-计算机毕设 原创
                                              目 录摘要1绪论1.1研究背景与意义1.2开发现状1.3Django框架介绍1.3论文结构与章节安排2 餐厅点餐管理系统系统分析2.1可......
  • yolov11速度估计+距离测量+轨迹跟踪+计数+代码+教程
    YOLOv11速度估计、距离测量、轨迹跟踪与计数:综合解决方案引言随着计算机视觉技术的快速发展,YOLO(YouOnlyLookOnce)系列目标检测算法因其高效性和准确性而广受欢迎。特别是最新的YOLOv8版本,在保持高性能的同时引入了更多功能,如速度估计、距离测量、轨迹跟踪和对象计数。......