摘要

本文设计并实现了一个集成了最新多版本YOLO目标检测算法与SpringBoot后端框架的生菜生长周期智能检测与分析系统。针对现代农业中对作物生长状态自动化、精细化监控的需求,系统以生菜水培为典型场景,构建了包含‘Ready’(可采收)、‘empty_pod’(空定植篮)、‘germination’(发芽期)、‘pod’(定植篮)、‘young’(幼苗期)五类生长阶段的专属图像数据集,共计1410张标注图片。系统核心采用模块化设计,支持在YOLOv8、YOLOv10、YOLOv11及YOLOv12等高性能模型间灵活切换与对比,以实现最优检测精度与速度。系统结合DeepSeek大语言模型的智能分析能力,对检测结果进行自然语言描述与农艺建议生成。前端采用现代化Web交互界面,后端基于SpringBoot实现前后端分离架构,确保了系统的可维护性与可扩展性。系统功能完备,涵盖用户认证、多模态检测(图片/视频/实时摄像头)、检测记录管理、数据可视化及用户管理模块,所有数据持久化存储于MySQL数据库。实验与应用表明,该系统能够准确、高效地识别生菜关键生长阶段,为植物工厂的智能化管理提供了一个直观、可靠的Web平台解决方案。

关键词:YOLO;生菜生长周期检测;深度学习;SpringBoot;前后端分离;智能农业;DeepSeek

详细功能展示视频

基于深度学习的生菜生长周期识别检测系统(最新web界面+YOLOv8/YOLOv10/YOLOv11/YOLOv12+DeepSeek智能分析 +前后端分离)_哔哩哔哩_bilibili

基于深度学习的生菜生长周期识别检测系统(最新web界面+YOLOv8/YOLOv10/YOLOv11/YOLOv12+DeepSeek智能分析 +前后端分离)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1dnkLBGEXV/?spm_id_from=333.999.0.0&vd_source=549d0b4e2b8999929a61a037fcce3b0fhttps://www.bilibili.com/video/BV1dnkLBGEXV/


目录

 摘要

详细功能展示视频

第一章 引言

1.1 研究背景与意义

1.2 国内外研究现状

1.3 本文主要工作与创新点

项目核心内容描述

二、 系统核心特性概述

功能模块

登录注册模块

可视化模块

图像检测模块

视频检测模块

实时检测模块

图片识别记录管理

视频识别记录管理

摄像头识别记录管理

用户管理模块

数据管理模块(MySQL表设计)

模型训练结果

YOLO概述

YOLOv8

YOLOv10

YOLOv11

YOLOv12

主要改进

前端代码展示

后端代码展示

 详细功能展示视频

 项目安装教程


第一章 引言

1.1 研究背景与意义

随着精准农业和植物工厂的快速发展,对作物生长状态的实时、无损、自动化监测需求日益迫切。传统的人工巡检方式存在效率低、主观性强、难以实现24小时连续监控等弊端。生菜作为广泛栽培的叶菜类蔬菜,其生长周期短、阶段特征明显,是研究自动化生长监测的理想对象。特别是水培生菜,其生长环境可控,便于进行图像采集与分析。利用计算机视觉技术,尤其是基于深度学习的目标检测算法,对生菜生长图像进行自动分期识别,对于实现精准灌溉、营养调控、预测采收期以及提升生产管理自动化水平具有重要的理论价值与现实意义。

1.2 国内外研究现状

近年来,以YOLO系列为代表的单阶段目标检测算法因其卓越的实时性和较高的精度,在农业视觉检测领域得到了广泛应用。从YOLOv8到最新的YOLOv12,每一代都在网络结构、训练策略和损失函数上进行了优化,为特定场景下的性能提升提供了多样化的模型选择。同时,将先进的检测算法与成熟的Web开发框架(如SpringBoot)相结合,构建集数据采集、智能分析、结果可视化和用户交互于一体的综合性平台,已成为智慧农业系统开发的主流趋势。然而,现有系统大多针对单一模型或特定作物,缺乏在统一框架下对多版本前沿YOLO模型进行便捷比较与应用的灵活性,并且较少融入大语言模型的语义理解与报告生成能力。

