基于深度学习YOLOv11的水藻检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
一、项目介绍随着水体富营养化问题日益严重水藻的快速检测与监测成为环境管理的关键任务。本文基于深度学习技术提出了一种基于YOLOv11的水藻检测系统能够高效、准确地识别水体中的水藻目标。系统采用YOLOv11算法针对1类目标水藻进行优化训练集包含704张图像验证集包含344张图像确保了模型的泛化能力。此外系统集成了用户友好的UI界面支持登录注册功能。实验结果表明该系统在准确性和实时性上均表现优异为水藻监测提供了一种智能化解决方案。引言水藻过度繁殖是水体富营养化的主要表现之一不仅破坏水生生态系统还可能释放有害物质威胁人类健康。传统的水藻检测方法依赖人工采样与实验室分析效率低且成本高昂。近年来深度学习技术在目标检测领域取得了显著进展尤其是YOLO系列算法因其速度快、精度高而备受关注。本文基于最新的YOLOv11模型构建了一套端到端的水藻检测系统。通过精心标注的数据集训练集704张、验证集344张模型能够精准识别水藻目标。系统还设计了交互式UI界面和用户管理模块提升了实用性和可操作性。本研究旨在为水环境监测提供一种高效、自动化的技术手段助力生态保护与水资源管理。目录一、项目介绍二、项目功能展示2.1 用户登录系统2.2 检测功能2.3 检测结果显示2.4 参数配置2.5 其他功能3. 技术特点4. 系统流程三、数据集介绍数据集配置文件四、项目环境配置创建虚拟环境安装所需要库五、模型训练训练代码训练结果六、核心代码登录注册验证 多重检测模式️ 沉浸式可视化⚙️ 参数配置系统✨ UI美学设计 智能工作流七、项目源码视频简介基于深度学习YOLOv11的水藻检测系统YOLOv11YOLO数据集UI界面登录注册界面Python项目源码模型_哔哩哔哩_bilibili基于深度学习YOLOv11的水藻检测系统YOLOv11YOLO数据集UI界面登录注册界面Python项目源码模型二、项目功能展示✅ 用户登录注册支持密码检测和安全性验证。✅ 三种检测模式基于YOLOv11模型支持图片、视频和实时摄像头三种检测精准识别目标。✅ 双画面对比同屏显示原始画面与检测结果。✅ 数据可视化实时表格展示检测目标的类别、置信度及坐标。✅智能参数调节提供置信度滑块动态优化检测精度适应不同场景需求。✅科幻风交互界面深色主题搭配动态光效减少视觉疲劳提升操作体验。✅多线程高性能架构独立检测线程保障流畅运行实时状态提示响应迅速无卡顿。2.1 用户登录系统提供用户登录和注册功能用户名和密码验证账户信息本地存储(accounts.json)密码长度至少6位的安全要求2.2 检测功能图片检测支持JPG/JPEG/PNG/BMP格式图片的火焰烟雾检测视频检测支持MP4/AVI/MOV格式视频的逐帧检测摄像头检测实时摄像头流检测(默认摄像头0)检测结果保存到results目录2.3 检测结果显示显示原始图像和检测结果图像检测结果表格展示包含检测到的类别置信度分数物体位置坐标(x,y)、2.4 参数配置模型选择置信度阈值调节(0-1.0)IoU(交并比)阈值调节(0-1.0)实时同步滑块和数值输入框2.5 其他功能检测结果保存功能视频检测时自动保存结果视频状态栏显示系统状态和最后更新时间无边框窗口设计可拖动和调整大小3. 技术特点采用多线程处理检测任务避免界面卡顿精美的UI设计具有科技感的视觉效果发光边框和按钮悬停和按下状态效果自定义滑块、表格和下拉框样式检测结果保存机制响应式布局适应不同窗口大小4. 系统流程用户登录/注册选择检测模式(图片/视频/摄像头)调整检测参数(可选)开始检测并查看结果可选择保存检测结果停止检测或切换其他模式三、数据集介绍本研究采用自主构建的水藻检测数据集共包含1,048 张高质量标注图像涵盖不同光照条件、水体环境及水藻分布形态以确保模型的泛化能力。数据集具体划分如下训练集Training Set704 张图像占比 67.2%用于模型训练优化检测性能。验证集Validation Set344 张图像占比 32.8%用于调参及防止过拟合。数据集配置文件数据集采用标准化YOLO格式组织train: F:\水藻检测数据集\train val: F:\水藻检测数据集\valid test: F:\水藻检测数据集\test nc: 6 names: [blight, curl, grey mildew, healthy, leaf spot, wilt]四、项目环境配置创建虚拟环境首先新建一个Anaconda环境每个项目用不同的环境这样项目中所用的依赖包互不干扰。终端输入conda create -n yolov11 python3.9激活虚拟环境conda activate yolov11安装cpu版本pytorchpip install torch torchvision torchaudio安装所需要库pip install -r requirements.txtpycharm中配置anaconda五、模型训练训练代码from ultralytics import YOLO model_path yolo11s.pt data_path data.yaml if __name__ __main__: model YOLO(model_path) results model.train(datadata_path, epochs100, batch8, device0, workers0, projectruns, nameexp, )根据实际情况更换模型 # yolov11n.yaml (nano)轻量化模型适合嵌入式设备速度快但精度略低。 # yolov11s.yaml (small)小模型适合实时任务。 # yolov11m.yaml (medium)中等大小模型兼顾速度和精度。 # yolov11b.yaml (base)基本版模型适合大部分应用场景。 # yolov11l.yaml (large)大型模型适合对精度要求高的任务。--batch 8每批次8张图像。--epochs 100训练100轮。--datasets/data.yaml数据集配置文件。--weights yolov11s.pt初始化模型权重yolov11s.pt是预训练的轻量级YOLO模型。训练结果六、核心代码import sys import cv2 import numpy as np from PyQt5.QtWidgets import QApplication, QMessageBox, QFileDialog from PyQt5.QtCore import QThread, pyqtSignal from ultralytics import YOLO from UiMain import UiMainWindow import time import os from PyQt5.QtWidgets import QDialog from LoginWindow import LoginWindow class DetectionThread(QThread): frame_received pyqtSignal(np.ndarray, np.ndarray, list) # 原始帧, 检测帧, 检测结果 finished_signal pyqtSignal() # 线程完成信号 def __init__(self, model, source, conf, iou, parentNone): super().__init__(parent) self.model model self.source source self.conf conf self.iou iou self.running True def run(self): try: if isinstance(self.source, int) or self.source.endswith((.mp4, .avi, .mov)): # 视频或摄像头 cap cv2.VideoCapture(self.source) while self.running and cap.isOpened(): ret, frame cap.read() if not ret: break # 保存原始帧 original_frame frame.copy() # 检测 results self.model(frame, confself.conf, iouself.iou) annotated_frame results[0].plot() # 提取检测结果 detections [] for result in results: for box in result.boxes: class_id int(box.cls) class_name self.model.names[class_id] confidence float(box.conf) x, y, w, h box.xywh[0].tolist() detections.append((class_name, confidence, x, y)) # 发送信号 self.frame_received.emit( cv2.cvtColor(original_frame, cv2.COLOR_BGR2RGB), cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB), detections ) # 控制帧率 time.sleep(0.03) # 约30fps cap.release() else: # 图片 frame cv2.imread(self.source) if frame is not None: original_frame frame.copy() results self.model(frame, confself.conf, iouself.iou) annotated_frame results[0].plot() # 提取检测结果 detections [] for result in results: for box in result.boxes: class_id int(box.cls) class_name self.model.names[class_id] confidence float(box.conf) x, y, w, h box.xywh[0].tolist() detections.append((class_name, confidence, x, y)) self.frame_received.emit( cv2.cvtColor(original_frame, cv2.COLOR_BGR2RGB), cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB), detections ) except Exception as e: print(fDetection error: {e}) finally: self.finished_signal.emit() def stop(self): self.running False class MainWindow(UiMainWindow): def __init__(self): super().__init__() # 初始化模型 self.model None self.detection_thread None self.current_image None self.current_result None self.video_writer None self.is_camera_running False self.is_video_running False self.last_detection_result None # 新增保存最后一次检测结果 # 连接按钮信号 self.image_btn.clicked.connect(self.detect_image) self.video_btn.clicked.connect(self.detect_video) self.camera_btn.clicked.connect(self.detect_camera) self.stop_btn.clicked.connect(self.stop_detection) self.save_btn.clicked.connect(self.save_result) # 初始化模型 self.load_model() def load_model(self): try: model_name self.model_combo.currentText() self.model YOLO(f{model_name}.pt) # 自动下载或加载本地模型 self.update_status(f模型 {model_name} 加载成功) except Exception as e: QMessageBox.critical(self, 错误, f模型加载失败: {str(e)}) self.update_status(模型加载失败) def detect_image(self): if self.detection_thread and self.detection_thread.isRunning(): QMessageBox.warning(self, 警告, 请先停止当前检测任务) return file_path, _ QFileDialog.getOpenFileName( self, 选择图片, , 图片文件 (*.jpg *.jpeg *.png *.bmp)) if file_path: self.clear_results() self.current_image cv2.imread(file_path) self.current_image cv2.cvtColor(self.current_image, cv2.COLOR_BGR2RGB) self.display_image(self.original_image_label, self.current_image) # 创建检测线程 conf self.confidence_spinbox.value() iou self.iou_spinbox.value() self.detection_thread DetectionThread(self.model, file_path, conf, iou) self.detection_thread.frame_received.connect(self.on_frame_received) self.detection_thread.finished_signal.connect(self.on_detection_finished) self.detection_thread.start() self.update_status(f正在检测图片: {os.path.basename(file_path)}) def detect_video(self): if self.detection_thread and self.detection_thread.isRunning(): QMessageBox.warning(self, 警告, 请先停止当前检测任务) return file_path, _ QFileDialog.getOpenFileName( self, 选择视频, , 视频文件 (*.mp4 *.avi *.mov)) if file_path: self.clear_results() self.is_video_running True # 初始化视频写入器 cap cv2.VideoCapture(file_path) frame_width int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) frame_height int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) fps cap.get(cv2.CAP_PROP_FPS) cap.release() # 创建保存路径 save_dir results os.makedirs(save_dir, exist_okTrue) timestamp time.strftime(%Y%m%d_%H%M%S) save_path os.path.join(save_dir, fresult_{timestamp}.mp4) fourcc cv2.VideoWriter_fourcc(*mp4v) self.video_writer cv2.VideoWriter(save_path, fourcc, fps, (frame_width, frame_height)) # 创建检测线程 conf self.confidence_spinbox.value() iou self.iou_spinbox.value() self.detection_thread DetectionThread(self.model, file_path, conf, iou) self.detection_thread.frame_received.connect(self.on_frame_received) self.detection_thread.finished_signal.connect(self.on_detection_finished) self.detection_thread.start() self.update_status(f正在检测视频: {os.path.basename(file_path)}) def detect_camera(self): if self.detection_thread and self.detection_thread.isRunning(): QMessageBox.warning(self, 警告, 请先停止当前检测任务) return self.clear_results() self.is_camera_running True # 创建检测线程 (默认使用摄像头0) conf self.confidence_spinbox.value() iou self.iou_spinbox.value() self.detection_thread DetectionThread(self.model, 0, conf, iou) self.detection_thread.frame_received.connect(self.on_frame_received) self.detection_thread.finished_signal.connect(self.on_detection_finished) self.detection_thread.start() self.update_status(正在从摄像头检测...)登录注册验证对应文件LoginWindow.py# 账户验证核心逻辑 def handle_login(self): username self.username_input.text().strip() password self.password_input.text().strip() if not username or not password: QMessageBox.warning(self, 警告, 用户名和密码不能为空) return if username in self.accounts and self.accounts[username] password: self.accept() # 验证通过 else: QMessageBox.warning(self, 错误, 用户名或密码错误) # 密码强度检查注册时 def handle_register(self): if len(password) 6: # 密码长度≥6位 QMessageBox.warning(self, 警告, 密码长度至少为6位)多重检测模式对应文件main.py图片检测def detect_image(self): file_path, _ QFileDialog.getOpenFileName( self, 选择图片, , 图片文件 (*.jpg *.jpeg *.png *.bmp)) if file_path: self.detection_thread DetectionThread(self.model, file_path, conf, iou) self.detection_thread.start() # 启动检测线程视频检测def detect_video(self): file_path, _ QFileDialog.getOpenFileName( self, 选择视频, , 视频文件 (*.mp4 *.avi *.mov)) if file_path: self.video_writer cv2.VideoWriter() # 初始化视频写入器 self.detection_thread DetectionThread(self.model, file_path, conf, iou)实时摄像头def detect_camera(self): self.detection_thread DetectionThread(self.model, 0, conf, iou) # 摄像头设备号0 self.detection_thread.start()️沉浸式可视化对应文件UiMain.py双画面显示def display_image(self, label, image): q_img QImage(image.data, w, h, bytes_per_line, QImage.Format_RGB888) pixmap QPixmap.fromImage(q_img) label.setPixmap(pixmap.scaled(label.size(), Qt.KeepAspectRatio)) # 自适应缩放结果表格def add_detection_result(self, class_name, confidence, x, y): self.results_table.insertRow(row) items [ QTableWidgetItem(class_name), # 类别列 QTableWidgetItem(f{confidence:.2f}), # 置信度 QTableWidgetItem(f{x:.1f}), # X坐标 QTableWidgetItem(f{y:.1f}) # Y坐标 ]⚙️参数配置系统对应文件UiMain.py双阈值联动控制# 置信度阈值同步 def update_confidence(self, value): confidence value / 100.0 self.confidence_spinbox.setValue(confidence) # 滑块→数值框 self.confidence_label.setText(f置信度阈值: {confidence:.2f}) # IoU阈值同步 def update_iou(self, value): iou value / 100.0 self.iou_spinbox.setValue(iou)✨UI美学设计对应文件UiMain.py科幻风格按钮def create_button(self, text, color): return f QPushButton {{ border: 1px solid {color}; color: {color}; border-radius: 6px; }} QPushButton:hover {{ background-color: {self.lighten_color(color, 10)}; box-shadow: 0 0 10px {color}; # 悬停发光效果 }} 动态状态栏def update_status(self, message): self.status_bar.showMessage( f状态: {message} | 最后更新: {time.strftime(%H:%M:%S)} # 实时时间戳 )智能工作流对应文件main.py线程管理class DetectionThread(QThread): frame_received pyqtSignal(np.ndarray, np.ndarray, list) # 信号量通信 def run(self): while self.running: # 多线程检测循环 results self.model(frame, confself.conf, iouself.iou) self.frame_received.emit(original_frame, result_frame, detections)七、项目源码视频简介基于深度学习YOLOv11的水藻检测系统YOLOv11YOLO数据集UI界面登录注册界面Python项目源码模型_哔哩哔哩_bilibili基于深度学习YOLOv11的水藻检测系统YOLOv11YOLO数据集UI界面登录注册界面Python项目源码模型

