基于YOLOv8的多目标检测与自动标注软件【python源码+PyqtUI界面+exe文件】【深度学习】

news2024/11/16 5:21:39

基本功能演示

在这里插入图片描述

摘要:YOLOv8是YOLO系列最新的版本,支持多种视觉任务。本文基于YOLOv8的基础模型实现了80种类别的目标检测,可以对图片进行批量自动标注,并将检测结果保存为YOLO格式便于后续进行其他任务训练。本文给出完整的Python实现代码,并且通过PyQT5实现了UI界面,更方便进行功能的展示,并且提供了可执行的exe文件。该软件支持图片视频以及摄像头进行目标检测,并保存检测结果;支持图片自动标注保存支持检测类别选择。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习,完整的代码资源文件获取方式见文末

文章目录

  • 基本功能演示
  • 前言
  • 一、软件核心功能介绍及效果演示
    • 软件主要功能
    • 80个目标检测类别说明
    • (1)图片检测演示
    • (2)视频检测演示
    • (3)摄像头检测演示
    • (4)保存检测结果与自动标注标签文件
  • 二、YOLOv8目标检测的基本原理
    • 1.基本原理
    • 2.核心功能代码实现
      • 2.1 YOLOv8检测图片代码
      • 2.2 YOLOv8检测视频代码
  • 【获取方式】
  • 结束语

点击跳转至文末《完整相关文件及源码》获取


前言

YOLOv8是一种前沿的计算机视觉技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性。这种模型属于Ultralytics平台,它的优势在于速度快且准确率高,这得益于其"You Only Look Once"(你仅需看一遍)的工作原理。不仅如此,YOLOv8不仅限于检测任务,还拓展到了分类、分割、跟踪,甚至姿态估计等多个领域。

目标检测作为计算机视觉的重要任务之一,具有广泛的应用价值。例如,在交通管理中,可以通过实时车辆检测和跟踪来更好地管理交通流量;在智能监控中,可以用于识别异常行为或危险情况等。因此,YOLOv8这类高效准确的目标检测模型在各领域的应用具有重要意义。

博主根据YOLOv8的目标检测技术,基于python与Pyqt5开发了一款简洁的支持80个类别的目标检测自动化标注软件,可支持图片、视频以及摄像头目标检测,同时支持检测类型选择图片的批量自动标注,并将检测结果保存为YOLO格式的文件,用于后续训练。

软件基本界面如下图所示:
在这里插入图片描述

觉得不错的小伙伴,感谢点赞、关注加收藏!如果大家有任何建议或意见,欢迎在评论区留言交流!

一、软件核心功能介绍及效果演示

软件主要功能

1. 支持80个类别的目标检测,详细目标类别见下方说明;
2. 支持图片、视频及摄像头进行检测,并显示目标位置目标总数,保存检测结果;
3. 支持图片批量检测与自动标注,并将结果保存为YOLO格式文件,用于后续模型训练;
4. 支持单个类别的目标选择与检测,并保存检测结果与YOLO标签文件。

80个目标检测类别说明

本文是基于YOLOv8的基础训练模型进行开发的,模型使用的是COCO数据集。支持80个类别的目标检测,具体目标类别名称如下:

[   '人','自行车', '汽车', '摩托车', '飞机', '公共汽车', '火车',
    '卡车', '船', '交通灯', '消防栓', '停车标志', '停车收费表',
    '长凳', '鸟', '猫', '狗', '马', '羊', '牛', '大象', '熊',
    '斑马', '长颈鹿', '背包', '雨伞','手袋', '领带', '手提箱',
    '飞盘', '雪橇', '滑雪板', '运动球', '风筝', '棒球棒',
    '棒球手套', '滑板', '冲浪板', '网球拍', '瓶子', '酒杯', '杯子',
    '叉子', '刀', '汤匙', '碗', '香蕉', '苹果', '三明治', '橙子',
    '西兰花', '胡萝卜', '热狗', '披萨', '甜甜圈', '蛋糕', '椅子',
    '沙发', '盆栽植物', '床', '餐桌', '马桶', '电视', '笔记本电脑',
    '鼠标', '遥控器', '键盘', '手机', '微波炉', '烤箱', '烤面包机',
    '水槽', '冰箱', '书', '时钟', '花瓶', '剪刀', '泰迪熊', '吹风机', '牙刷']