1.3 本文主要工作与创新点

本文旨在研发一个功能完备、技术先进的生菜生长周期智能检测与分析系统。主要工作与创新点如下:

  1. 构建专用数据集:收集并标注了包含生菜5个关键生长阶段及栽培容器的图像数据集,为模型训练与评估提供基础。

  2. 多模型集成与切换:系统创新性地集成了YOLOv8、YOLOv10、YOLOv11、YOLOv12四个版本的检测模型,用户可根据实际需求(精度/速度)灵活选用和对比,提升了系统的适应性和技术前瞻性。

  3. AI增强分析:突破传统检测系统仅输出类别和框的局限,集成DeepSeek大语言模型,对检测场景进行智能分析与文本总结,提供更直观、更具指导性的农艺信息。

  4. 全功能Web系统开发:采用SpringBoot + 现代前端技术栈,实现了前后端分离的完整Web应用。功能涵盖从用户登录注册、多模态(图/视/实时)检测、记录管理、数据可视化到后台管理的全流程,形成了一个闭环的业务系统。

  5. 系统化数据管理:所有检测记录、用户操作均保存至MySQL数据库,实现了数据的持久化、可追溯与可分析,为长期的生产数据挖掘奠定了基础。


项目核心内容描述

本项目是一个面向智慧农业应用的综合性软件系统。系统以生菜水培生长周期自动化检测为核心业务目标,整合了深度学习、Web开发和大语言模型三项关键技术。

核心技术栈

  • 算法层:采用PyTorch框架,集成训练YOLOv8、YOLOv10、YOLOv11及YOLOv12等多个模型。

  • 后端层:基于Java SpringBoot,负责模型推理调度、用户逻辑、数据管理及与DeepSeek API的交互。使用MyBatis-Plus进行数据库操作。

  • 前端层:使用Vue.js等框架构建动态、响应式用户界面。

  • 数据层:使用MySQL数据库存储用户信息、图片/视频元数据、详细的检测记录(包括时间、所用模型、检测结果、AI分析文本)等。

  • AI服务集成:调用DeepSeek API,将检测到的物体类别、数量等信息组织成提示词,请求生成详细的生长状态描述和管理建议。

系统功能亮点

  1. 一站式检测:用户可通过上传图片、视频或开启摄像头,一键调用所选YOLO模型完成检测,结果实时显示并保存。

  2. 智能报告:图片检测任务在完成后,可触发DeepSeek生成一段易于理解的“AI分析报告”,极大提升了系统的实用性和交互体验。

  3. 全周期管理:系统不仅是一个检测工具,更是一个管理平台。所有历史记录可查询、可回溯,支持管理员对用户和数据进行全面管理。

  4. 模型实验场:为研究者或开发者提供了便捷的界面,以直观比较不同YOLO版本在相同实际场景下的性能表现。

二、 系统核心特性概述

功能模块


✅ 用户登录注册:支持密码检测,保存到MySQL数据库。

✅ 支持四种YOLO模型切换,YOLOv8、YOLOv10、YOLOv11、YOLOv12。

✅ 信息可视化,数据可视化。

✅ 图片检测支持AI分析功能,deepseek

✅ 支持图像检测、视频检测和摄像头实时检测,检测结果保存到MySQL数据库。

✅ 图片识别记录管理、视频识别记录管理和摄像头识别记录管理。

✅ 用户管理模块,管理员可以对用户进行增删改查。

✅ 个人中心,可以修改自己的信息,密码姓名头像等等。
 

登录注册模块

可视化模块

