【算法介绍】
基于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_top1 | 80.0% |
accuracy_top5 | 93.0% |
训练轮数 | 100 |
batch_size | 512 |
模型输入 | (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