包含了常见的人、汽车、公共汽车、交通灯等。

(1)图片检测演示

点击图片图标,选择需要检测的图片,或者点击文件夹图标,选择需要批量检测图片所在的文件夹,操作演示如下:
1. 点击选择类别下拉框后,会只对图片指定类别进行检测【默认检测全部类别】。
2. 点击保存按钮,会同时保存指定类别检测结果图片与其对应的YOLO标签文件。

在这里插入图片描述

(2)视频检测演示

点击视频图标,选择需要检测的视频,就会自动显示检测结果。也可以通过下拉框选择指定类别进行检测。点击保存按钮,会对视频检测结果进行保存,存储路径为:save_data目录下。
在这里插入图片描述

(3)摄像头检测演示

点击摄像头图标,可以打开摄像头进行检测,同样可以通过下拉框选择指定类别进行检测。
在这里插入图片描述

(4)保存检测结果与自动标注标签文件

点击保存按钮后,对于图片,会同时保存指定类别检测结果图片与其对应的YOLO标签文件;对于视频,只会保存指定类别检测结果视频。
检测的图片与视频结果会存储在save_data目录下:
在这里插入图片描述
对于图片,会将指定检测目标的结果存储为目标检测中YOLO格式,方便后续进行模型进行训练使用,存储路径为:save_data/yolo_labels。结果如下图所示:
在这里插入图片描述
自动标注的存储格式为YOLO目标检测格式说明如下:【保存的文件名与图片名称相同】
在这里插入图片描述

二、YOLOv8目标检测的基本原理

1.基本原理

YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性。主要的创新点包括一个新的骨干网络、一个新的 Ancher-Free 检测头和一个新的损失函数,可以在从 CPU 到 GPU 的各种硬件平台上运行

YOLOv8不仅限于检测任务,还拓展到了分类、分割、跟踪,甚至姿态估计等多个领域。比如,通过使用已经训练好的yolov8x-seg.pt模型,可以实现对输入图像的实例分割操作,从而得到图像中不同物体的分割结果。此外,利用YOLOv8还可以实现实时车辆检测、车辆跟踪、实时车速检测,以及检测车辆是否超速等功能。
其主要网络结构如下:
在这里插入图片描述
本文基于YOLOv8的基础的目标检测模型,该多目标检测与自动标注软件的开发。支持80种类型目标的检测与结果保存,同时能批量将图片的检测结果保存为YOLO格式,便于后续模型训练的使用。

2.核心功能代码实现

2.1 YOLOv8检测图片代码

from ultralytics import YOLO
import cv2
# 加载预训练模型
model = YOLO("yolov8n.pt", task='detect') 
# model = YOLO("yolov8n.pt") task参数也可以不填写,它会根据模型去识别相应任务类别
# 检测图片
results = model("./ultralytics/assets/bus.jpg")
res = results[0].plot()
cv2.imshow("YOLOv8 Inference", res)
cv2.waitKey(0)

在这里插入图片描述

2.2 YOLOv8检测视频代码

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO('yolov8n.pt')
print('111')
# Open the video file
video_path = "1.mp4"
cap = cv2.VideoCapture(video_path)

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

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

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

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", 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()

请添加图片描述
以上便是关于YOLOv8的多目标检测与自动标注原理与代码介绍。针对以上内容,博主基于pythonPyqt5开发了一个可视化的YOLOv8多目标检测与自动标注软件,能够很好的支持图片、视频及摄像头的目标检测,支持检测类型的选择,同时支持自动标注文件保存为YOLO格式。

关于该YOLOv8多目标检测与自动标注软件涉及到的完整源码、UI界面代码以及可执行的exe【win10,64位】等相关文件,均已打包上传,感兴趣的小伙伴可以通过下载链接自行获取。