图像检测模块

  • YOLO模型集成 (v8/v10/v11/v12)

  • DeepSeek多模态分析

  • 支持格式:JPG/PNG/MP4/RTSP

视频检测模块

实时检测模块

图片识别记录管理

视频识别记录管理

摄像头识别记录管理

用户管理模块

数据管理模块(MySQL表设计)

  • users - 用户信息表

  • imgrecords- 图片检测记录表

  • videorecords- 视频检测记录表

  • camerarecords- 摄像头检测记录表

模型训练结果

#coding:utf-8
#根据实际情况更换模型
# yolon.yaml (nano):轻量化模型,适合嵌入式设备,速度快但精度略低。
# yolos.yaml (small):小模型,适合实时任务。
# yolom.yaml (medium):中等大小模型,兼顾速度和精度。
# yolob.yaml (base):基本版模型,适合大部分应用场景。
# yolol.yaml (large):大型模型,适合对精度要求高的任务。
 
from ultralytics import YOLO
 
model_path = 'pt/yolo12s.pt'
data_path = 'data.yaml'
 
if __name__ == '__main__':
    model = YOLO(model_path)
    results = model.train(data=data_path,
                          epochs=500,
                          batch=64,
                          device='0',
                          workers=0,
                          project='runs',
                          name='exp',
                          )
 
 
 
 
 
 
 
 

YOLO概述

YOLOv8

YOLOv8 由 Ultralytics 于 2023 年 1 月 10 日发布,在准确性和速度方面提供了尖端性能。基于先前 YOLO 版本的进步,YOLOv8 引入了新功能和优化,使其成为各种应用中目标检测任务的理想选择。

YOLOv8 的主要特性

  • 高级骨干和颈部架构: YOLOv8 采用最先进的骨干和颈部架构,从而改进了特征提取和目标检测性能。
  • 无锚点分离式 Ultralytics Head: YOLOv8 采用无锚点分离式 Ultralytics head,与基于锚点的方法相比,这有助于提高准确性并提高检测效率。
  • 优化的准确性-速度权衡: YOLOv8 专注于在准确性和速度之间保持最佳平衡,适用于各种应用领域中的实时对象检测任务。
  • 丰富的预训练模型: YOLOv8提供了一系列预训练模型,以满足各种任务和性能要求,使您更容易为特定用例找到合适的模型。

YOLOv10

YOLOv10 由 清华大学研究人员基于 Ultralytics Python构建,引入了一种新的实时目标检测方法,解决了先前 YOLO 版本中存在的后处理和模型架构缺陷。通过消除非极大值抑制 (NMS) 并优化各种模型组件,YOLOv10 以显著降低的计算开销实现了最先进的性能。大量实验表明,它在多个模型尺度上都具有卓越的精度-延迟权衡。

概述

实时目标检测旨在以低延迟准确预测图像中的对象类别和位置。YOLO 系列因其在性能和效率之间的平衡而一直处于这项研究的前沿。然而,对 NMS 的依赖和架构效率低下阻碍了最佳性能。YOLOv10 通过引入用于无 NMS 训练的一致双重分配和整体效率-准确性驱动的模型设计策略来解决这些问题。

架构

YOLOv10 的架构建立在之前 YOLO 模型优势的基础上,同时引入了几项关键创新。该模型架构由以下组件组成:

  1.  骨干网络:负责特征提取,YOLOv10 中的骨干网络使用增强版的 CSPNet (Cross Stage Partial Network),以改善梯度流并减少计算冗余。
  2. Neck:Neck 的设计目的是聚合来自不同尺度的特征,并将它们传递到 Head。它包括 PAN(路径聚合网络)层,用于有效的多尺度特征融合。
  3. One-to-Many Head:在训练期间为每个对象生成多个预测,以提供丰富的监督信号并提高学习准确性。
  4. 一对一头部:在推理时为每个对象生成一个最佳预测,以消除对NMS的需求,从而降低延迟并提高效率。

