基于yolov8的106种鲜花识别花朵检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

news2024/11/15 12:19:15

【算法介绍】

基于YOLOv8的106种鲜花识别花朵检测系统是一项融合了先进深度学习技术的创新应用。该系统利用YOLOv8算法,这一目前最先进的目标检测模型之一,实现了对106种不同花卉的快速、准确识别。

YOLOv8以其速度快、准确性高和鲁棒性强的特点,在花卉识别任务中展现出卓越性能。系统通过构建包含丰富多样花卉图像的数据集,并采用高效的网络结构和优化策略进行模型训练,从而确保了对各种花卉特征的高效提取和准确分类。

在实际应用中,该系统能够快速识别并标记出图像中的花卉种类,同时提供位置信息和置信度评分,为用户提供了直观、便捷的识别体验。无论是植物爱好者、园艺师还是科研人员,都可以通过该系统轻松实现花卉的自动识别与分类,提高工作效率和准确性。

此外,该系统还支持实时检测功能,能够在视频流或实时摄像头画面中实时识别花卉,进一步拓展了其应用场景和实用价值。未来,随着技术的不断发展和优化,基于YOLOv8的鲜花识别花朵检测系统将在更多领域发挥重要作用,为花卉保护、园林设计等领域提供有力支持。

【效果展示】

【测试环境】

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

【模型可以检测出类别】

[“Acaulis”,“Alstroemeria”,“Artichoke”,“Bommaji”,“Calla”,“Carnation”,“Chamnahree”,“Cosmos”,“Curcuma”,“Dalnancho”,“Dandelion”,“Dongja”,“Doraji”,“Echinacea”,“Englishdaisy”,“FranceGukhwa”,“Fritillaria”,“Geuknakjo”,“Geumeocho”,“Geumggyeguk”,“Geumjanhwa”,“Geummaehwa”,“GgangGgangyee”,“Gloriosa”,“Guemgangchorong”,“Gyeongyeopduran”,“Halmi”,“Jjille”,“Lentenrose”,“Marigold”,“Minariajaebi”,“Mugunghwa”,“Mulmangcho”,“Muskari”,“Nigella”,“NorangGgotchangpo”,“Norugwi”,“Poinsettia”,“Suseonhwa”,“Suyeompaeraengi”,“Sweetpea”,“Yongwang”,“alpine_sea_holly”,“anthurium”,“azalea”,“ball_moss”,“barbeton_daisy”,“bearded_iris”,“bee_balm”,“bishop_of_llandaff”,“black_eyed_susan”,“blackberry_lily”,“blanket_flower”,“bolero_deep_blue”,“bougainvillea”,“bromelia”,“californian_poppy”,“camellia”,“canna_lily”,“canterbury_bells”,“cape_flower”,“cautleya_spicata”,“clematis”,“columbine”,“common_dandelion”,“corn_poppy”,“cyclamen”,“desert-rose”,“foxglove”,“frangipani”,“garden_phlox”,“gaura”,“gazania”,“geranium”,“globe_thistle”,“great_masterwort”,“hibiscus”,“hippeastrum”,“japanese_anemone”,“lotus”,“magnolia”,“mallow”,“mexican_petunia”,“monkshood”,“morning_glory”,“orange_dahlia”,“osteospermum”,“passion_flower”,“petunia”,“pincushion_flower”,“pink-yellow_dahlia”,“pink_primrose”,“primula”,“prince_of_wales_feathers”,“red_ginger”,“rose”,“ruby-lipped_cattleya”,“silverbush”,“spear_thistle”,“spring_crocus”,“sunflower”,“sword_lily”,“thorn_apple”,“toad_lily”,“tree_mallow”,“water_lily”]

【训练信息】

参数
训练集图片数18162
验证集图片数1730
训练map91.0%
训练精度(Precision)87.3%
训练召回率(Recall)87.6%

【训练数据集(数据集有优化可能与模型训练数量存在差异)】

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

【部分实现源码】

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/89711158

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

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

相关文章

模拟算法专题——算法介绍算法讲解力扣实战应用

目录 1、模拟算法介绍 2、算法应用【leetcode】 2.1 替换所有的问号 2.1.1 算法思想 2.1.2 算法代码 2.2 提莫攻击 2.2.1 算法思想 2.2.2 算法代码 2.3 Z字形变换 2.3.1 算法思想 2.3.2 算法代码 2.4 外观数列 2.4.1 算法思想 2.4.2 算法代码 2.5 数青蛙 2.5.1 算…

复旦NLP团队新作:大规模语言模型从理论到实践PDF版

2022 年 11 月,Chat GPT 的问世展示了大语言模型的强大潜能,并迅速引起了广泛关注。Chat GPT 能够有效理解用户需求,并根据上下文提供恰当的回答。它不仅可以进行日常对话,还能够完成复杂任务,如撰写文章、回答问题等。…

测试工程师学历路径:从功能测试到测试开发

现在软件从业者越来越多,测试工程师的职位也几近饱和,想要获得竞争力还是要保持持续学习。基本学习路径可以从功能测试-自动化测试-测试开发工程师的路子来走。 功能测试工程师: 1、软件测试基本概念: 学习软件测试的定义、目的…

Cubase里如何使用效果器插件?