【获取方式】

关注下方名片G-Z-H:【阿旭算法与机器学习】,回复【目标检测】即可获取下载方式

本文涉及到的完整全部程序文件:包括python源码、UI文件、可执行的exe文件等(见下图),获取方式见文末:
在这里插入图片描述

注意:该代码基于Python3.9开发,运行界面的主程序为MainProgram.pyMainProgram.exe为可执行文件,其他测试脚本说明见上图。为确保程序顺利运行,请按照程序运行说明文档txt配置软件运行所需环境。

关注下方名片GZH:【阿旭算法与机器学习】,回复【目标检测】即可获取下载方式


结束语

以上便是博主开发的关于YOLOv8多目标检测与自动标注软件的全部内容,由于博主能力有限,难免有疏漏之处,希望小伙伴能批评指正
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!

觉得不错的小伙伴,感谢点赞、关注加收藏哦!

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

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

相关文章

PW2162芯片

可知该芯片为4.5V~16V输入,2A工作电流 ,下图为官方参考原理图。 输出的电压根据下公式计算,可知改变选用不同阻值的R1和R2,可控制输出不同的电压。 原理图上的电容主要用于滤波,电感是为了防止电流过大。 立创EDA画板…

【Qt控件之QCommandLinkButton】概述及使用

概述 QCommandLinkButton小部件提供了一个Vista风格的命令链接按钮。 命令链接是Windows Vista引入的一种新控件。它的使用方式类似于单选按钮,用于在一组互斥选项之间进行选择。命令链接按钮不应单独使用,而是作为向导和对话框中单选按钮的替代品&…

移动App安全检测的必要性,app安全测试报告的编写注意事项

随着移动互联网的迅猛发展,移动App已经成为人们日常生活中不可或缺的一部分。然而,虽然App给我们带来了便利和乐趣,但也伴随着一些潜在的安全风险。黑客、病毒、恶意软件等威胁着用户的隐私和财产安全,因此进行安全检测就显得尤为…

YOLOv7改进:动态蛇形卷积(Dynamic Snake Convolution),增强细微特征对小目标友好,实现涨点 | ICCV2023

💡💡💡本文独家改进:动态蛇形卷积(Dynamic Snake Convolution),增强细长微弱的局部结构特征与复杂多变的全局形态特征,对小目标检测很适用 Dynamic Snake Convolution | 亲测在多个数据集能够实现大幅涨点 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.…

创新与合规共舞 百望云铸就未来档案数字化管理之路

随着人工智能技术与数字经济的深入发展,数据要素的基础性、战略性资源地位日益凸显,也驱动业内专家学者们持续深入思考——档案资源如何纳入数据资产框架内,如何面向数字中国、数字经济等国家战略发挥其凭证、情报、记忆、数据要素价值&#…

DPDK之eventdev_pipeline源码解析

DPDK之eventdev_pipeline源码解析 引言1 实现原理1.1 数据接收1.2 数据发送1.3 事件调度1.4 struct rte_event 2 核心API3 源码解析3.1 generic实现3.2 tx enq实现 引言 DPDK Eventdev库是DPDK基于事件驱动的编程模型。其中eventdev_pipeline实现了对该模型的应用例子。 1 实…

linux内核模块符号导出

一、内核模块符号导出简介 驱动程序编译生成的 ko 文件是相互独立的,即模块之间变量或者函数在正常情况下无法进行互相访问。而一些复杂的驱动模块需要分层进行设计,这时候就需要用到内核模块符号导出。   内核符号导出指的是在内核模块中导出相应的函…

[MAUI]深入了解.NET MAUI Blazor与Vue的混合开发

文章目录 Vue在混合开发中的特点创建MAUI项目创建Vue应用使用element-ui组件库JavaScript和原生代码的交互传递根组件参数从设备调用Javascript代码从Vue页面调用原生代码 读取设备信息项目地址 .NET MAUI结合Vue的混合开发可以使用更加熟悉的Vue的语法代替Blazor语法&#xff…

Cypress安装使用