主要功能

  1. 免NMS训练:利用一致的双重分配来消除对NMS的需求,从而降低推理延迟。
  2. 整体模型设计:从效率和准确性的角度对各种组件进行全面优化,包括轻量级分类 Head、空间通道解耦下采样和秩引导块设计。
  3. 增强的模型功能: 结合了大内核卷积和部分自注意力模块,以提高性能,而无需显着的计算成本。

YOLOv11

YOLO11 是 Ultralytics YOLO 系列实时目标检测器的最新迭代版本,它以前沿的精度、速度和效率重新定义了可能性。YOLO11 在之前 YOLO 版本的显著进步基础上,在架构和训练方法上进行了重大改进,使其成为各种计算机视觉任务的多功能选择。

主要功能

  • 增强的特征提取: YOLO11 采用改进的 backbone 和 neck 架构,从而增强了特征提取能力,以实现更精确的目标检测和复杂的任务性能。
  • 优化效率和速度: YOLO11 引入了改进的架构设计和优化的训练流程,从而提供更快的处理速度,并在精度和性能之间保持最佳平衡。
  • 更高精度,更少参数: 随着模型设计的进步,YOLO11m 在 COCO 数据集上实现了更高的 平均精度均值(mAP),同时比 YOLOv8m 少用 22% 的参数,在不牺牲精度的情况下提高了计算效率。
  • 跨环境的适应性: YOLO11 可以无缝部署在各种环境中,包括边缘设备、云平台和支持 NVIDIA GPU 的系统,从而确保最大的灵活性。
  • 广泛支持的任务范围: 无论是目标检测、实例分割、图像分类、姿势估计还是旋转框检测 (OBB),YOLO11 都旨在满足各种计算机视觉挑战。

Ultralytics YOLO11 在其前代产品的基础上进行了多项重大改进。主要改进包括:

  • 增强的特征提取: YOLO11 采用了改进的骨干网络和颈部架构,增强了特征提取能力,从而实现更精确的目标检测。
  • 优化的效率和速度: 改进的架构设计和优化的训练流程提供了更快的处理速度,同时保持了准确性和性能之间的平衡。
  • 更高精度,更少参数: YOLO11m 在 COCO 数据集上实现了更高的平均 精度均值 (mAP),同时比 YOLOv8m 少用 22% 的参数,在不牺牲精度的情况下提高了计算效率。
  • 跨环境的适应性: YOLO11 可以部署在各种环境中,包括边缘设备、云平台和支持 NVIDIA GPU 的系统。
  • 广泛支持的任务范围: YOLO11 支持各种计算机视觉任务,例如目标检测、实例分割、图像分类、姿势估计和旋转框检测 (OBB)。

YOLOv12

YOLO12引入了一种以注意力为中心的架构,它不同于之前YOLO模型中使用的传统基于CNN的方法,但仍保持了许多应用所需的实时推理速度。该模型通过在注意力机制和整体网络架构方面的新颖方法创新,实现了最先进的目标检测精度,同时保持了实时性能。尽管有这些优势,YOLO12仍然是一个社区驱动的版本,由于其沉重的注意力模块,可能表现出训练不稳定、内存消耗增加和CPU吞吐量较慢的问题,因此Ultralytics仍然建议将YOLO11用于大多数生产工作负载。

