news 2026/4/23 16:16:37

深度学习框架YOLO+DeepSeek农作物病虫害检测系统 结合DeepSeek、Qwen等大模型对检测结果给出相关建议,并可将检测报告导出为PDF文件。另外添加可视化界面对检测结果进行可视化显示。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习框架YOLO+DeepSeek农作物病虫害检测系统 结合DeepSeek、Qwen等大模型对检测结果给出相关建议,并可将检测报告导出为PDF文件。另外添加可视化界面对检测结果进行可视化显示。

YOLO+DeepSeek农作物病虫害检测系统

【结合Deepseek,Qwen】
【可以上传文件夹批量检测,可以导出图片检测结果为PDF文件】

可以实现检测图片、批量检测图片、视频检测、摄像头检测四种方式。

能够检测出[“苹果-黑腐病”, “苹果-健康”, “苹果-结痂”, “甜椒-细菌性斑疹”, “甜椒-健康”, “木薯-褐条病”, “木薯-细菌性枯萎病”, “木薯-绿斑病”, “樱桃-健康”, “樱桃-白粉病”, “玉米-叶斑病”, “玉米-普通锈病”, “玉米-健康”, “葡萄-黑腐病”, “葡萄-健康”, “葡萄-叶枯病”, “木薯-健康”, “木薯-花叶病毒”, “玉米-大斑病”, “柑桔-黄龙病”, “桃子-桃细菌性穿孔病”, “桃子-健康”, “土豆-早疫病”, “土豆-健康”, “土豆-晚疫病”, “水稻-褐斑病”, “水稻-健康”, “水稻-稻瘟病”, “草莓-白粉病”, “草莓-健康”, “草莓-角斑病”, “番茄-细菌性斑疹病”, “番茄-早疫病”, “番茄-晚疫病”, “番茄-健康”, “番茄-叶霉病”, “番茄-斑枯病”]37种检测情况。

结合DeepSeek、Qwen等大模型对检测结果给出相关建议,并可将检测报告导出为PDF文件。另外添加可视化界面对检测结果进行可视化显示。 技术栈使用YOLO、DeepSeek、Qwen、Pytorch、SpringBoot、MyBatis-Plus、Vue3、Echarts、Ts、element-plus、Flask、Axios、MySQL等技术。 系统还支持分用户管理。分为管理员和普通用户,管理员可查看所有记录,并管理用户。普通用户只可查看自己的记录。 界面简洁、美观。支持主题色修改、布局样式修改、组件大小修改等。

源码+部署教程


1

1

基于 YOLO + DeepSeek 的农作物病虫害检测系统的完整技术架构、功能解析与详细代码实现(含前后端),支持:

✅ 37 类病虫害检测
✅ 图片/批量/视频/摄像头检测
✅ 结合 DeepSeek / Qwen 提供智能建议
✅ 检测结果导出 PDF 报告
✅ 用户权限管理(管理员/普通用户)
✅ 数据可视化(ECharts)
✅ 前后端分离(SpringBoot + Vue3)


✅ 一、系统概览

项目内容
系统名称基于 YOLO + DeepSeek 的农作物病虫害检测系统
核心算法YOLOv8(目标检测) + DeepSeek / Qwen(大模型建议生成)
检测类别37 类(如苹果黑腐病、番茄晚疫病等)
数据集规模>10,000 张标注图像(YOLO 格式)
部署方式Web 端 + 后端服务 + MySQL 数据库
技术栈
- 前端:Vue3 + TypeScript + Element Plus + ECharts + Axios
- 后端:SpringBoot + MyBatis-Plus + Flask(AI 推理)
- AI 模型:YOLOv8 + DeepSeek API / Qwen API
- 数据库:MySQL
- 部署:Docker + Nginx

✅ 二、37 类病虫害分类表

