基于yolov8的玉米病害检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

news2024/9/22 15:36:50

【算法介绍】

基于YOLOv8的玉米病害检测系统是一款利用前沿深度学习技术开发的智能农业工具。该系统以YOLOv8为核心算法,通过大量玉米病害图片的训练,能够精准识别玉米害虫病害。

该系统具备高效、准确的检测能力,支持图片、批量图片、视频以及实时摄像头等多种输入方式,为农户提供了极大的便利。用户只需简单操作,即可快速获取病害识别结果及相应的防治建议,有助于及时采取措施,有效控制病害扩散,提升农业生产的效率和可持续性。

此外,该系统还具备可扩展性和可定制性,可根据实际需求进行功能扩展和模型优化。其友好的用户界面和简洁的操作流程,使得非专业人员也能轻松上手,为农业病害管理提供了强有力的技术支持。

总之,基于YOLOv8的玉米病害检测系统是现代农业精准管理和科学化经营的重要工具,对于保障粮食安全和促进农业可持续发展具有重要意义。

【效果展示】

【测试环境】

windows10
anaconda3+python3.8
torch==1.9.0+cu111
ultralytics==8.2.70

【模型可以检测出类别】

["Corn","Damaged Corn","Maize","Plaga"]

【训练信息】

参数
训练集图片数9957
验证集图片数289
训练map90.0%
训练精度(Precision)92.9%
训练召回率(Recall)85.2%

【相关数据集】

https://download.csdn.net/download/FL1623863129/89701028

【部分实现源码】

class Ui_MainWindow(QtWidgets.QMainWindow):
    signal = QtCore.pyqtSignal(str, str)
 
    def setupUi(self):
        self.setObjectName("MainWindow")
        self.resize(1280, 728)
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
 
        self.weights_dir = './weights'
 
        self.picture = QtWidgets.QLabel(self.centralwidget)
        self.picture.setGeometry(QtCore.QRect(260, 10, 1010, 630))
        self.picture.setStyleSheet("background:black")
        self.picture.setObjectName("picture")
        self.picture.setScaledContents(True)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(10, 10, 81, 21))
        self.label_2.setObjectName("label_2")
        self.cb_weights = QtWidgets.QComboBox(self.centralwidget)
        self.cb_weights.setGeometry(QtCore.QRect(10, 40, 241, 21))
        self.cb_weights.setObjectName("cb_weights")
        self.cb_weights.currentIndexChanged.connect(self.cb_weights_changed)
 
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(10, 70, 72, 21))
        self.label_3.setObjectName("label_3")
        self.hs_conf = QtWidgets.QSlider(self.centralwidget)
        self.hs_conf.setGeometry(QtCore.QRect(10, 100, 181, 22))
        self.hs_conf.setProperty("value", 25)
        self.hs_conf.setOrientation(QtCore.Qt.Horizontal)
        self.hs_conf.setObjectName("hs_conf")
        self.hs_conf.valueChanged.connect(self.conf_change)
        self.dsb_conf = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_conf.setGeometry(QtCore.QRect(200, 100, 51, 22))
        self.dsb_conf.setMaximum(1.0)
        self.dsb_conf.setSingleStep(0.01)
        self.dsb_conf.setProperty("value", 0.25)
        self.dsb_conf.setObjectName("dsb_conf")
        self.dsb_conf.valueChanged.connect(self.dsb_conf_change)
        self.dsb_iou = QtWidgets.QDoubleSpinBox(self.centralwidget)
        self.dsb_iou.setGeometry(QtCore.QRect(200, 160, 51, 22))
        self.dsb_iou.setMaximum(1.0)
        self.dsb_iou.setSingleStep(0.01)
        self.dsb_iou.setProperty("value", 0.45)
        self.dsb_iou.setObjectName("dsb_iou")
        self.dsb_iou.valueChanged.connect(self.dsb_iou_change)
        self.hs_iou = QtWidgets.QSlider(self.centralwidget)
        self.hs_iou.setGeometry(QtCore.QRect(10, 160, 181, 22))
        self.hs_iou.setProperty("value", 45)
        self.hs_iou.setOrientation(QtCore.Qt.Horizontal)
        self.hs_iou.setObjectName("hs_iou")
        self.hs_iou.valueChanged.connect(self.iou_change)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setGeometry(QtCore.QRect(10, 130, 72, 21))
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setGeometry(QtCore.QRect(10, 210, 72, 21))
        self.label_5.setObjectName("label_5")
        self.le_res = QtWidgets.QTextEdit(self.centralwidget)
        self.le_res.setGeometry(QtCore.QRect(10, 240, 241, 400))
        self.le_res.setObjectName("le_res")
        self.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(self)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 30))
        self.menubar.setObjectName("menubar")
        self.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(self)
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)
        self.toolBar = QtWidgets.QToolBar(self)
        self.toolBar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
        self.toolBar.setObjectName("toolBar")
        self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
        self.actionopenpic = QtWidgets.QAction(self)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/images/1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionopenpic.setIcon(icon)
        self.actionopenpic.setObjectName("actionopenpic")
        self.actionopenpic.triggered.connect(self.open_image)
        self.action = QtWidgets.QAction(self)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/images/2.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.action.setIcon(icon1)
        self.action.setObjectName("action")
        self.action.triggered.connect(self.open_video)
        self.action_2 = QtWidgets.QAction(self)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/images/3.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.action_2.setIcon(icon2)
        self.action_2.setObjectName("action_2")
        self.action_2.triggered.connect(self.open_camera)
 
        self.actionexit = QtWidgets.QAction(self)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/images/4.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionexit.setIcon(icon3)
        self.actionexit.setObjectName("actionexit")
        self.actionexit.triggered.connect(self.exit)
 
        self.toolBar.addAction(self.actionopenpic)
        self.toolBar.addAction(self.action)
        self.toolBar.addAction(self.action_2)
        self.toolBar.addAction(self.actionexit)
 
        self.retranslateUi()
        QtCore.QMetaObject.connectSlotsByName(self)
        self.init_all()