node.js 安装使用Cypress总是会看见node.js,那就先看看node.js是什么。JavaScript以前运行需要在浏览器中(浏览器内置解释器),通过node.js框架内置v8引擎(也就是可以执行js脚本所需的工具),这样…

金翅擘海|人大女王金融硕士庞雪雨:行学之道,在自律、在勤勉、在止于至善

庞雪雨 中国人民大学-加拿大女王大学金融硕士2022-2023级行业高管班 光大保德信资产管理有限公司董事总经理 当我进入到人大校园的那一刻,映入眼帘的是明德楼,由此我想到了《大学》,大学开篇中讲到,大学之道,在明明德&…

如何理解Linux字符设备驱动?

我们学习编程的时候,一般都会从hello程序开始。同样的,学习Linux驱动,我们也是从最简单的hello驱动学起。 一、驱动层和应用层 看一下STM32裸机开发与嵌入式Linux开发的一些区别: 嵌入式Linux的开发方式与STM32裸机开发的方式有…

【数值分析】1 - 误差及有关概念

文章目录 一、误差的背景介绍1.1 误差的来源与分类1.2 误差的传播与积累1.3 例题1.3.1 公式一1.3.2 公式二1.3.3 总结 二、误差与有效数字2.1 绝对误差与绝对误差限2.2 相对误差和相对误差限 三、有效数字3.1 有效数字的定义和标准浮点式3.1.1 例题 3.2 有效数字与相对误差的关…

【一文清晰】单元测试到底是什么?应该怎么做?

我是java程序员出身,后来因为工作原因转到到了测试开发岗位。测试开发工作很多年后,现在是一名自由职业者 1、什么是单元测试 2、该怎么做单元测试 一、什么是单元测试? 单元测试(unit testing),是指对软件…

4款文件恢复工具推荐,恢复数据就靠它们!

“想问问大家在使用电脑时有什么好的文件恢复工具推荐吗?最近好像有点粗心,经常误删文件,非常需要一个有用的恢复工具,希望大家给些意见!” 在日常工作或学习中,由于各种原因造成的文件丢失是很正常的情况。…

什么是模拟芯片,模拟芯片都有哪些测试指标?

模拟芯片又称处理模拟信号的集成电路 模拟集成电路主要是指由电容、电阻、晶体管等组成的模拟电路集成在一起用来处理模拟信号的集成电路。有许多的模拟集成电路,如运算放大器、模拟乘法器、锁相环、电源管理芯片等。 模拟集成电路的主要构成电路有:放…

打造属于自己的vue图标库

hfex-icon图标库 Install npm i -D hfex-icon主要提供2种使用方式 方式一 通过svg图标资源,借助unplugin-icons库将svg图标文件生成vue组件,然后通过vue组件的引入方式在vue中使用 unplugin-icons 兼容vue2和vue3 在vue.config.js的plugins中配置…

“轻松实现文件夹批量重命名:使用顺序编号批量改名“

你是否曾经需要大量修改文件夹名称?或者需要为文件夹添加有序编号以便于管理?下面就教你一个简单的方法,轻松实现文件夹批量重命名,使用顺序编号批量改名。 首先我们要进入文件批量改名高手主页面,并在板块栏里选择“文…

java springboot VUE粮食经销系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE 粮食经销系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发) ,系统具有完整的源代码和数…

kafka、zookeeper、flink测试环境、docker

1、kafka环境单点 根据官网版本说明(3.6.0)发布,zookeeper依旧在使用状态,预期在4.0.0大版本的时候彻底抛弃zookeeper使用KRaft(Apache Kafka)官方并给出了zk迁移KR的文档 2、使用docker启动单点kafka 1、首先将kafka启动命令,存储为.servi…

LLC 三相移相PWM产生原理分析

LLC 三相移相PWM产生原理分析 void MX_PWM_Stop(void) {//----------------------使用停止函数后会导致移相角度为60度---------------------------------------------------------------- #if 1 //------Tim1 PWM定时器初始化------------------ HAL_TIM_OC_Stop(&htim1…