YOLOv8目标检测代码如何实现训练、测试、指标评估、调用摄像头实时检测和目标追踪的接口调用脚本 您所在的位置:网站首页 人像追踪检测平台 YOLOv8目标检测代码如何实现训练、测试、指标评估、调用摄像头实时检测和目标追踪的接口调用脚本

YOLOv8目标检测代码如何实现训练、测试、指标评估、调用摄像头实时检测和目标追踪的接口调用脚本

2024-06-03 13:13| 来源: 网络整理| 查看: 265

实现训练、测试、调用摄像头实时检测和追踪的接口调用脚本 目录 介绍环境准备训练模型图片测试视频测试目标跟踪指标评估结论 介绍

YOLOv8是单阶段目标检测的集大成之作,它可以帮助我们在图像或视频中自动识别和定位感兴趣的目标物体。本文将介绍如何调用YOLOv8的API实现训练、测试和调用摄像头进行实时检测和追踪。本文使用的代码为YOLOv8官方仓库。ultralytics官方链接https://github.com/ultralytics/ultralytics😊

环境准备 import netron import torch from PIL import Image import onnx import sys import os import numpy as np from pathlib import Path from typing import Union import cv2 from ultralytics import YOLO

训练模型

在YOLOv8中使用下面的代码即可实现公共数据集的自动下载和模型训练。如果你需要是使用自制数据集进行训练,首先需要增加新数据集的配置文件xx.yaml,需要准备训练数据集和标注文件。将图像文件和相应的标注文件存储在一个文件夹中,并按照一种标准格式进行标注,YOLOv8默认使用的是YOLO格式标注。然后,使用目标检测框架提供的训练代码,指定训练参数和路径,开始训练模型。具体的训练命令取决于您选用的目标检测框架,以下是一个示例:

def train(): # 加载模型配置文件,这里使用v8的m模型结构 model = YOLO('yolov8m.yaml') # 做预训练 # model = YOLO('yolov8x.pt') # model = YOLO('yolov8n.yaml').load('yolov8n.pt') # 训练模型 model.train(data="coco.yaml", epochs=100, imgsz=640)

上述代码中加载模型配置文件时,如果加载的是 .yaml 文件格式,采用的是从头训练的方案。如果加载的是 .pt 格式则采用的是对应的预训练方案,这种方式在训练时会额外下载对应模型的预训练权重(如果下载失败可考虑科学上网),在训练模型代码中配置数据集文件data、训练迭代次数epochs和输入图片尺寸imgsz。通过执行上述命令,训练代码将读取图像和标注文件,然后使用指定的配置文件和预训练权重进行模型训练。训练过程可能需要一些时间,具体取决于数据集的大小和计算资源的性能。

图片测试

在训练完成后,我们可以使用训练的模型权重进行测试。以下是测试图片代码:

def test_img(): # 训练好的模型权重路径 model = YOLO("YOLOv8/runs/detect/train1/weights/best.pt") # 测试图片的路径 img = cv2.imread("YOLOv8/7.jpg") res = model(img) ann = res[0].plot() while True: cv2.imshow("yolo", ann) if cv2.waitKey(1) & 0xFF == ord('q'): break # 设置保存图片的路径 cur_path = sys.path[0] print(cur_path, sys.path) if os.path.exists(cur_path): cv2.imwrite(cur_path + "out.jpg", ann) else: os.mkdir(cur_path) cv2.imwrite(cur_path + "out.jpg", ann)

以上代码主要实现了一个测试图片的功能 。首先,通过导入训练好的模型权重来初始化YOLO模型。然后,读取指定路径下的测试图片,并使用YOLO模型对图片进行推理,得到目标检测结果。接下来,通过将检测结果中的目标物体绘制在图片上形成标注框的方式,将标注框的图片显示出来。用户可以通过按下键盘上的"q"键来退出显示。最后,将带有标注框的图片保存到当前路径下作为"out.jpg"的图片文件。 🔍🖼️

视频测试

使用训练的模型权重进行测试。以下是测试视频代码

def test_video(): model = YOLO("YOLOv8/runs/detect/train1/weights/best.pt") # 测试视频存放目录 pa = "/home/you/Downloads/l.mp4" cap = cv2.VideoCapture(pa) # 调用设备自身摄像头 # cap = cv2.VideoCapture(0) # -1 # 设置视频尺寸 size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)),) # 第一个参数是将检测视频存储的路径 out = cv2.VideoWriter('save.mp4', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 40, size) while cap.isOpened(): ret, frame = cap.read() if ret: res = model(frame) ann = res[0].plot() cv2.imshow("yolo", ann) out.write(ann) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() cap.release()

以上代码首先加载了一个模型权重,然后通过cv2.VideoCapture打开指定路径下的视频文件,获取视频的尺寸。接下来,创建了一个cv2.VideoWriter对象,用于将检测结果保存成新的视频文件。然后进入一个循环中,不断读取视频的帧,并利用加载的模型对每一帧进行检测。检测结果通过plot方法绘制在帧上,并通过cv2.imshow显示在窗口中。同时,将处理后的帧写入到保存视频的对象中,最后通过按下"q"键退出循环,关闭窗口并释放资源。😊此代码实现了对视频进行目标检测,并在检测的帧上绘制了检测结果,并保存了检测后的视频。

目标追踪

这段代码实现了使用YOLOv8模型实现botsort目标跟踪,并在每一帧上绘制了检测框和目标ID,并保存了跟踪后的视频。

def tracker(): pa = "/home/you/Downloads/l.mp4" cap = cv2.VideoCapture(pa) size = (int(cap .get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap .get(cv2.CAP_PROP_FRAME_HEIGHT)),) model = YOLO("YOLOv8/runs/detect/train1/weights/best.pt") flag = 0 out = cv2.VideoWriter('save.mp4', cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 40, size) while True: if flag


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有