【使用步骤】

使用步骤:
(1)首先根据官方框架https://github.com/ultralytics/ultralytics安装教程安装好yolov8环境,并安装好pyqt5
(2)切换到自己安装的yolov8环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可

【提供文件】

python源码
yolov8n.onnx模型(不提供pytorch模型)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)

【源码下载地址】

https://download.csdn.net/download/FL1623863129/89701038

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

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

相关文章

7.整数反转

7.整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 假设环境不允许存储 64 位整数(有符号或无符号)。 示例 1&#x…

Linux主机网络参数的设置—IP地址的作用和类型

网络参数管理 一.网络参数 主机名,IP地址,子网掩码,网关,DNS服务器地址 1.配置主机名 hostname命令来查看当前系统的主机名, hosnamectl set-hostname 修改centos7的主机名, 建议以FQDN的&#xff…

顶级 USB 恢复工具探讨:2024 -2025 年最佳 USB 数据恢复

在数字数据与物理文档一样重要的时代,丢失 USB 驱动器中的数据可能是一种令人恐慌的经历。无论是重要的工作文件、珍贵的照片还是重要文档,数据丢失都会以难以想象的方式让您倒退。值得庆幸的是,一些 USB 恢复工具旨在帮助您度过这些可怕的时…

【Delphi】一种生成透明 Icon 图标方法、原理

在程序开发中,我们会遇到制作程序的主图标,windows下程序的图标给是要求是ico格式,也就是常说的Icon。本文介绍一种Delphi利用windos API生成icon的方法。 在制作ico图标的时候,我们需要两幅bitmap图片,一幅我们称作掩…

单片机中的定时器:精确时间的掌控者

在单片机的世界里,定时器就像是一个精确的时间守护者,默默地为各种任务提供准确的时间基准。从简单的定时功能到复杂的实时控制系统,定时器都发挥着至关重要的作用。本文将深入探讨单片机中的定时器,包括其工作原理、应用场景以及…

华为OD机试真题 - 高效货运 - 暴力搜索(Java/Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Java/Python/JS/C/C++)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX…

JAVA开源项目 加油站管理系统 计算机毕业设计

本文项目编号 T 003 ,文末自助获取源码 \color{red}{T003,文末自助获取源码} T003,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

CTFHub技能树-备份文件下载-网站源码

目录 法一:使用自动化工具扫描 方法二:使用dirsearch目录扫描器扫描 法一:使用自动化工具扫描 import requestsurl1 http://challenge-0e8fe706d11de65e.sandbox.ctfhub.com:10800/ # url为被扫描地址,后不加‘/’# 常见的网…

【论文分享】sIOPMP: Scalable and Efficient I/O Protection for TEEs 24‘ASPLOS