Cubase里如何使用效果器插件?具体操作步骤如下: 1、首先,在你的电脑上打开Cubase软件。进入页面后,单击菜单栏上的设备以进入插件管理器,如下所示,然后继续下一步。 2、接下来,弹出插件管理器窗…

银行业智能化转型:智能客服的崛起与挑战

更多内容个人网站:孔乙己大叔 在当今这个科技日新月异的时代,银行业作为传统金融业的支柱,正经历着一场前所未有的变革。智能客服的兴起,不仅重塑了银行的服务模式,也深刻影响着银行员工的职业生涯。这场由技术驱动的变…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量:遥控器上通常会显示自身的电池电量,以提醒用户及时充电。 无人机电量:部分高端遥控器还会显示无人机的电池电量,以进度条或百分比的形式表示,帮助用户了解无人机的续航能力。 2. 飞行模式与…

24并发设计模式——线程池模式

一、线程池模式介绍 线程池模式(Thread Pool Pattern)是一种并发设计模式,用于管理和循环使用线程资源以处理大量任务。它旨在提高系统性能和资源利用率,特别是在需要频繁创建和销毁线程的环境中。 1、线程池模式结构图 线程池管…

弱通联条件下的人机混合控制

弱通联条件下的人机混合控制指的是在通信连接不稳定或不可靠的情况下,如何有效地将人工控制与自动化/智能化系统结合起来进行操作。这种情况下,控制系统需要设计得既能在网络问题时维持基本功能,又能充分利用人工输入来补充自动系统的不足。下…

Win10提示输入网络凭据解决方法(Win10 Prompts for Entering Network Credentials Solution)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

什么?!新版 Node.js V22.5 自带 SQLite 模块啦

前言 2024年7月,Node.js V22.5.0 版本发布,自带了 SQLite 模块,意味着开发者可以直接在程序中使用 SQLite 数据库,而无需引入第三方库👍。 话不多说,感觉来体验一波✈。 安装/升级 我现在用的是21.4.0版…

xss.haozi.me

0x03 审查源码我们发现,括号, 方括号都被过滤了 这段代码是一个简单的 JavaScript 函数,名为 render。它接受一个字符串 input 作为参数,并返回一个新的字符串,其中所有圆括号 ( 和 ) 都被移除了。 函数内部定义了一个正则表达式…

三级_网络技术_58_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写RG的路由表项。 目的网络/掩码长度输出端口__________S0(直接连接)__________S1(直接连接)__________S0__________S1__________S0__________S1 (2)如果在不改变路由表项的前提…

notepad++将换行替换成空

将多行里的换行置为一行,例如将下面的6行置为3行 crrlH打开替换框, 替换目标为【,\r\n】,替换成空,勾选循环查找和 正则表达式,全部替换即可。 替换后的效果

三级_网络技术_59_应用题

一、 请根据下图所示网络结构回答下列问题。 1.填写RG的路由表项。 目的网络/掩码长度输出端口__________S0(直接连接)__________S1(直接连接)__________S0__________S1__________S0__________S1 2.如果需要监听该网络内子网10…

SpringBoot 项目集成 xxl-job

1. xxl-job 官网 https://www.xuxueli.com/xxl-job/ 2. git 拉取 xxl-job 源码 2.1 源码仓库地址 https://github.com/xuxueli/xxl-job http://gitee.com/xuxueli0323/xxl-job 2.2 git 拉取源码 git clone https://gitee.com/xuxueli0323/xxl-job.git 2.3 git拉取源码时&…

CSS实现DIV水平展示

CSS实现DIV水平展示 css代码 .container {display: flex; /* 使用 Flexbox */justify-content: space-between; /* 在主轴上均匀排列 */width: 100%; /* 设置容器宽度 */ } .box {flex:1; height:100px; }HTML代码 <div class"container"><div class&quo…

高效智能的AI人工智能对话系统源码,具备强大的自然语言处理能力 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网的普及和大数据时代的到来&#xff0c;人们对信息获取、处理及交互的需求日益增强。传统的界面操作已难以满足快速、便捷、人性化的服务需求&#xff0c;而自然语言处理&#xff08;NLP&#xff09;技术的突破&#xff0c;为构建更加智能的对话系统提供了可…

MASt3R:从3D的角度来实现图像匹配(更新中)

Abstract 图像匹配是 3D 视觉中所有性能最佳算法和pipeline的核心组件。 然而&#xff0c;尽管匹配从根本上来说是一个 3D 问题&#xff0c;与相机姿态和场景几何结构有内在联系&#xff0c;但它通常被视为一个 2D 问题。因为匹配的目标是建立 2D 像素字段之间的对应关系&#…

达梦数据库的系统视图v$ifun_arg

达梦数据库的系统视图v$ifun_arg 在达梦数据库&#xff08;DM Database&#xff09;中&#xff0c;V$IFUN_ARG 系统视图提供了关于存储函数&#xff08;或存储过程&#xff09;参数的详细信息。它是与函数参数相关的系统表&#xff0c;可以帮助数据库管理员和开发人员查看和管…

【重学MySQL】四、关系型数据库设计规则

【重学MySQL】四、关系型数据库设计规则 表、记录、字段设计规则表设计规则记录设计规则字段设计规则 表的关联关系一对一关系&#xff08;One-to-One Relationship&#xff09;一对多关系&#xff08;One-to-Many Relationship&#xff09;多对多关系&#xff08;Many-to-Many…