基于yolov5的猪只识别计数检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

devtools/2024/10/21 10:16:35/

【算法介绍】

基于YOLOv5的猪只识别计数检测系统是一种创新的农业应用解决方案,它结合了深度学习和计算机视觉技术,专为提高养猪业的管理效率和精确度而设计。该系统利用YOLOv5这一先进的目标检测模型,能够实时、准确地在图像或视频中识别并计数猪只。

YOLOv5以其轻量级、高速和准确的特点著称,特别适合用于复杂多变的农场环境。通过摄像头采集的图像数据,系统能够自动检测并标记出每一头猪的位置和数量,同时支持多尺度检测,确保不同大小的猪只都能被有效识别。

总之,基于YOLOv5的猪只识别计数检测系统为养猪业带来了革命性的变化,不仅提高了管理效率,还降低了人工成本,是推动农业现代化和可持续发展的重要工具。

【效果展示】

【测试环境】

windows10
anaconda3+python3.8
torch==1.9.0+cu111
yolov5依赖模块

【模型可以检测出类别】

object,deer,pig

【训练信息】

注意由于数据集太大,没有训练很多epoch,只训练了15epoch,因此训练map还没达到理想值

参数
训练集图片数14202
验证集图片数1521
训练map55.6%
训练精度(Precision)52.9%
训练召回率(Recall)67.6%

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

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

【部分实现源码】

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/yolov5安装教程安装好yolov5环境,并安装好pyqt5
(2)切换到自己安装的yolov5环境后,并切换到源码目录,执行python main.py即可运行启动界面,进行相应的操作即可

【提供文件】

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

【源码下载地址】https://download.csdn.net/download/FL1623863129/89707524


http://www.ppmy.cn/devtools/105291.html

相关文章

数据库系统 第34节 数据库压缩

数据库压缩是一种优化技术,它通过压缩数据库中的数据来减少所需的存储空间,并且可以加速数据的读取和写入操作(尤其是在带宽受限的情况下)。压缩通常是在数据写入磁盘之前执行,并在数据被读取到内存中之前解压。数据库…

python元组和java的区别

元组 Python 中的元组可以用来返回多个值,这些值可以被其他变量分别接收。这个特性被称为“多值返回”或“解包(unpacking)”。当一个函数返回多个值时,Python 会自动将它们打包成一个元组,并且可以在调用函数时将这些…

苹果mac数据恢复概率大吗 mac数据恢复专业软件哪个好用

一般情况下,当我们把电脑中的数据删掉后,都会保存在回收站里面,但如果回收站被清空了或者数据在回收站中没有找到的话,那么,之前被删掉的数据还能恢复吗?恢复的概率有多大呢? 答案是可以的&…

jEasyUI 创建带复选框的树形菜单

jEasyUI 创建带复选框的树形菜单 jEasyUI 是一个基于 jQuery 的框架,它为用户提供了一套完整的用户界面组件,包括菜单、窗口、表格等。在本文中,我们将重点介绍如何使用 jEasyUI 创建一个带复选框的树形菜单。 1. 引入 jEasyUI 相关文件 首先,在 HTML 文件中引入 jEasyU…

解密注意力机制:从基础概念到Transformer的演化与应用

前言 在AI技术的迅猛发展中,注意力机制已经成为了推动智能技术进步的关键力量。它赋予了机器高效处理复杂信息的能力,尤其在自然语言处理领域的应用更是引领了变革。本文将深入探讨注意力机制及其核心应用——Transformer架构,解析其如何通过…

NeRF原理学习

一个2020年的工作我现在才来学习并总结它的原理,颇有种“时过境迁”的感觉。这篇总结是基于NeRF原文 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 阅读理解后写的,作用是以后如果记不太清了可以回忆。 目的&应用 先说…

微软云技术深度解析与代码使用案例

微软云技术深度解析与代码使用案例 随着云计算技术的飞速发展,微软云(Microsoft Azure)凭借其强大的技术实力和广泛的应用场景,成为了业界瞩目的焦点。本文将从微软云的技术特点、应用场景以及具体的代码使用案例三个方面进行深…

构建高可用的微服务架构:Spring Cloud Consul与负载均衡

构建高可用的微服务架构:Spring Cloud Consul与负载均衡 在现代软件架构中,微服务通过将应用拆分为独立的服务模块,提供了灵活性和可扩展性。然而,随着服务数量的增加,服务之间的管理、发现和通信变得更加复杂。为了解…