主要功能

  • 区域注意力机制: 一种新的自注意力方法,可以有效地处理大型感受野。它将 特征图 分成 l 个大小相等的区域(默认为 4 个),水平或垂直,避免复杂的运算并保持较大的有效感受野。与标准自注意力相比,这大大降低了计算成本。
  • 残差高效层聚合网络(R-ELAN):一种基于 ELAN 的改进的特征聚合模块,旨在解决优化挑战,尤其是在更大规模的以注意力为中心的模型中。R-ELAN 引入:
    • 具有缩放的块级残差连接(类似于层缩放)。
    • 一种重新设计的特征聚合方法,创建了一个类似瓶颈的结构。
  • 优化的注意力机制架构:YOLO12 精简了标准注意力机制,以提高效率并与 YOLO 框架兼容。这包括:
    • 使用 FlashAttention 来最大限度地减少内存访问开销。
    • 移除位置编码,以获得更简洁、更快速的模型。
    • 调整 MLP 比率(从典型的 4 调整到 1.2 或 2),以更好地平衡注意力和前馈层之间的计算。
    • 减少堆叠块的深度以改进优化。
    • 利用卷积运算(在适当的情况下)以提高其计算效率。
    • 在注意力机制中添加一个7x7可分离卷积(“位置感知器”),以隐式地编码位置信息。
  • 全面的任务支持: YOLO12 支持一系列核心计算机视觉任务:目标检测、实例分割、图像分类、姿势估计和旋转框检测 (OBB)。
  • 增强的效率: 与许多先前的模型相比,以更少的参数实现了更高的准确率,从而证明了速度和准确率之间更好的平衡。
  • 灵活部署: 专为跨各种平台部署而设计,从边缘设备到云基础设施。

主要改进

  1. 增强的 特征提取:

    • 区域注意力: 有效处理大型感受野,降低计算成本。
    • 优化平衡: 改进了注意力和前馈网络计算之间的平衡。
    • R-ELAN:使用 R-ELAN 架构增强特征聚合。
  2. 优化创新:

    • 残差连接:引入具有缩放的残差连接以稳定训练,尤其是在较大的模型中。
    • 改进的特征集成:在 R-ELAN 中实现了一种改进的特征集成方法。
    • FlashAttention: 整合 FlashAttention 以减少内存访问开销。
  3. 架构效率:

    • 减少参数:与之前的许多模型相比,在保持或提高准确性的同时,实现了更低的参数计数。
    • 简化的注意力机制:使用简化的注意力实现,避免了位置编码。
    • 优化的 MLP 比率:调整 MLP 比率以更有效地分配计算资源。

前端代码展示

前端登录界面一小部分代码展示

