基于yolov8的100种中草药智能识别系统python源码+pt模型+训练日志+精美GUI界面

news2024/12/23 0:06:01

【算法介绍】

基于YOLOv8的100种中草药智能识别系统是一款利用最新的YOLOv8算法开发的高效、准确的识别工具。该系统能够精准快速地识别100种不同的中草药类别,对于传统中药行业是一次重要的革新。

该系统通过搜集不同中草药的相关数据图片,并基于YOLOv8的深度学习技术进行训练,构建了一个强大的识别模型。该模型可以支持图片、批量图片、视频以及摄像头等多种输入方式进行检测,能够实时显示识别结果、置信度以及用时等信息。

在实际应用中,该系统具有广泛的应用前景。例如,在药材市场监管方面,可以协助监管部门对药材市场进行质量监督,有效识别伪劣药材,保护消费者权益。在中药企业的质量控制方面,企业可以利用此系统进行药材质量的快速检验,保障产品质量,减少人工鉴别成本。此外,该系统还可以用于药学教育与培训、药用植物保护、中药配方颗粒生产以及消费者个人使用等多个方面。

总的来说,基于YOLOv8的100种中草药智能识别系统的开发和应用,对于提升中药行业的科技水平、保障药品安全以及推广中草药文化都具有重要的作用。该系统不仅具有高效、准确的识别能力,而且具有广泛的应用前景和深远的社会意义。

【效果展示】

【测试环境】

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

【模型可以检测出类别】

anxixiang
baibiandou
baifan
bailian
baimaogen
baiqian
baishao
baizhi
baiziren
beishashen
bibo
bichengqie
biejia
binglang
cangzhu
caodoukou
chenxiang
chuanlianzi
chuanmuxiang
chuanniuxi
dafupi
dandouchi
daoya
dilong
dongchongxiacao
fangfeng
fanxieye
fengfang
gancao
ganjiang
gansong
gaoben
ghishizhi
gouqizi
guizhi
gujingcao
guya
haiiong
haipiaoxiao
hehuanpi
huangbo
huangqi
huangqin
hubeibeimu
jiangcan
jiezi
jiguanhua
jindenglong
jineijin
jingjiesui
jinguolan
jinqianbaihuashe
jiuxiangchong
juhe
kudiding
laifuzi
lianfang
lianxu
lianzi
lianzixin
lingzhi
lizhihe
longyanrou
lugen
lulutong
maidong
mudingxiang
qianghuo
qiannianjian
qinpi
quanxie
rendongteng
renshen
roudoukou
sangjisheng
sangpiaoxiao
sangshen
shancigu
shannai
shanzhuyu
shayuanzi
shiliupi
sigualuo
suanzaoren
sumu
taizishen
tianhuafen
tianma
tujingpi
walengzi
wujiapi
xixin
yinchaihu
yiyiren
yujin
zhebeimu
zhiqiao
zhuru
zhuyazao
zirantong

 【训练数据集】 

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

【训练信息】

参数
训练集图片数8958
验证集图片数1025
accuracy_top180.0%
accuracy_top593.0%
训练轮数100
batch_size512
模型输入(256,256)
【部分实现源码】
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-cls.pt
训练的日志csv文件(在weights\results.csv)
测试图片(在test_img文件夹下面)

完整源码下载地址:

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

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

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

相关文章

【leetcode】122. 买卖股票的最佳时机 II

题目描述 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。…

nacos client 本地缓存问题

问题: nacos 更新了配置文件,更新了以后重新启动还是旧的配置信息。 NACOS版本: 1.1.4 解决: 配置缓存 Nacos Client 会将从 Nacos 服务器获取的配置信息缓存在本地。这样,即使 Nacos 服务器不可用,客…

成都大学体育场馆预约系统—计算机毕业设计源码37087

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

AMD CDNA™2 GPU 中的寄存器压力

Register pressure in AMD CDNA™2 GPUs — ROCm Blogs 注意: 此博客以前是 AMD实验室笔记 博客系列的一部分。 GPU kernel 中的寄存器压力对高性能计算 (HPC) 应用程序的整体性能有着巨大的影响。理解和控制寄存器的使用可以让开发者精心设计代码,以最…

解决银河麒麟中`/etc/sudoers`权限问题

解决银河麒麟中/etc/sudoers权限问题 1、问题描述2、解决方法 💐The Begin💐点点关注,收藏不迷路💐 当你在银河麒麟操作系统中使用sudo命令时,如果遇到“/etc/sudoers可被任何人写”的错误,说明/etc/sudoer…

国庆节快乐

葡萄城在这里祝大家国庆快快乐: 10月葡萄城活动: 公开课 【从软件应用走向数据应用——葡萄城技术赋能数据挖掘】 新版本发布: 活字格 V10.0 Update1新版本发布

