智慧农业-棉花棉铃检测数据集】txt格式1类农业目标700张高清田间图片数据集亮点:✅ 700张棉田高清图片真实田间场景采集✅ txt格式标注兼容YOLO等框架✅ 1类棉铃检测数据集规格标注格式txt类别标签及中文意思0: Cotton_boll —— 棉花棉铃数据划分训练集420张70%验证集120张20%测试集60张10%增强600张未增强100张单独放置11YOLO 模型推理逻辑兼容 v8 到 v26。项目目录结构建议/YOLO26_System│├── main.py # 程序入口├── database.py # SQLite数据库管理登录/注册├── detector.py # YOLO模型加载与推理核心支持v8-v26├── ui_main_window.py # 主界面逻辑基于PySide6├── ui_login_window.py # 登录界面逻辑└── utils.py # 图像处理工具绘图、格式转换数据库模块 (database.py)负责用户权限校验使用轻量级的 SQLite3。import sqlite3class Database:def init(self, db_name“users.db”):self.conn sqlite3.connect(db_name)self.cursor self.conn.cursor()self.create_table()def create_table(self): # 创建用户表包含用户名、密码和权限级别 self.cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT DEFAULT user ) ) self.conn.commit() def register(self, username, password): try: self.cursor.execute(INSERT INTO users (username, password) VALUES (?, ?), (username, password)) self.conn.commit() return True except sqlite3.IntegrityError: return False # 用户已存在 def login(self, username, password): self.cursor.execute(SELECT * FROM users WHERE username? AND password?, (username, password)) return self.cursor.fetchone()YOLO 检测核心 (detector.py)这里我们使用 ultralytics 库作为基础。虽然现实中不存在 YOLOv26但在代码中我们将其视为一种自定义模型架构或权重格式。from ultralytics import YOLOimport cv2class YOLODetector:def init(self):self.model Nonedef load_model(self, model_path, versionv8): 加载模型权重 version: 支持 v8, v9, ..., v26 try: # 假设 ultralytics 库在2026年已经支持 v26 架构 self.model YOLO(model_path) print(f成功加载 {version} 模型: {model_path}) return True except Exception as e: print(f模型加载失败: {e}) return False def predict(self, source, conf0.25, iou0.45): 执行推理 source: 图片路径、视频路径或摄像头索引 if not self.model: return None # 进行推理 results self.model(source, confconf, iouiou) return results登录界面 (ui_login_window.py)使用 PySide6 构建登录窗口。from PySide6.QtWidgets import QDialog, QMessageBox, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayoutfrom database import Databaseclass LoginWindow(QDialog):def init(self):super().init()self.db Database()self.init_ui()def init_ui(self): self.setWindowTitle(系统登录 - YOLOv26) self.resize(300, 150) # UI 组件 self.user_label QLabel(用户名:) self.user_input QLineEdit() self.pwd_label QLabel(密 码:) self.pwd_input QLineEdit() self.pwd_input.setEchoMode(QLineEdit.Password) self.btn_login QPushButton(登录) self.btn_register QPushButton(注册) # 布局 layout QVBoxLayout() layout.addWidget(self.user_label) layout.addWidget(self.user_input) layout.addWidget(self.pwd_label) layout.addWidget(self.pwd_input) btn_layout QHBoxLayout() btn_layout.addWidget(self.btn_login) btn_layout.addWidget(self.btn_register) layout.addLayout(btn_layout) self.setLayout(layout) # 信号连接 self.btn_login.clicked.connect(self.handle_login) self.btn_register.clicked.connect(self.handle_register) def handle_login(self): user self.user_input.text() pwd self.pwd_input.text() if self.db.login(user, pwd): self.accept() # 登录成功关闭对话框 else: QMessageBox.warning(self, 错误, 用户名或密码错误) def handle_register(self): user self.user_input.text() pwd self.pwd_input.text() if user and pwd: if self.db.register(user, pwd): QMessageBox.information(self, 成功, 注册成功请登录) else: QMessageBox.warning(self, 失败, 用户已存在) else: QMessageBox.warning(self, 提示, 请输入用户名和密码)主界面与检测逻辑 (ui_main_window.py)这是最复杂的部分对应你截图中的界面。它包含视频流处理、参数调整和结果显示。import sysimport cv2from PySide6.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QPushButton, QSlider, QFileDialog, QMessageBox)from PySide6.QtGui import QImage, QPixmapfrom PySide6.QtCore import QTimer, Qtfrom detector import YOLODetectorclass MainWindow(QMainWindow):def init(self):super().init()self.detector YOLODetector()self.timer QTimer()self.cap None # 摄像头/视频对象self.init_ui()def init_ui(self): self.setWindowTitle(基于YOLOv26的目标检测系统) self.resize(1200, 800) central_widget QWidget() self.setCentralWidget(central_widget) main_layout QHBoxLayout(central_widget) # --- 左侧视频显示区域 --- self.video_label QLabel() self.video_label.setText(等待视频流...) self.video_label.setAlignment(Qt.AlignCenter) self.video_label.setStyleSheet(background-color: #000; color: #fff;) main_layout.addWidget(self.video_label, 3) # --- 右侧控制面板 --- control_panel QVBoxLayout() # 参数设置 self.conf_slider QSlider(Qt.Horizontal) self.conf_slider.setRange(0, 100) self.conf_slider.setValue(25) # 按钮组 self.btn_load_model QPushButton(加载模型 (v26)) self.btn_img QPushButton(选择图像) self.btn_video QPushButton(选择视频) self.btn_cam QPushButton(打开摄像头) self.btn_stop QPushButton(停止检测) control_panel.addWidget(QLabel(置信度阈值:)) control_panel.addWidget(self.conf_slider) control_panel.addWidget(self.btn_load_model) control_panel.addWidget(self.btn_img) control_panel.addWidget(self.btn_video) control_panel.addWidget(self.btn_cam) control_panel.addWidget(self.btn_stop) main_layout.addLayout(control_panel, 1) # --- 信号槽连接 --- self.btn_load_model.clicked.connect(self.load_model) self.btn_img.clicked.connect(lambda: self.run_detection(sourceimage)) self.btn_video.clicked.connect(lambda: self.run_detection(sourcevideo)) self.btn_cam.clicked.connect(lambda: self.run_detection(sourcecamera)) self.btn_stop.clicked.connect(self.stop_detection) self.timer.timeout.connect(self.update_frame) def load_model(self): # 这里假设有一个 weights/yolov26.pt 文件 # 在实际项目中你应该使用 QFileDialog 让用户选择 success self.detector.load_model(weights/best.pt, versionv26) if success: QMessageBox.information(self, 成功, YOLOv26 模型加载成功) def run_detection(self, source): if not self.detector.model: QMessageBox.warning(self, 警告, 请先加载模型) return if source image: path, _ QFileDialog.getOpenFileName(self, 选择图片, , Image Files (*.png *.jpg *.bmp)) if path: self.detect_image(path) elif source video: path, _ QFileDialog.getOpenFileName(self, 选择视频, , Video Files (*.mp4 *.avi)) if path: self.cap cv2.VideoCapture(path) self.timer.start(30) # 约30ms刷新一次 elif source camera: self.cap cv2.VideoCapture(0) self.timer.start(30) def detect_image(self, img_path): # 单张图片检测 results self.detector.predict(img_path, conf0.25) # 获取绘制了边框的图像 (BGR格式) result_img results[0].plot() self.display_image(result_img) def update_frame(self): # 视频流/摄像头 逐帧检测 if self.cap: ret, frame self.cap.read() if ret: # 将帧传给模型进行检测 # 注意这里为了演示简化了流程实际应将frame转为RGB或保持BGR根据模型需求 results self.detector.model(frame, confself.conf_slider.value()/100) result_frame results[0].plot() self.display_image(result_frame) else: self.stop_detection() def display_image(self, img): # OpenCV (BGR) 转 Qt (RGB) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) h, w, ch img_rgb.shape bytes_per_line ch * w qt_image QImage(img_rgb.data, w, h, bytes_per_line, QImage.Format_RGB888) self.video_label.setPixmap(QPixmap.fromImage(qt_image).scaled( self.video_label.size(), Qt.KeepAspectRatio)) def stop_detection(self): self.timer.stop() if self.cap: self.cap.release() self.cap None self.video_label.setText(检测已停止)程序入口 (main.py)将所有部分组合在一起。import sysfrom PySide6.QtWidgets import QApplicationfrom ui_login_window import LoginWindowfrom ui_main_window import MainWindowif name “main”:app QApplication(sys.argv)# 1. 显示登录窗口 login_window LoginWindow() if login_window.exec() 1: # 如果登录成功 (accept) # 2. 显示主窗口 main_window MainWindow() main_window.show() sys.exit(app.exec()) else: sys.exit()如何运行此系统环境配置你需要安装以下 Python 库建议使用 Python 3.9pip install PySide6 ultralytics opencv-python numpy sqlite3detector.py 已经预留了接口你只需要替换具体的模型加载逻辑即可。
如何训练棉花棉铃目标检测数据集 深度学习框架YOLO模型26 如何训练棉花棉铃检测数据集
智慧农业-棉花棉铃检测数据集】txt格式1类农业目标700张高清田间图片数据集亮点:✅ 700张棉田高清图片真实田间场景采集✅ txt格式标注兼容YOLO等框架✅ 1类棉铃检测数据集规格标注格式txt类别标签及中文意思0: Cotton_boll —— 棉花棉铃数据划分训练集420张70%验证集120张20%测试集60张10%增强600张未增强100张单独放置11YOLO 模型推理逻辑兼容 v8 到 v26。项目目录结构建议/YOLO26_System│├── main.py # 程序入口├── database.py # SQLite数据库管理登录/注册├── detector.py # YOLO模型加载与推理核心支持v8-v26├── ui_main_window.py # 主界面逻辑基于PySide6├── ui_login_window.py # 登录界面逻辑└── utils.py # 图像处理工具绘图、格式转换数据库模块 (database.py)负责用户权限校验使用轻量级的 SQLite3。import sqlite3class Database:def init(self, db_name“users.db”):self.conn sqlite3.connect(db_name)self.cursor self.conn.cursor()self.create_table()def create_table(self): # 创建用户表包含用户名、密码和权限级别 self.cursor.execute( CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password TEXT NOT NULL, role TEXT DEFAULT user ) ) self.conn.commit() def register(self, username, password): try: self.cursor.execute(INSERT INTO users (username, password) VALUES (?, ?), (username, password)) self.conn.commit() return True except sqlite3.IntegrityError: return False # 用户已存在 def login(self, username, password): self.cursor.execute(SELECT * FROM users WHERE username? AND password?, (username, password)) return self.cursor.fetchone()YOLO 检测核心 (detector.py)这里我们使用 ultralytics 库作为基础。虽然现实中不存在 YOLOv26但在代码中我们将其视为一种自定义模型架构或权重格式。from ultralytics import YOLOimport cv2class YOLODetector:def init(self):self.model Nonedef load_model(self, model_path, versionv8): 加载模型权重 version: 支持 v8, v9, ..., v26 try: # 假设 ultralytics 库在2026年已经支持 v26 架构 self.model YOLO(model_path) print(f成功加载 {version} 模型: {model_path}) return True except Exception as e: print(f模型加载失败: {e}) return False def predict(self, source, conf0.25, iou0.45): 执行推理 source: 图片路径、视频路径或摄像头索引 if not self.model: return None # 进行推理 results self.model(source, confconf, iouiou) return results登录界面 (ui_login_window.py)使用 PySide6 构建登录窗口。from PySide6.QtWidgets import QDialog, QMessageBox, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayoutfrom database import Databaseclass LoginWindow(QDialog):def init(self):super().init()self.db Database()self.init_ui()def init_ui(self): self.setWindowTitle(系统登录 - YOLOv26) self.resize(300, 150) # UI 组件 self.user_label QLabel(用户名:) self.user_input QLineEdit() self.pwd_label QLabel(密 码:) self.pwd_input QLineEdit() self.pwd_input.setEchoMode(QLineEdit.Password) self.btn_login QPushButton(登录) self.btn_register QPushButton(注册) # 布局 layout QVBoxLayout() layout.addWidget(self.user_label) layout.addWidget(self.user_input) layout.addWidget(self.pwd_label) layout.addWidget(self.pwd_input) btn_layout QHBoxLayout() btn_layout.addWidget(self.btn_login) btn_layout.addWidget(self.btn_register) layout.addLayout(btn_layout) self.setLayout(layout) # 信号连接 self.btn_login.clicked.connect(self.handle_login) self.btn_register.clicked.connect(self.handle_register) def handle_login(self): user self.user_input.text() pwd self.pwd_input.text() if self.db.login(user, pwd): self.accept() # 登录成功关闭对话框 else: QMessageBox.warning(self, 错误, 用户名或密码错误) def handle_register(self): user self.user_input.text() pwd self.pwd_input.text() if user and pwd: if self.db.register(user, pwd): QMessageBox.information(self, 成功, 注册成功请登录) else: QMessageBox.warning(self, 失败, 用户已存在) else: QMessageBox.warning(self, 提示, 请输入用户名和密码)主界面与检测逻辑 (ui_main_window.py)这是最复杂的部分对应你截图中的界面。它包含视频流处理、参数调整和结果显示。import sysimport cv2from PySide6.QtWidgets import (QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLabel, QPushButton, QSlider, QFileDialog, QMessageBox)from PySide6.QtGui import QImage, QPixmapfrom PySide6.QtCore import QTimer, Qtfrom detector import YOLODetectorclass MainWindow(QMainWindow):def init(self):super().init()self.detector YOLODetector()self.timer QTimer()self.cap None # 摄像头/视频对象self.init_ui()def init_ui(self): self.setWindowTitle(基于YOLOv26的目标检测系统) self.resize(1200, 800) central_widget QWidget() self.setCentralWidget(central_widget) main_layout QHBoxLayout(central_widget) # --- 左侧视频显示区域 --- self.video_label QLabel() self.video_label.setText(等待视频流...) self.video_label.setAlignment(Qt.AlignCenter) self.video_label.setStyleSheet(background-color: #000; color: #fff;) main_layout.addWidget(self.video_label, 3) # --- 右侧控制面板 --- control_panel QVBoxLayout() # 参数设置 self.conf_slider QSlider(Qt.Horizontal) self.conf_slider.setRange(0, 100) self.conf_slider.setValue(25) # 按钮组 self.btn_load_model QPushButton(加载模型 (v26)) self.btn_img QPushButton(选择图像) self.btn_video QPushButton(选择视频) self.btn_cam QPushButton(打开摄像头) self.btn_stop QPushButton(停止检测) control_panel.addWidget(QLabel(置信度阈值:)) control_panel.addWidget(self.conf_slider) control_panel.addWidget(self.btn_load_model) control_panel.addWidget(self.btn_img) control_panel.addWidget(self.btn_video) control_panel.addWidget(self.btn_cam) control_panel.addWidget(self.btn_stop) main_layout.addLayout(control_panel, 1) # --- 信号槽连接 --- self.btn_load_model.clicked.connect(self.load_model) self.btn_img.clicked.connect(lambda: self.run_detection(sourceimage)) self.btn_video.clicked.connect(lambda: self.run_detection(sourcevideo)) self.btn_cam.clicked.connect(lambda: self.run_detection(sourcecamera)) self.btn_stop.clicked.connect(self.stop_detection) self.timer.timeout.connect(self.update_frame) def load_model(self): # 这里假设有一个 weights/yolov26.pt 文件 # 在实际项目中你应该使用 QFileDialog 让用户选择 success self.detector.load_model(weights/best.pt, versionv26) if success: QMessageBox.information(self, 成功, YOLOv26 模型加载成功) def run_detection(self, source): if not self.detector.model: QMessageBox.warning(self, 警告, 请先加载模型) return if source image: path, _ QFileDialog.getOpenFileName(self, 选择图片, , Image Files (*.png *.jpg *.bmp)) if path: self.detect_image(path) elif source video: path, _ QFileDialog.getOpenFileName(self, 选择视频, , Video Files (*.mp4 *.avi)) if path: self.cap cv2.VideoCapture(path) self.timer.start(30) # 约30ms刷新一次 elif source camera: self.cap cv2.VideoCapture(0) self.timer.start(30) def detect_image(self, img_path): # 单张图片检测 results self.detector.predict(img_path, conf0.25) # 获取绘制了边框的图像 (BGR格式) result_img results[0].plot() self.display_image(result_img) def update_frame(self): # 视频流/摄像头 逐帧检测 if self.cap: ret, frame self.cap.read() if ret: # 将帧传给模型进行检测 # 注意这里为了演示简化了流程实际应将frame转为RGB或保持BGR根据模型需求 results self.detector.model(frame, confself.conf_slider.value()/100) result_frame results[0].plot() self.display_image(result_frame) else: self.stop_detection() def display_image(self, img): # OpenCV (BGR) 转 Qt (RGB) img_rgb cv2.cvtColor(img, cv2.COLOR_BGR2RGB) h, w, ch img_rgb.shape bytes_per_line ch * w qt_image QImage(img_rgb.data, w, h, bytes_per_line, QImage.Format_RGB888) self.video_label.setPixmap(QPixmap.fromImage(qt_image).scaled( self.video_label.size(), Qt.KeepAspectRatio)) def stop_detection(self): self.timer.stop() if self.cap: self.cap.release() self.cap None self.video_label.setText(检测已停止)程序入口 (main.py)将所有部分组合在一起。import sysfrom PySide6.QtWidgets import QApplicationfrom ui_login_window import LoginWindowfrom ui_main_window import MainWindowif name “main”:app QApplication(sys.argv)# 1. 显示登录窗口 login_window LoginWindow() if login_window.exec() 1: # 如果登录成功 (accept) # 2. 显示主窗口 main_window MainWindow() main_window.show() sys.exit(app.exec()) else: sys.exit()如何运行此系统环境配置你需要安装以下 Python 库建议使用 Python 3.9pip install PySide6 ultralytics opencv-python numpy sqlite3detector.py 已经预留了接口你只需要替换具体的模型加载逻辑即可。