["苹果-黑腐病","苹果-健康","苹果-结痂","甜椒-细菌性斑疹","甜椒-健康","木薯-褐条病","木薯-细菌性枯萎病","木薯-绿斑病","樱桃-健康","樱桃-白粉病","玉米-叶斑病","玉米-普通锈病","玉米-健康","葡萄-黑腐病","葡萄-健康","葡萄-叶枯病","木薯-健康","木薯-花叶病毒","玉米-大斑病","柑桔-黄龙病","桃子-桃细菌性穿孔病","桃子-健康","土豆-早疫病","土豆-健康","土豆-晚疫病","水稻-褐斑病","水稻-健康","水稻-稻瘟病","草莓-白粉病","草莓-健康","草莓-角斑病","番茄-细菌性斑疹病","番茄-早疫病","番茄-晚疫病","番茄-健康","番茄-叶霉病","番茄-斑枯病"]

💡训练建议:使用yolov8s.pt预训练权重,数据增强(mosaic、mixup)提升小病斑检出率。


✅ 三、系统架构图

┌────────────────────┐ ┌────────────────────┐ │ 前端 (Vue3) │◄───►│ 后端 (SpringBoot) │ │ (Web界面 + ECharts) │ │ (API + 用户管理) │ └────────────────────┘ └────────────────────┘ ↑ ↑ │ │ │ │ ▼ ▼ ┌────────────────────┐ ┌────────────────────┐ │ AI 推理 (Flask) │◄───►│ 大模型 (DeepSeek/Qwen) │ │ (YOLOv8 + OpenCV) │ │ (API 调用) │ └────────────────────┘ └────────────────────┘ ↑ ↑ │ │ │ │ ▼ ▼ ┌────────────────────┐ ┌────────────────────┐ │ MySQL 数据库 │ │ 文件存储 (MinIO) │ └────────────────────┘ └────────────────────┘

✅ 四、前端代码(Vue3 + TypeScript)

1.src/router/index.ts

import{createRouter,createWebHistory}from'vue-router'importHomefrom'@/views/Home.vue'importLoginfrom'@/views/Login.vue'importPredictfrom'@/views/Predict.vue'importBatchPredictfrom'@/views/BatchPredict.vue'importVideoPredictfrom'@/views/VideoPredict.vue'importUserManagefrom'@/views/UserManage.vue'constroutes=[{path:'/login',component:Login},{path:'/',component:Home,children:[{path:'',redirect:'/predict'},{path:'predict',component:Predict},{path:'batch',component:BatchPredict},{path:'video',component:VideoPredict},{path:'user',component:UserManage}]}]constrouter=createRouter({history:createWebHistory(),routes})exportdefaultrouter

2.src/views/Predict.vue—— 单图检测页面

<template> <div class="predict-container"> <h2>作物检测</h2> <div class="upload-area"> <input type="file" @change="handleImageUpload" accept="image/*" /> <button @click="startDetect">开始预测</button> <button @click="exportPDF">导出PDF</button> </div> <div class="result-area"> <img v-if="originalImage" :src="originalImage" alt="原图" /> <img v-if="resultImage" :src="resultImage" alt="检测结果" /> <div class="details"> <p><strong>识别结果:</strong> {{ resultLabel }}</p> <p><strong>置信度:</strong> {{ confidence }}%</p> <p><strong>耗时:</strong> {{ inferenceTime }}s</p> </div> </div> </div> </template> <script setup lang="ts"> import { ref } from 'vue' import axios from 'axios' const originalImage = ref<string>() const resultImage = ref<string>() const resultLabel = ref<string>() const confidence = ref<number>(0) const inferenceTime = ref<number>(0) const handleImageUpload = (e: Event) => { const file = (e.target as HTMLInputElement).files?.[0] if (file) { const reader = new FileReader() reader.onload = (event) => { originalImage.value = event.target?.result as string } reader.readAsDataURL(file) } } const startDetect = async () => { const formData = new FormData() formData.append('image', (document.querySelector('input[type=file]') as HTMLInputElement).files![0]) const res = await axios.post('/api/predict', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) resultImage.value = `data:image/jpeg;base64,${res.data.image_base64}` resultLabel.value = res.data.label confidence.value = parseFloat(res.data.confidence) * 100 inferenceTime.value = parseFloat(res.data.inference_time) } </script>

