YOLOV8模型使用-检测-物体追踪

news2024/11/19 17:24:14

这个最新的物体检测模型,很厉害的样子,还有物体追踪的功能。

有官方的Python代码,直接上手试试就好,至于理论,有想研究在看论文了╮(╯_╰)╭


简单介绍

YOLOv8 中可用的模型

YOLOv8 模型的每个类别中有五个模型用于检测、分割和分类。YOLOv8 Nano 是最快和最小的,而 YOLOv8 Extra Large (YOLOv8x) 是其中最准确但最慢的。用来实际使用的时候选权重模型。

| YOLOv8n | YOLOv8s | YOLOv8m | YOLOv8l | YOLOv8x |

其他介绍,就不用管了,上手玩一下要紧。看一下几个官方介绍图片就懂了:

请添加图片描述
请添加图片描述

这里可以看到,有物体检测识别,检测,分类,轨迹,姿态的功能,下面就上手试试。


部署-简单使用【超简单】

前提安装好Python,版本需要Python>=3.8 我的是 Python 3.11.3

视频图片识别

  1. 首先,先下载官方的代码。官网代码

  2. 执行安装与检测:【执行位置是在项目目录下】

pip install -r requirements.txt
pip install ultralytics

# 执行这个,会自动下载模型
# Downloading https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt to 'yolov8n.pt'...
# source 替换成需要检测的本地图片即可
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

# 也可以如下对视频进行检测
yolo task=detect mode=predict model=yolov8n.pt source=C:\Users\Administrator\Desktop\sssss-1.mp4  show=True

#实例分割
yolo task=segment  mode=predict model=yolov8n-seg.pt source=C:\Users\Administrator\Desktop\sssss-1.mp4  show=True
  1. 看看这个检测出来的效果:
    请添加图片描述
    请添加图片描述请添加图片描述

  2. 是不是灰常的简单,[]( ̄▽ ̄)*

  3. 就酱紫,后面在试试其他功能。


视频流,摄像头识别

这个处理只需要把来源替换成0即可,就像这样

yolo task=detect mode=predict model=yolov8n.pt source=0 show=True

视频追踪-绘制随时间变化的轨迹【这个有意思】

可以用于视频追踪的模型是:YOLOv8n, YOLOv8n-seg and YOLOv8n-pose 【以8n举例子】

yolo track model=yolov8n.pt source=0 show=True 

这个追踪的效果就是,在识别里面多了一个ID表示固定的物体。

以下是官方代码改了一下,绘制随时间变化的轨迹

效果是这样的:
请添加图片描述

这个车流比较多感觉轨迹画的不怎么好看。

请添加图片描述

哈哈,这个卡车还识别错了 。。╮(╯▽╰)╭

不过这里可以绘制轨迹,就也可以统计这个ID物体在视频中存在的时间什么的。如果放在门店咖啡厅的摄像头里面,就可以看到顾客的停留时间。

这个轨迹变化绘制+物体追踪代码如下:

# 绘制随时间变化的轨迹
from collections import defaultdict

import cv2
import numpy as np

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')

# Open the video file
# video_path = "C:\\Users\\Administrator\\Desktop\\1.ts" 
video_path = 0
cap = cv2.VideoCapture(video_path)

# Store the track history
track_history = defaultdict(lambda: [])

# 用于保存图像
# fourcc = cv2.VideoWriter_fourcc(*'mp4v')
# out_cat = cv2.VideoWriter("C:\\Users\\Administrator\\Desktop\\save.mp4", fourcc, 24, (352, 288), True)  # 保存位置/格式

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 tracking on the frame, persisting tracks between frames
        results = model.track(frame, persist=True)

        # Get the boxes and track IDs
        boxes = results[0].boxes.xywh.cpu()
        if results[0].boxes.id is not None:
            track_ids = results[0].boxes.id.int().cpu().tolist()

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Plot the tracks
        if results[0].boxes.id is not None:
            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)))  # x, y center point
                if len(track) > 30:  # retain 90 tracks for 90 frames
                    track.pop(0)

                # Draw the tracking lines
                points = np.hstack(track).astype(np.int32).reshape((-1, 1, 2))
                cv2.polylines(annotated_frame, [points], isClosed=False, color=(track_id*10%255, 100, 255), thickness=2)

        # Display the annotated frame
        cv2.imshow("YOLOv8 Tracking", annotated_frame)


        # out_cat.write(annotated_frame)  # 保存视频

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

参考资料:

  • V8官方开源地址:ultralytics :https://github.com/ultralytics/ultralytics
  • MMYOLO 开源地址:https://github.com/open-mmlab/mmyolo/tree/dev/configs/yolov8
  • https://zhuanlan.zhihu.com/p/633779645?utm_id=0
  • https://blog.csdn.net/caobin_cumt/article/details/131009067
  • 关键的资料:https://github.com/open-mmlab/mmyolo/blob/dev/configs/yolov8/README.md

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ROS]yolov5-7.0部署ROS

YOLOv5是一种目标检测算法,它是YOLO(You Only Look Once)系列算法的最新版本。与其它目标检测算法相比,YOLOv5在速度和准确性方面取得了显著的提升。在ROS(Robot Operating System)中使用Python部署YOLOv5可…

Redis-Cluster集群的部署(详细步骤)

一、环境准备 本次实操为三台机器,关闭防火墙和selinux 注:规划架构两种方案,一种是单机多实例,这里我们采用多机器部署 三台机器,每台机器上面两个redis实例,一个master一个slave,第一列做主库&#xff…

大数据专业毕业能从事什么工作