<template>
	<div class="register-container">
		<!-- 农业生态背景(与登录页面一致) -->
		<div class="agriculture-background">
			<!-- 生长粒子 -->
			<div class="growth-particles">
				<div class="particle" v-for="n in 30" :key="`particle-${n}`" :style="getParticleStyle(n)">
					<div class="particle-glow"></div>
				</div>
			</div>
			
			<!-- 叶片波纹 -->
			<div class="leaf-ripples">
				<div class="ripple" v-for="n in 8" :key="`ripple-${n}`" :style="getRippleStyle(n)"></div>
			</div>
			
			<!-- 生长数据网格 -->
			<div class="data-grid">
				<div class="grid-node" v-for="n in 25" :key="`node-${n}`" :style="getNodeStyle(n)">
					<div class="node-pulse"></div>
				</div>
			</div>
			
			<!-- 植物图标云 -->
			<div class="plant-cloud">
				<div class="plant" v-for="n in 12" :key="`plant-${n}`" :style="getPlantStyle(n)">
					{{ getRandomPlantIcon() }}
				</div>
			</div>
			
			<!-- 数据流扫描线 -->
			<div class="data-stream-scan">
				<div class="stream-line" v-for="n in 6" :key="`stream-${n}`" :style="getStreamStyle(n)">
					<div class="stream-path"></div>
				</div>
			</div>
			
			<!-- 土壤层 -->
			<div class="soil-layer">
				<div class="soil-line" v-for="n in 5" :key="`soil-${n}`" :style="getSoilStyle(n)"></div>
			</div>
		</div>

		<!-- 注册主容器 -->
		<div class="register-main">
			<!-- 农业科技界面容器 -->
			<div class="agri-container">
				<div class="agri-effect">
					<div class="growth-pulse"></div>
					<div class="data-connections"></div>
				</div>
				
				<!-- 系统标志 -->
				<div class="system-brand">
					<div class="brand-icon">
						<div class="lettuce-icon">
							<div class="lettuce-structure">
								<div class="leaf leaf-1"></div>
								<div class="leaf leaf-2"></div>
								<div class="leaf leaf-3"></div>
								<div class="leaf leaf-4"></div>
								<div class="stem"></div>
								<div class="growth-core"></div>
							</div>
							<div class="growth-aura"></div>
						</div>
						<div class="icon-glow"></div>
					</div>
					<div class="brand-text">
						<h1 class="system-title">
							<span class="lettuce-text">LettuceAI</span>
							<span class="growth-text">GrowthScan</span>
						</h1>
						<p class="system-subtitle">智能生菜生长周期监测系统</p>
						<p class="company-tag">精准农业 · 智慧种植实验室</p>
					</div>
				</div>

				<!-- 注册面板 -->
				<div class="register-panel">
					<div class="panel-header">
						<div class="header-line"></div>
						<h2>农业专家注册</h2>
						<div class="header-line"></div>
					</div>
					
					<div class="panel-content">
						<el-form :model="ruleForm" :rules="registerRules" ref="ruleFormRef">
							<!-- 用户名输入 -->
							<el-form-item prop="username">
								<div class="input-field">
									<div class="field-icon">
										<div class="agri-icon"></div>
									</div>
									<el-input 
										v-model="ruleForm.username" 
										placeholder="请输入农业专家ID" 
										class="agri-input"
										size="large"
										@focus="onInputFocus"
										@blur="onInputBlur"
									/>
									<div class="field-glow"></div>
								</div>
								<div class="input-hint">创建您的种植专家身份标识</div>
							</el-form-item>

							<!-- 密码输入 -->
							<el-form-item prop="password">
								<div class="input-field">
									<div class="field-icon">
										<div class="secure-icon"></div>
									</div>
									<el-input 
										v-model="ruleForm.password" 
										type="password" 
										placeholder="请输入安全密钥" 
										show-password
										class="agri-input"
										size="large"
										@focus="onInputFocus"
										@blur="onInputBlur"
									/>
									<div class="field-glow"></div>
								</div>
								<div class="input-hint">设置农业数据访问密钥</div>
							</el-form-item>

							<!-- 确认密码输入 -->
							<el-form-item prop="confirm">
								<div class="input-field">
									<div class="field-icon">
										<div class="shield-icon"></div>
									</div>
									<el-input 
										v-model="ruleForm.confirm" 
										type="password" 
										placeholder="请确认安全密钥" 
										show-password
										class="agri-input"
										size="large"
										@focus="onInputFocus"
										@blur="onInputBlur"
									/>
									<div class="field-glow"></div>
								</div>
								<div class="input-hint">验证密钥一致性</div>
							</el-form-item>

							<!-- 注册按钮 -->
							<el-form-item>
								<div class="register-action">
									<el-button 
										type="primary" 
										class="agri-btn"
										@click="submitForm(ruleFormRef)"
										@mouseenter="onBtnHover"
										@mouseleave="onBtnLeave"
									>
										<div class="btn-content">
											<div class="btn-text">
												<span class="text-main">创建专家身份</span>
												<span class="text-sub">AGRICULTURE REGISTER</span>
											</div>
											<div class="btn-growth">
												<div class="growth-dot"></div>
												<div class="growth-dot"></div>
												<div class="growth-dot"></div>
											</div>
										</div>
										<div class="btn-energy"></div>
										<div class="btn-particles">
											<div class="particle" v-for="n in 3" :key="`btn-particle-${n}`"></div>
										</div>
									</el-button>
									
									<div class="system-status">
										<div class="status-indicator">
											<div class="status-dot active"></div>
											<span>注册系统就绪</span>
										</div>
										<div class="status-info">
											<span>v3.1.5 • 多光谱分析模式</span>
										</div>
									</div>
								</div>
							</el-form-item>
						</el-form>

						<!-- 辅助选项 -->
						<div class="panel-options">
							<router-link to="/login" class="option-link">
								<div class="link-icon">
									<div class="growth-return"></div>
								</div>
								<span>返回登录</span>
								<div class="link-trail"></div>
							</router-link>
						</div>
					</div>
				</div>

				<!-- 系统信息 -->
				<div class="system-info">
					<div class="info-grid">
						<div class="info-item">
							<div class="info-icon lettuce-icon-info"></div>
							<div class="info-content">
								<span class="info-label">监测精度</span>
								<span class="info-value">95.5%</span>
							</div>
						</div>
						<div class="info-item">
							<div class="info-icon speed-icon"></div>
							<div class="info-content">
								<span class="info-label">扫描速度</span>
								<span class="info-value">5ms</span>
							</div>
						</div>
						<div class="info-item">
							<div class="info-icon model-icon"></div>
							<div class="info-content">
								<span class="info-label">生长阶段</span>
								<span class="info-value">5阶段</span>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>

		<!-- 背景装饰元素 -->
		<div class="background-elements">
			<!-- 生长数据流 -->
			<div class="growth-data-stream">
				<div class="data-flow" v-for="n in 8" :key="`flow-${n}`" :style="getDataStreamStyle(n)">
					<span v-for="i in 15" :key="`data-${n}-${i}`">
						{{ ['🌱','🍃','🥬','🌿','🌾','💧','☀️','📈','📊','🔬'][Math.floor(Math.random() * 10)] }}
					</span>
				</div>
			</div>
			
			<!-- 浮动生长标签 -->
			<div class="floating-labels">
				<div class="floating-label" v-for="n in 10" :key="`label-${n}`" :style="getLabelStyle(n)">
					{{ ['发芽期','幼苗期','莲座期','结球期','成熟期','灌溉','施肥','光照','温度','湿度'][Math.floor(Math.random() * 10)] }}
				</div>
			</div>
		</div>
	</div>