目录 AbstractINTRODUCTIONBACKGROUND and MOTIVATIONDMA AttackIOPMPRelated Work: Other I/O Isolation Mechanisms DESIGN OVERVIEWDesign GoalsPerformanceSecurityScalability Threat ModelPrivilege software attacksMalicious device attacks DETAILED DESIGNMulti-stag…

【C++】智能指针——auto_ptr,unique_ptr,shared_ptr

目录 auto_ptr unique_ptr shared_ptr 并发问题 循环引用问题 个人主页:传送门——>东洛的克莱斯韦克 智能指针的原理:传送门——>智能指针的原理 auto_ptr 使用方法参考官方文档 传送门——>auto_ptr文档 auto_ptr并不是一个优秀的智能…

在线将多张图片拼接起来图工具HTML源码

源码介绍 在线将多张图片拼接成一张图片,多图合一并导出下载。无需本地安装软件。 下载时,使用日期时间作为文件名,规避图片文件名相同造成的覆盖问题;也能省去一部覆盖确认操作 多语言支持 源码截图 源码下载 在线将多张图片…

Xilinx实现对数运算

简介 本章节实现任意底数和真数值的转换,设计中一般有两种实现方法: 1、在外部直接算好对数值,按照数值范围做个表,存在ram里,到时候查表。为了减少表深度,提高资源利用率,可以考虑去掉部分低位数值,损失一定的精度。 2、log10(x)=ln(x) * log10(e) , log10(e)是常数可…

电信500M宽带+AX210无线网卡测速

500M电信宽带,PC的Wifi模块是AX210 一、PC测速 2.4G Wifi 5G Wifi 有线网口 二、 手机端,小翼管家App测速 2.4G Wifi 5G Wifi 结论: 手机上网要快的话,还是要选择5G wifi

【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作

目录 🍔 Linux用户和权限 1.1 Linux 用户相关概念 1.2 用户权限 1.3 文件/文件夹权限的修改 🍔 Linux实用操作 2.1 快捷键 2.2 软件安装/服务启动状态管理/创建软连接 yum install systemctl 对服务进行管理 ln 软连接 2.3 IP 和 主机名 2.4…

华为云征文 | 快速部署华为云Flexus X实例,开启您的云端之旅

需要了解 本文章主要讲述华为云Flexus X实例的介绍,以及在华为公有云平台,购买和配置华为云Flexus X实例的搭建指南选择合适的云服务器: 本文采用的是 华为云服务器 Flexus X 实例(推荐使用)共有有镜像: Hu…

关于C++的一些使用模版-初阶

一、泛型编程 如何实现一个通用的交换函数呢?,交换的值是两个类型不同的数据。 代码如下&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream>//如何实现一个通用的交换函数呢&#xff1f; void swap(int& left, int &right) {int tmp lef…

【拉取Git项目到本地,知识小记,后续再改】

前提&#xff1a;Git已经安装好 https://blog.csdn.net/mukes/article/details/115693833 安装至步骤2.2.4即可 第一步创建本地项目目录 第二步获取他人提供的项目git地址或者自己在网上找的他人项目的git地址 Git 全局设置: git init git config --global user.name “ASxx”…

开点线段树、区间最值和历史最值

1.修改&#xff1a;用到了相应的空间就开&#xff0c;没有用到就不开。cnt拓展节点编号&#xff0c;此时各范围的节点编号不再按照i*2和i*21的对应关系建立 2.查询&#xff1a; 如果查询时一段范围没有建立过&#xff0c;就说明这段范围的累加和就是0 3.空间估计&#xff1a;一…

尚品汇-项目目前存在问题、引入MQ(四十二)

目录&#xff1a; &#xff08;1&#xff09;目前存在的问题 &#xff08;2&#xff09;消息队列解决什么问题 &#xff08;3&#xff09;消息队列工具 RabbitMQ &#xff08;4&#xff09;搭建mq测试环境service-mq 下面我们先做的是前面后台管理系统商品上下架的没完成的…

C++逆向分析之条件语句和循环语句

一.C逆向条件结构基础入门 大家写过相关的算法吗&#xff1f; 加密代码中会涉及循环和分支&#xff0c;你要识别算法&#xff0c;首先就是需要将它的算法处理流程识别出来。当我们还原出等价的高级代码之后&#xff0c;就没有逆向分析人员的事情了&#xff0c;因为接下来涉及…