基于yolov8的麦穗计数系统python源码+onnx模型+评估指标曲线+精美GUI界面

news2024/9/22 15:25:50

【算法介绍】

基于YOLOv8的麦穗计数系统是一种利用深度学习技术,特别是YOLOv8目标检测模型,对小麦麦穗进行自动识别和计数的系统。YOLOv8作为Ultralytics公司开发的最新版本,具备更高的性能和灵活性,能够在各种硬件平台上运行,从CPU到GPU。

该系统首先通过收集并标注大量的小麦麦穗图像数据,构建出一个高质量的麦穗检测数据集。随后,利用这些数据对YOLOv8模型进行训练,使其能够学习到麦穗的特征,并准确地在图像中识别和定位麦穗。

在训练完成后,系统可以将待检测的麦穗图像输入到训练好的YOLOv8模型中,模型会输出每个检测到的麦穗的位置和置信度。通过对这些检测结果的统计,系统可以自动计算出图像中的麦穗数量。

基于YOLOv8的麦穗计数系统具有高效、准确、自动化程度高等优点,可以大大提高麦穗计数的效率和准确性,为农业生产和科学研究提供有力支持。

【效果展示】

【测试环境】

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

【模型可以检测出类别】

wheat

【数据集】

https://blog.csdn.net/FL1623863129/article/details/138579100

【部分实现源码】

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模型,如需pytorch模型需要根据数据集重新训练)
训练的map,P,R曲线图(在weights\results.png)
测试图片(在test_img文件夹下面)

【视频演示】

基于yolov8的麦穗计数系统python源码+onnx模型+评估指标曲线+精美GUI界面_哔哩哔哩_bilibili【测试环境】windows10anaconda3+python3.8torch==1.9.0+cu111ultralytics==8.2.70更多信息:https://blog.csdn.net/FL1623863129/article/details/141639532, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:icon-default.png?t=N7T8https://www.bilibili.com/video/BV1yDsTeEEBB/

【源码下载地址】

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

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

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

相关文章

干货整理|一篇文章告诉你监控电脑的软件叫什么?10款电脑屏幕监控软件任你选择!(珍藏篇)

现代社会,电脑屏幕监控软件已成为企业管理和家庭教育中不可或缺的工具。 这类软件不仅可以帮助管理者监督员工的工作效率,保障企业信息安全,还能让家长更好地了解孩子的上网行为。 下面是精心挑选的10款备受好评的电脑屏幕监控软件&#xf…