</template>

<script lang="ts" setup>
import { reactive, ref } from 'vue';
import { useRouter } from 'vue-router';
import { ElMessage } from 'element-plus';
import type { FormInstance, FormRules } from 'element-plus';
import request from '/@/utils/request';

const router = useRouter();
const ruleFormRef = ref<FormInstance>();

const ruleForm = reactive({
	username: '',
	password: '',
	confirm: '',
});

const registerRules = reactive<FormRules>({
	username: [
		{ required: true, message: '请输入农业专家ID', trigger: 'blur' },
		{ min: 3, max: 20, message: '长度在3-20个字符', trigger: 'blur' },
	],
	password: [
		{ required: true, message: '请输入安全密钥', trigger: 'blur' },
		{ min: 5, max: 30, message: '长度在5-30个字符', trigger: 'blur' },
	],
	confirm: [
		{ required: true, message: '请确认安全密钥', trigger: 'blur' },
		{
			validator: (rule, value, callback) => {
				if (value !== ruleForm.password) {
					callback(new Error('两次输入的密钥不一致!'));
				} else {
					callback();
				}
			},
			trigger: 'blur',
		},
	],
});

后端代码展示

 详细功能展示视频

基于深度学习的生菜生长周期识别检测系统(最新web界面+YOLOv8/YOLOv10/YOLOv11/YOLOv12+DeepSeek智能分析 +前后端分离)_哔哩哔哩_bilibili

基于深度学习的生菜生长周期识别检测系统(最新web界面+YOLOv8/YOLOv10/YOLOv11/YOLOv12+DeepSeek智能分析 +前后端分离)_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1dnkLBGEXV/?spm_id_from=333.999.0.0&vd_source=549d0b4e2b8999929a61a037fcce3b0fhttps://www.bilibili.com/video/BV1dnkLBGEXV/

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