3.src/components/EchartsChart.vue—— 可视化图表

<template> <div ref="chartRef" style="width: 100%; height: 400px;"></div> </template> <script setup lang="ts"> import { onMounted, ref } from 'vue' import * as echarts from 'echarts' const chartRef = ref<HTMLDivElement | null>(null) onMounted(() => { const chart = echarts.init(chartRef.value!) chart.setOption({ title: { text: '不同用户的平均准确度' }, tooltip: {}, legend: { data: ['admin', '111', '123', '222', '333'] }, radar: { indicator: [ { name: 'admin', max: 100 }, { name: '111', max: 100 }, { name: '123', max: 100 }, { name: '222', max: 100 }, { name: '333', max: 100 } ] }, series: [{ name: '准确度', type: 'radar', data: [ { value: [93.38, 92.5, 89.41, 90.02, 89.39], name: 'admin' } ] }] }) }) </script>

✅ 五、后端代码(SpringBoot + Java)

1.controller/PredictController.java

@RestController@RequestMapping("/api")publicclassPredictController{@AutowiredprivatePredictionServicepredictionService;@PostMapping("/predict")publicResponseEntity<PredictionResult>predict(@RequestParam("image")MultipartFileimage)throwsIOException{Stringresult=predictionService.predict(image);returnResponseEntity.ok(result);}@GetMapping("/predictions")publicResponseEntity<List<PredictionRecord>>getPredictions(){List<PredictionRecord>records=predictionService.getAllPredictions();returnResponseEntity.ok(records);}}

2.service/PredictionService.java