相关新闻

基于深度学习YOLOv11的垃圾分类识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

基于深度学习YOLOv11的垃圾分类识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 随着城市化进程的加快,垃圾分类已成为实现资源循环利用和环境保护的关键环节。然而,传统的人工分类方式效率低下且成本高昂。为此,本研究基于深度学习技术,提出了一种基于YOLOv11的垃圾分类识别检测系统&#xff0c…

2026/7/3 4:06:03 阅读更多 →
收藏!大模型下半场:从LLM-RL到Agentic RL全新范式(小白程序员入门必看)

收藏!大模型下半场:从LLM-RL到Agentic RL全新范式(小白程序员入门必看)

Agentic RL(代理式强化学习) 范式,堪称大模型下半场的核心突破口——它彻底打破了大语言模型(LLM)“一次性文本生成器”的局限,将其升级为可在动态环境中持续感知、规划、行动、反思的自主智能体。本文将用…

2026/7/4 12:31:58 阅读更多 →
必收藏!Deep Agents框架|多智能体搭建的下一代AI架构(小白+程序员入门版)

必收藏!Deep Agents框架|多智能体搭建的下一代AI架构(小白+程序员入门版)

前言 随着AI Agent技术在各行业的规模化落地,智能体的能力边界正不断突破——早已跳出简单的意图识别、工具调用和上下文优化的范畴,逐渐向「意图精准识别复杂任务规划子代理协同调用文件系统支撑」的全流程能力升级,能够高效应对各类复杂场…