【python】懂车帝字体反爬逐层解密案例(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

台灯怎么选对眼睛好?护眼台灯怎么选的六大技巧一定要看!

根据2024年国家卫健委最新公布的数据,我国儿童青少年总体近视率为52.7%,这一数据表明视力健康已成为不容忽视的问题。小学生近视率为42%,初中生高达80.7%,高中生更是达到了85.7%。儿童的学习环境对学习效果和视力健康有着重要影响…

系统中没有安装 git

系统中没有安装 git 安装git一、CentOS/RHEL 系统二、Ubuntu/Debian 系统 这个错误表明系统中没有安装 git。 安装git 一、CentOS/RHEL 系统 使用以下命令安装: sudo yum install git二、Ubuntu/Debian 系统 使用以下命令安装: sudo apt install g…

Java技术栈 —— Spark入门(二)之实时WordCount

Java技术栈 —— Spark入门(二) 一、kafka1.1 创建topic1.2 准备input与查看output 二、spark2.1 spark下的程序文件2.2 用spark-submit提交作业 参考文章: 参考文章或视频链接[1] 《Kafka Spark Stream实时WordCount》 实验环境&#xff…

使用dx工具将jar和class打包成dex

最近用到将三方jar和自己的class打包成dex的需求,研究了下,遇到了上些问题,最终成功了,记录下: 将jar放在ss目录下,将class放在与包名对应的目录下 com.example.myapplication.Heav.class 打包命令&#x…

android13固定app方向 强制app方向

总纲 android13 rom 开发总纲说明 1.前言 经常遇到客户有固定或者设置应用方向,不让他们改成其他方向的需求。今天我们就来处理这种问题。 2.问题分析 在 Android 10 之前,显示旋转的处理逻辑分散在多个类和模块中,Android 10 统一了这些逻辑,集中在 DisplayRotation.ja…

【数据结构】队列(Queue)

目录 队列概念 ​方法 队列模拟实现 链表实现队列 入队列 出队列 获取队头元素 数组实现队列 入队列 出队列 返回头队列 返回尾队列 完整代码 双链表实现队列 数组实现队列(设计循环队列) 队列概念 队列:只允许在一段进行插入…

传奇开服教程之新GOM引擎登录器配置教程

现在新GOM引擎的版本比以前多了一些,是时候和你们分享一期新GOM引擎登录器配置教程了,顺便来和你们分享下新GOM引擎和老GOM引擎的区别。 新GOM引擎与老GOM的区别 1、老GOM引擎1108的pak.txt就在登录器配置文件夹下,新GOM引擎的pak.txt在登录…

谷歌浏览器与edge哪个好用

浏览器是我们工作和生活中的重要工具,其中谷歌浏览器与edge是两款备受关注的浏览器工具。那么这二者中,哪一款更胜一筹呢?本文将比较这两款浏览器的功能、性能和用户体验等,帮助大家做出明智的选择。 谷歌浏览器的历史与发展&…

Java面试宝典-java基础01

Java面试宝典-java基础01 1、java的跨平台性2、Java是如何实现跨平台性的?3、JDK 和 JRE 有什么区别?4、为何要配置Java环境变量?5、Java都有哪些特性?6、 和 equals 的区别是什么?7、Java中有哪些数学函数&#xff1f…

1894. 二分查找左侧边界

代码 #include<bits/stdc.h> using namespace std; int a[110000],n,q; int zc(int x) {int l1,rn,mid;while(l<r){mid(lr)/2;if(x<a[mid]) rmid-1;else if(x>a[mid]) lmid1;else if(xa[mid]) rmid-1;}if(a[l]x) return l;else return -1; } int main() {int i…

通过React实现萤石摄像头rtsp地址格式的视频流的web展示

首先&#xff0c;我们需要拿到rtsp格式的流地址&#xff08;rtsp://admin:[password][ip]&#xff09;&#xff0c;其中 password:设备底下的6位数验证码 ip:设备的ipv4地址 这里拿到ip的方式可以直连网线和绑定wifi两种方式 然后下载PC端的萤石工作室&#xff08;下载中心…

【区块链 + 司法存证】印记区块链电子印章 | FISCO BCOS应用案例

电子印章作为传统物理印章的数字化锚定&#xff0c;除了拥有和物理印章一样的法律效力外&#xff0c;还能够有效地为企业增效降 本提质。近年来&#xff0c;随着国家双碳目标的提出以及全球新冠疫情&#xff0c;进一步加速了企业数字化转型的步伐&#xff0c;电子印章 的价值也…

day12JS-Event事件

1. 事件的分类 事件类型包括有系统事件和自定义事件。 2. 初始化事件 1. 创建事件对象&#xff0c;Event是事件对象。 bubbles:true 表示支持冒泡。 var/let 变量名 new Event(事件类型&#xff0c;事件选项是否支持冒泡(可省略)); 2. 创建一个事件目标对象的实例化对象 。…

JetBrains`s IntelliJ IDEA springboot项目 gradle-bin安装 国内加速

gradle wapper加速 可以看到&#xff0c;一般我们直接init的springboot项目会默认使用wapper来安装不同版本的gradle&#xff0c;但services.gradle.org网速过慢&#xff0c;我们选择切换为国内源 发现一篇同样的文档,并在此补充多个源 源名urlgradle(原本)https\://service…

宠物空气净化器哪款更值得推荐?希喂和352哪款更好?

自从几年前我养了一只毛茸茸、眼神灵动的小猫咪&#xff0c;成为了我们家庭的一员后&#xff0c;家里的生活便发生了翻天覆地的变化。每天上班下班前都要安抚它们&#xff0c;避免出现分离焦虑&#xff0c;就算它们没有这个症状&#xff0c;我都害怕它们会出现在这个症状&#…

什么是 AWS CloudWatch?

AWS CloudWatch 是 AWS 提供的一项全面的监控和可观测性服务&#xff0c;使用户能够收集和可视化指标、日志和事件&#xff1b;设置警报&#xff1b;并根据预定义的条件自动执行操作。CloudWatch 提供对 AWS 资源和应用程序的运行状况、性能和运行状态的深入了解&#xff0c;使…

【openpyxl-驯化】一文搞懂python是如何将文本、图片写入到execl中的技巧

【openpyxl-驯化】一文搞懂python是如何将文本、图片写入到execl中的技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

TikTok/Shopee本土多站点涨佣金,卖家如何应对?EasyBoss ERP总结了5大应对策

近日消息&#xff0c;TikTok Shop马来西亚本土店将调整其市场佣金费用与交易费用&#xff0c;并为参与Mall计划的卖家引入Mall佣金费用&#xff0c;新的费率将从2024年9月5日生效。 TikTok Shop马来站佣金费率调整规则 图源&#xff1a;TikTok Shop 注&#xff1a;上述佣金率仅…