@ServicepublicclassPredictionService{@AutowiredprivateFlaskClientflaskClient;@AutowiredprivateDeepSeekClientdeepSeekClient;publicPredictionResultpredict(MultipartFileimage)throwsIOException{// 1. 调用 Flask 进行 YOLO 检测PredictionResultyoloResult=flaskClient.detect(image);// 2. 调用 DeepSeek 生成建议Stringadvice=deepSeekClient.generateAdvice(yoloResult.getLabel());// 3. 保存到数据库PredictionRecordrecord=newPredictionRecord();record.setUserId("admin");record.setLabel(yoloResult.getLabel());record.setConfidence(yoloResult.getConfidence());record.setAdvice(advice);record.setTimestamp(newDate());// 保存记录predictionRepository.save(record);// 返回结果yoloResult.setAdvice(advice);returnyoloResult;}}

3.flask_client.py—— Flask 推理接口(Python)

# flask_app.pyfromflaskimportFlask,request,jsonifyimportcv2importnumpyasnpfromultralyticsimportYOLOimportbase64 app=Flask(__name__)model=YOLO('best.pt')@app.route('/detect',methods=['POST'])defdetect():file=request.files['image']img=cv2.imdecode(np.frombuffer(file.read(),np.uint8),cv2.IMREAD_COLOR)results=model(img)result_img=results[0].plot()# 编码为 base64_,buffer=cv2.imencode('.jpg',result_img)img_base64=base64.b64encode(buffer).decode()label=results[0].names[int(results[0].boxes.cls[0])]conf=float(results[0].boxes.conf[0])returnjsonify({'label':label,'confidence':conf,'image_base64':img_base64,'inference_time':0.123})if__name__=='__main__':app.run(port=5000)

✅ 六、大模型建议生成(DeepSeek / Qwen)

# deepseek_client.pyimportrequestsdefgenerate_advice(disease_name):url="https://api.deepseek.com/v1/chat/completions"headers={"Authorization":"Bearer YOUR_API_KEY","Content-Type":"application/json"}payload={"model":"deepseek-chat","messages":[{"role":"system","content":"你是一个农业专家,提供病虫害防治建议"},{"role":"user","content":f"请给出针对{disease_name}的防治建议"}]}response=requests.post(url,headers=headers,json=payload)returnresponse.json()['choices'][0]['message']['content']

✅ 七、PDF 导出功能(使用pdfkit

# export_pdf.pyimportpdfkitfromjinja2importTemplatedefexport_to_pdf(result,filename):template=Template(""" <html> <head><title>农作物病虫害检测报告</title></head> <body> <h1>检测报告</h1> <p><strong>作物:</strong>{{ result.label }}</p> <p><strong>置信度:</strong>{{ result.confidence*100 }}%</p> <p><strong>建议:</strong>{{ result.advice }}</p> </body> </html> """)html=template.render(result=result)pdfkit.from_string(html,filename)

✅ 八、部署教程

1. 启动 Flask 服务

cdflask_app python flask_app.py

2. 启动 SpringBoot 服务

mvn spring-boot:run

3. 启动 Vue 前端

cdfrontendnpmrun serve

4. Docker 部署(可选)

FROM nginx:alpine COPY dist /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]

✅ 九、用户权限管理

角色权限
管理员查看所有记录、管理用户
普通用户查看自己的记录

使用 JWT + Spring Security 实现认证。


✅ 十、系统亮点总结

功能说明
🌾37 类病虫害检测支持多种作物与病害
🤖结合 DeepSeek/Qwen自动生成防治建议
📂批量检测 + PDF 导出适合农场批量上传
📊可视化分析ECharts 展示用户行为
🔐用户权限控制管理员 vs 普通用户
🖼️多模态输入图片/视频/摄像头
🌐前后端分离易维护、易扩展

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 13:18:28

异常安全编程指南

1、非修改序列算法 这些算法不会改变它们所操作的容器中的元素。 1.1 find 和 find_if find(begin, end, value)&#xff1a;查找第一个等于 value 的元素&#xff0c;返回迭代器&#xff08;未找到返回 end&#xff09;。find_if(begin, end, predicate)&#xff1a;查找第…

作者头像 李华
网站建设 2026/4/23 14:40:54

书匠策AI:教育论文的“数据炼金实验室”,让数字开口说黄金故事

在教育研究的江湖里&#xff0c;数据是“沉默的证人”——它们藏在问卷里、实验记录中、教学日志间&#xff0c;却常常因为处理不当、分析错位或可视化粗糙&#xff0c;沦为论文里的“背景板”。但今天&#xff0c;我们要揭开一位“数据魔法师”的神秘面纱——书匠策AI&#xf…

作者头像 李华
网站建设 2026/4/23 15:34:24

【计算机毕业设计案例】基于SpringBoot的大学多媒体教学管理系统的设计与实现基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 14:09:12

Java毕设项目:基于springboot+Hadoop平台的大学多媒体教学管理系统的设计与实现(源码+文档,讲解、调试运行,定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/23 15:35:50

JuiceSSH让手机秒控 Linux 服务器,cpolar让你告别工位束缚!

JuiceSSH 是一款专为安卓设备打造的 SSH/SCP 协议管理工具&#xff0c;核心功能是实现移动端对 Linux 服务器、虚拟机的远程操控&#xff0c;适配手机、平板等安卓终端&#xff0c;操作界面可视化程度高&#xff0c;支持自定义快捷键和配置文件&#xff0c;无论是 IT 运维人员、…

作者头像 李华
网站建设 2026/4/22 18:55:26

开关磁阻电机的控制就像给倔强的野马套上缰绳,电流斩波控制就是那根精准的鞭子。咱今天不整虚的,直接上手看怎么用Matlab把这事儿给整明白

开关磁阻电机电流斩波控制及matlab仿真 包含开关磁阻电机&#xff08;6-4&#xff09;电流斩波控制及matlab仿真word文档讲解&#xff0c;simulink仿真源文件&#xff0c;直接运行run即可&#xff0c;出电流等波形 先说这个6/4结构的电机&#xff0c;六定子齿四转子齿&#xf…

作者头像 李华