2026/7/4 16:15:05 阅读更多 →

最新新闻

功能测试中的“精准打击“:避免大而全的实用策略 (2)

功能测试中的“精准打击“:避免大而全的实用策略 (2)

一、核心认知前提 等价类、边界值、场景法是标准合规的用例设计方法,合理抽样≠无差别穷举。 过度细测的本质不是用例方法用错,而是两个无效叠加行为: 在必要边界样本外,额外枚举大量逻辑完全一致的重复数据; 每一条…

2026/7/5 2:58:53 阅读更多 →
76_Python数据分析pandas入门

76_Python数据分析pandas入门

Python数据分析基石:pandas入门指南 文章目录Python数据分析基石:pandas入门指南前言一、安装与核心数据结构二、读取各种格式的数据三、数据筛选与索引四、排序与聚合五、数据修改与新增列六、实战:销售数据分析✅ 亮点总结适用场景扩展方向…

2026/7/5 2:58:53 阅读更多 →
绝了!原来论文还能这样拿高分?2026降AI率工具推荐合集

绝了!原来论文还能这样拿高分?2026降AI率工具推荐合集

还在为论文查重高、AI痕迹明显、格式乱七八糟焦虑?2026 年的论文降AIGC工具已经全面升级,从选题构思到内容润色、从降重处理到去除AI痕迹、再到专业格式排版,全流程智能辅助,帮你把写作压力降到最低,轻松拿下高分论文&…