大数据从业领域很宽广,不管是科技领域还是食品产业,零售业等都是需要大数据人才进行大数据的处理,以提供更好的用户体验,优化库存降低成本预测需求。 大数据开发做什么? 大数据开发分两类,编写Hadoop、Spa…

怎么将pdf合并成一个?将pdf合并成一个的方法

在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个的情况。这不仅能够提高文件管理的便捷性,还能节省存储空间并使阅读更加流畅。那么,怎么将pdf合并成一个呢?在本文中,我将为您介绍几种简单实用的方法&a…

Java 枚举是什么?什么是枚举类?枚举类的用途?

目录 1. 什么是枚举? 2. 枚举类 3. 枚举类的用途 1. 什么是枚举? 我们可以从字面意思来理解,枚:一枚一枚的,举:举例,举出,将二者意思结合起来可以理解为一个一个的举出。 这样听…

Java 复习笔记 - 面向对象篇

文章目录 一,面向对象概述二,类和对象(一)类和对象的概述(二)定义类的补充注意事项 三,封装四,就近原则和this关键字(一)就近原则(二)…

Qt应用开发(基础篇)——文件选择对话框 QFileDialog

一、前言 QFileDialog类继承于QDialog,提供了一个允许用户选择文件或目录的对话框。 对话框窗口 QDialog QFileDialog文件选择对话框允许用户在当前文件系统中选择一个或者多个文件或者文件路径,使用静态函数创建是很简便的方式,比如&#xf…

iOS 组件化的三种方案

组件化 本文主要介绍iOS组件化的三种方案 1、常⽤的三种方案 URL SchemeTarget - ActionProtocol - Class 匹配 1.1、 URL Scheme路由 使 URL 处理本地的跳转通过中间层进⾏注册 & 调⽤ (load方法里把被调用者注册到中间层)注册表⽆需使用反射非…

rate-based 拥塞控制吞吐测量

要点:一个方法无法精确刻画链路画像,就用多种方法组合刻画,设计一个 “自定义平均”。 当前 Linux kernel TCP 实现的 TCP delivery rate 测量机制(BBR 有使用到)如下图: 简略后可展示为下图: 详见 net/ipv4/tcp_…

unity3d:功能验证,收集开源项目的工程合集

unity3d功能验证,和收集开源项目的工程合集 目录持续更新地址 【腾讯文档】UnityForTest目录 https://docs.qq.com/doc/DWm9HSkVhTGdyUUVo 源码 https://github.com/luoyikun/UnityForTest 动画 创建骨骼动画 BoneAnimation场景 代码创建Mesh,骨骼…

疑问:相同Service ID、不同Instance ID的SOME/IP服务如何被使用?

这是我的一个疑问,向各位朋友请教,请帮忙留意回复一下,感谢! 在SOME/IP中,Service ID是用来识别和标记哪个服务,Instance ID是用来识别和标记某个服务的哪个实例。 既然是相同的服务,这个服务…

【vue2第八章】工程化开发和使用脚手架和文件结构

vue工程化开发 & 使用脚手架VUE CLI: 1,核心包传统开发模式:基于js/html/css直接引入核心包开发vue。 2,工程化开发。基于构建工具如(webpack)的环境中开发vue。 vue cli是什么: vue cli是一个vue官方提供的一个…

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说,肯定要学springboot,什么sevlet、maven、java基础,都太老土了,用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”,测试开源项目时,编译总是报错&#xff…

PCFE-GNNs

计算数据预训练后再用实验数据微调,预测 logD7.4,代码:PCFE-GNNs,原文:Improved GNNs for Log D7.4 Prediction by Transferring Knowledge from Low-Fidelity Data,代码解析继续downstream_task。模型框架…

Redis之bigkey问题解读

目录 什么是bigkey? bigkey引发的问题 如何查找bigkey redis-cli --bigkeys MEMORY USAGE bigKey如何删除 渐进式删除 unlink bigKey生产调优 什么是bigkey? bigkey简单来说就是存储本身的key值空间太大,或者hash,list&…

如何排查 Flink Checkpoint 失败问题?

分析&回答 这是 Flink 相关工作中最常出现的问题,值得大家搞明白。 1. 先找到超时的subtask序号 图有点问题,因为都是成功没失败的,尴尬了。 借图: 2. 找到对应的机器和任务 方法很多,这里看自己习惯和公司提供…

小白学Go 基础02-了解Go语言的诞生与演进

Go语言诞生于何时?它的最初设计者是谁?它为什么被命名为Go?它的设计目标是什么?它如今发展得怎么样?带着这些问题,我们一起穿越时空,回到2007年9月Go语言诞生的那一历史时刻吧。 Go语言的诞生 …

视频集中存储/云存储/磁盘阵列/视频监控管理平台EasyCVR接入海康SDK后视频播放崩溃的问题排查

视频集中存储/云存储/磁盘阵列/视频监控管理平台EasyCVR可支持海量视频的轻量化接入与汇聚管理。在视频能力上,EasyCVR可实现视频直播、云端录像、检索与回放、云存储、告警上报、语音对讲、电子地图、H.265视频自动转码、服务器集群、AI智能分析接入以及平台级联等…

视频监控/视频汇聚/安防视频监控平台EasyCVR如何将默认快照的raw格式改为jpg/base64格式?

视频监控/视频汇聚/安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频云存储EasyCVR平台能在复…

Leetcode19 删除链表指定节点

思路:用列表保存链表,然后分情况讨论。 class Solution:def removeNthFromEnd(self, head, n: int):node_list[head]while head.next:headhead.nextnode_list.append(head)remove_loclen(node_list)-n#要移除的位置if len(node_list)1:return Noneif re…