Python中实现YOLO目标检测

文章目录

  • Python中实现YOLO目标检测
    • 一、引言
    • 二、环境准备
      • 1、安装依赖
    • 2、下载预训练模型
    • 三、目标检测
      • 1、图像检测
      • 2、视频检测
    • 四、使用示例
      • 1、轨迹追踪
    • 五、总结

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'):breakelse:breakcap.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()# 获取每个被追踪的物体 idtrack_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 = boxtrack = 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'):breakelse:breakcap.release()
cv2.destroyAllWindows()

五、总结

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


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

参考文章

  • Android部署自定义YOLOV8模型(2024.10.25)-全流程_android yolo-CSDN博客
  • 零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别 - 痴者工良

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/490368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android实现RecyclerView边缘渐变效果

Android实现RecyclerView边缘渐变效果 1.前言: 是指在RecyclerView中实现淡入淡出效果的边缘效果。通过这种效果,可以使RecyclerView的边缘在滚动时逐渐淡出或淡入,以提升用户体验。 2.Recyclerview属性: 2.1、requiresFading…

汽车免拆诊断案例 | 2014款保时捷卡宴车发动机偶尔无法起动

故障现象 一辆2014款保时捷卡宴车,搭载3.0T 发动机,累计行驶里程约为18万km。车主反映,发动机偶尔无法起动。 故障诊断 接车后试车,发动机起动及运转均正常。用故障检测仪检测,发动机控制单元(DME&#x…

Hadoop生态圈框架部署(十一)- Sqoop安装与配置

文章目录 前言一、Sqoop安装与配置(手动安装配置)1. 下载Sqoop安装包并上传到Linux1.1 下载1.2 上传 2. 解压Sqoop安装包2.1 解压2.2 重命名 3. 配置Sqoop3.1 修改 sqoop-env.sh 配置文件3.2 配置jar包3.2.1 配置MySQL驱动jar包3.2.2 配置commons-lang-2…

Jenkins与SonarQube持续集成搭建及坑位详解

Jenkins和SonarQube都是软件开发过程中常用的工具,它们在代码管理、构建、测试和质量管理方面发挥着重要作用。以下是关于Jenkins与SonarQube的作用及整合步骤环境搭建的详细解释: 一、Jenkins与SonarQube的作用 Jenkins: Jenkins是一个开源的持续集成和交付工具,它可以帮…

Linux驱动开发(13):输入子系统–按键输入实验

计算机的输入设备繁多,有按键、鼠标、键盘、触摸屏、游戏手柄等等,Linux内核为了能够将所有的输入设备进行统一的管理, 设计了输入子系统。为上层应用提供了统一的抽象层,各个输入设备的驱动程序只需上报产生的输入事件即可。 下…

关于Postgresql旧版本安装

抛出问题 局点项目现场,要求对如下三类资产做安全加固,需要在公司侧搭建测试验证环境,故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代,老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…

继电器控制与C++编程:实现安全开关控制的技术分享

在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…

时序论文31|NIPS24自注意力机制真的对时序预测任务有效吗?

论文标题:Are Self-Attentions Effective for Time Series Forecasting? 论文链接:https://arxiv.org/pdf/2409.18696 代码链接:https://github.com/dongbeank/CATS 前言 本文将重点转向探究自注意力机制在其中的有效性,提出…

ip_done

文章目录 路由结论 IP分片 数据链路层重谈Mac地址MAC帧报头局域网的通信原理MSS,以及MAC帧对上层的影响ARP协议 1.公司是不是这样呢? 类似的要给运营商交钱,构建公司的子网,具有公司级别的入口路由器 2.为什么要这样呢?? IP地…

计算机网络错题

文章目录 码分复用透明传输差错检测停止-等待协议回退N帧协议CSMA/CD协议以太网交换机Vlanip地址的无分类编制方法ip地址的应用规划ip数据包的发送和转发过程路由信息协议IPI2016201720202022 2.5信道 码分复用 透明传输 差错检测 停止-等待协议 回退N帧协议 CSMA/CD协议 以太网…

2024 年 9 月区块链游戏研报:行业回暖,Telegram 游戏引发热潮

作者:Stella L (stellafootprint.network) 数据来源:Footprint Analytics Games Research Page 9 月份,区块链游戏代币的市场总值增长了 29.2%,达到 232 亿美元,日活跃用户(DAU)数量上升了 1…

Https身份鉴权(小迪网络安全笔记~

附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,若有错误欢迎指正! 5.2 Https&身份鉴权 引子:上一篇主要对Http数据包结构、内容做了介绍,本篇则聊聊Https、身份鉴权等技术。 …

ORACLE逗号分隔的字符串字段,关联表查询

使用场景如下: oracle12 以前的写法: selectt.pro_ids,wm_concat(t1.name) pro_names from info t,product t1 where instr(,||t.pro_ids|| ,,,|| t1.id|| ,) > 0 group by pro_ids oracle12 以后的写法: selectt.pro_ids,listagg(DIS…

MySQL八股文

MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL&…

使用echarts实现3d柱状图+折线图

以下代码有问题请直接问国内直连GPT/Claude HTML 需要注意threeDchart一定要设置宽度高度&#xff0c;不然图不显示,然后echarts版本不要太低&#xff0c;不然也不显示 <div id"threeDchart" class"threeDchart"></div>js set3DBarChart2(dat…

基地址和偏移地址的理解

在之前的一篇博客介绍了怎么找阳光地址&#xff1a;CE和Ollydbg简单介绍&#xff0c;但是那个地址在重启游戏后会变化&#xff0c;这次会讲解为什么这个阳光的地址会变化&#xff0c;以及对于变化的地址怎么处理。 推荐博客&#xff1a;CE找基址原理 1.阳光的地址为什么会变化…

C语言:详解指针最终篇(3)

一.字符指针变量 在指针的类型中我们知道有一种指针类型为字符指针char*。一般我们这样使用&#xff1a; 我们来看另一种使用方式&#xff1a; 这个常量字符串就相当于它本身首字符的地址&#xff0c;收地址加上方括号下标就可以访问该表达式中对应下标的元素。可以把该表达式…

【深度学习】 零基础介绍卷积神经网络(CNN)

零基础介绍 卷积神经网络&#xff08;CNN&#xff0c;Convolutional Neural Network&#xff09;是深度学习中的一种神经网络&#xff0c;特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务&#xff0c;比如判断一张照片中是猫还是狗。下面用一…

Dual-Write Problem 双写问题(微服务)

原文链接https://www.confluent.io/blog/dual-write-problem/ 双写问题发生于当两个外部系统必须以原子的方式更新时。 问题 说有人到银行存了一笔钱&#xff0c;触发 DepositFunds 命令&#xff0c;DepositFunds 命令被发送到Account microservice。 Account microservice需…

ReactPress最佳实践—搭建导航网站实战

Github项目地址&#xff1a;https://github.com/fecommunity/easy-blog 欢迎Star。 近期&#xff0c;阮一峰在科技爱好者周刊第 325 期中推荐了一款开源工具——ReactPress&#xff0c;ReactPress一个基于 Next.js 的博客和 CMS 系统&#xff0c;可查看 demo站点。&#xff08;…