Linux相关概念和重要知识点(8)(操作系统、进程属性)

1.操作系统(OS) (1)基本结构的认识 任何计算机系统都包含一个基本的程序集合,用于实现计算机最基本最底层的操作,这个软件称为操作系统。操作系统大部分使用C语言编写,少量使用汇编语言。 从…

【数学分析笔记】第4章第2节 导数的意义和性质(1)

4. 微分 4.2 导数的意义与性质 4.2.1 导数在物理中的背景 物体在OS方向上运动,位移函数为 s s ( t ) ss(t) ss(t),求时刻 t t t的瞬时速度,找一个区间 [ t , t △ t ] [t,t\bigtriangleup t] [t,t△t],从时刻 t t t变到时刻 t…

闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨

上图为执行语义搜索前的聚类演示 ,嵌入技术是自然语言处理的核心组成部分。虽然嵌入技术的应用范围广泛,但在检索应用中的语义搜索仍是其最常见的用途之一。 尽管知识图谱等可以提升检索的准确率和效率,但标准向量检索技术仍然具有其实用价值…

基于SSM的农产品仓库管理系统【附源码】

基于SSM的农产品仓库管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概要设计 4.2 系统功能结构设计 4.3 数据库设计 4.3.1 数据库E-R图设计 4.3.2 数据库表结构设计 5 系统实现 5.1 管理员功能介绍 5.1.1 用户管…

CSS外边距

元素的外边距(margin)是围绕在元素边框以外(不包括边框)的空白区域,这片区域不受 background 属性的影响,始终是透明的。 为元素设置外边距 默认情况下如果不设置外边距属性,HTML 元素就是不会…

通信工程学习:什么是MAC媒体接入控制

MAC:媒体接入控制 MAC(Medium Access Control),即媒体接入控制,是计算机网络中数据链路层的一个重要组成部分,负责协调多个发送和接收站点对一个共享传输媒体的占用。以下是关于MAC的详细解释: …

括号序列C++

题目: 样例解释: 如下几种方案是符合规范的: (**)*() (**(*)) (*(**)) (*)**() (*)(**) 思路: 首先肯定是区间dp,令 dpi,jdpi,j​ 表示从位置 ii 到位置 jj 一共的合法序列总情况数量。 但是不同的形态可能会有不同的转…

【开源项目】CException 为C语言提供简洁高效的异常处理机制

CException:为C语言提供简洁高效的异常处理机制 在C语言中进行异常处理并不像C中那样方便。为了实现高效的异常处理,很多开发者选择了CException,一个基于C标准库 setjmp 和 longjmp 的轻量级异常处理框架。本文将带你了解 CException 的特点…

【Power Query】M函数-List.Sum

M函数-List 列表求和 &#xff08;List.Sum&#xff09;&#xff1a;1&#xff09;横向求和2&#xff09;列求和★思路★</font>★实操★</font> 3&#xff09;求总和4&#xff09;求部分占总体的比重★横向★</font>★竖向★</font> 列表求和 &#x…

C++和OpenGL实现3D游戏编程【连载12】——游戏中音效的使用

1、游戏中音效的使用 前面我们实现了图片纹理的显示功能,是不是感觉到非常的简单。那么今天我们就继续说下游戏声音的实现。音效也是游戏的灵魂,只有搭配了美妙动听的音效以后,游戏才能令人耳目一新,与玩家产生良好的效果。 音效文件最常用的可分为两种,分别为.wav和.mp3…

基于SSM的线上旅行信息管理系统【附源码】

基于SSM的线上旅行信息管理系统&#xff08;源码L文说明文档&#xff09; 目录 4.1 系统概述 4.2 数据库E-R图设计 4.3 数据库表设计 5 系统的实现 5.1 管理员功能模块的实现 5.1.1管理员登录界面 5.1.2用户管理界面 5.1.3景点分类管理界面 5.1.4…

(最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网(含微信小程序)上报温湿度和控制单片机(保姆级教程)

物联网实践教程&#xff1a;微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意&#xff1a;ESP-01sWIFI模块&#xff0c;去搜了一下这个小东西很有玩点&#xff0c;远程控制LED啥的&#xff0c;然后我就想…

【Linux】【操作】Linux操作集锦系列之七——Linux环境下如何查看CPU使用情况(利用率等)

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;Linux技术&…

Air201资产定位模组LuatOS:录音播放录音功能的操作方法

一直有小伙伴们问&#xff0c;迷你小巧的合宙Air201虽然有很多优点&#xff0c;超低功耗、精准定位&#xff0c;那么它是否支持录音、播放录音功能&#xff1f; 那必须能&#xff01;高集成化设计的Air201自带了ES8311音频解码芯片&#xff08;Audio Codec&#xff09;及MIC麦…