2026/7/5 2:56:52 阅读更多 →
认识安企CMS - 系统概述

认识安企CMS - 系统概述

什么是安企CMS 安企内容管理系统(AnQiCMS),是一款使用 GoLang 开发的开源企业级内容管理系统。它的前身是 GoBlog 博客系统(2019 年启动),经过多次重构和功能扩展,于 2022 年 5 月 正式更名为 A…

2026/7/5 2:54:51 阅读更多 →
NSK超重载静音滚珠丝杠技术详解

NSK超重载静音滚珠丝杠技术详解

型号 HTF-SRC 12025-10.5 属于 sources 中 NSK 专为极大推力、超大负载驱动开发的最顶尖 HTF-SRC型(大负载驱动用)高速静音滚珠丝杠系列。 与您上一条查询的同系列 120 mm 轴径型号(HTF-SRC 12020-7.5)相比,该型号在维…

2026/7/5 2:54:51 阅读更多 →
手把手教你玩转 CubeSandbox:一键部署+数字助手,快照/克隆/回滚惊艳体验

手把手教你玩转 CubeSandbox:一键部署+数字助手,快照/克隆/回滚惊艳体验

手把手教你玩转 CubeSandbox:一键部署数字助手,快照/克隆/回滚惊艳体验 当沙箱拥有了“时间机器”,开发测试会变得多丝滑?本教程带你从零部署到亲手操控“数字分身”。 最近腾讯云开源了一款面向 AI 智能体的轻量级沙箱项目——Cu…

2026/7/5 2:52:50 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