news 2026/1/16 14:35:54

【保姆级教程】手把手教你开发“智慧农业”:Spring Boot + AI 病虫害识别 + 二维码溯源(从 0 到 1 全流程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【保姆级教程】手把手教你开发“智慧农业”:Spring Boot + AI 病虫害识别 + 二维码溯源(从 0 到 1 全流程)

前言
很多同学毕设想做“高大上”的项目,但苦于不会训练 AI 模型。其实,企业级开发中我们通常会调用成熟的云端 API。
本文将带你使用Spring Boot 3+Vue 3,结合百度 AI 开放平台Google ZXing,从零撸一个**“智慧农业病虫害识别与溯源平台”**。
不卖源码,只讲技术!跟着做,你也能搞定优秀毕设!


一、 项目技术架构与准备

核心业务完整流程图

用户(农户)前端(Vue3)后端(Spring Boot)百度 AI 平台数据库(MySQL)阶段一:病虫害智能识别流程1. 选择作物图片并上传12. 调用 /api/identify (上传文件)23. 将图片保存至本地磁盘34. 发起 SDK 请求 (传入图片路径)45. 返回识别结果 JSON (名称/置信度)56. 记录识别日志 (sys_pest_log)67. 返回成功结果 (名称+图片URL)77. 返回提示信息8alt[识别成功 (置信度>0.5)][识别失败/置信度低]8. 展示识别名称和图片9======================================阶段二:农产品溯源生成流程9. 录入农产品批次信息 (点击生成追溯码)1010. 调用 /api/createTrace1111. 生成批次ID (UUID)1212. 拼接 H5 溯源链接地址1313. 调用 ZXing 生成 Base64 二维码1414. 保存批次信息和二维码 (sys_trace_source)1515. 返回二维码图片 (Base64)1616. 展示溯源二维码 (可下载/打印)17用户(农户)前端(Vue3)后端(Spring Boot)百度 AI 平台数据库(MySQL)

1.1 技术栈

  • 后端:Spring Boot 2.7/3.0 + MyBatis-Plus
  • 前端:Vue 3 + Element Plus + Axios
  • 数据库:MySQL 8.0
  • 核心技术
  • AI 识别:百度 AI 开放平台(图像识别 SDK)
  • 溯源技术:Google ZXing(生成二维码)
  • 文件存储:本地磁盘映射(最简单,适合毕设)

1.2 准备工作

  1. JDK 17+Maven 3.6+
  2. IntelliJ IDEA
  3. 百度 AI 账号:去 百度 AI 开放平台 注册,搜索“植物识别”,创建应用,获取AppIDAPI KeySecret Key。(这是免费的!)
  4. 找一个自己熟悉的后台管理系统如:若依,基于这个系统做二开。

二、 数据库设计 (MySQL)

我们需要两张核心表:一张存识别记录,一张存溯源信息。直接在 Navicat 执行以下 SQL:

-- 1. 病虫害识别记录表CREATETABLE`sys_pest_log`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`img_path`varchar(255)DEFAULTNULLCOMMENT'图片存储路径',`pest_name`varchar(100)DEFAULTNULLCOMMENT'识别结果',`confidence`decimal(10,6)DEFAULTNULLCOMMENT'置信度',`create_time`datetimeDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COMMENT='病虫害识别记录';-- 2. 农产品溯源表CREATETABLE`sys_trace_source`(`batch_id`varchar(64)NOTNULLCOMMENT'批次号(主键)',`product_name`varchar(100)DEFAULTNULLCOMMENT'农产品名称',`origin_place`varchar(255)DEFAULTNULLCOMMENT'产地',`plant_time`dateDEFAULTNULLCOMMENT'种植时间',`qr_code`mediumtextCOMMENT'二维码Base64',PRIMARYKEY(`batch_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COMMENT='农产品溯源';

三、 后端核心实现 (Spring Boot)

3.1 引入依赖 (pom.xml)

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.baidu.aip</groupId><artifactId>java-sdk</artifactId><version>4.16.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency></dependencies>

3.2 配置文件 (application.yml)

server:port:8080# 文件上传路径(根据你自己的电脑修改)file:upload-path:D:/bishe/upload/# 百度 AI 配置(填你刚才申请的)baidu:ai:app-id:你的AppIDapi-key:你的ApiKeysecret-key:你的SecretKey

3.3 核心功能一:实现 AI 病虫害识别

不要把逻辑写在 Controller 里,我们创建一个BaiduAiUtils工具类。

importcom.baidu.aip.imageclassify.AipImageClassify;importorg.json.JSONArray;importorg.json.JSONObject;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.stereotype.Component;importjavax.annotation.PostConstruct;importjava.util.HashMap;@ComponentpublicclassBaiduAiUtils{@Value("${baidu.ai.app-id}")privateStringappId;@Value("${baidu.ai.api-key}")privateStringapiKey;@Value("${baidu.ai.secret-key}")privateStringsecretKey;privateAipImageClassifyclient;@PostConstructpublicvoidinit(){// 初始化客户端client=newAipImageClassify(appId,apiKey,secretKey);client.setConnectionTimeoutInMillis(2000);client.setSocketTimeoutInMillis(60000);}/** * 识别图片 * @param localPath 本地图片绝对路径 * @return 识别出的名称 */publicStringdetectPlant(StringlocalPath){// 传入可选参数,baike_num=1 表示返回百科信息HashMap<String,String>options=newHashMap<>();options.put("baike_num","1");// 调用百度植物识别接口JSONObjectres=client.plantDetect(localPath,options);// 解析返回的 JSONif(res.has("result")){JSONArrayresult=res.getJSONArray("result");// 取置信度最高的第一条JSONObjecttop1=result.getJSONObject(0);doublescore=top1.getDouble("score");Stringname=top1.getString("name");// 简单过滤:置信度大于 50% 才算识别成功if(score>0.5){returnname+" (置信度:"+String.format("%.2f",score)+")";}}return"无法识别";}}

3.4 核心功能二:实现二维码生成

创建一个QrCodeUtils,生成 Base64 格式的图片,方便前端直接展示。

importcom.google.zxing.BarcodeFormat;importcom.google.zxing.client.j2se.MatrixToImageWriter;importcom.google.zxing.common.BitMatrix;importcom.google.zxing.qrcode.QRCodeWriter;importorg.apache.tomcat.util.codec.binary.Base64;importjava.io.ByteArrayOutputStream;publicclassQrCodeUtils{/** * 生成二维码 Base64 字符串 * @param content 二维码里的内容(比如 H5 链接) */publicstaticStringgenerateQrBase64(Stringcontent,intwidth,intheight)throwsException{QRCodeWriterqrCodeWriter=newQRCodeWriter();BitMatrixbitMatrix=qrCodeWriter.encode(content,BarcodeFormat.QR_CODE,width,height);ByteArrayOutputStreampngOutputStream=newByteArrayOutputStream();MatrixToImageWriter.writeToStream(bitMatrix,"PNG",pngOutputStream);byte[]pngData=pngOutputStream.toByteArray();return"data:image/png;base64,"+Base64.encodeBase64String(pngData);}}

3.5 Controller 层接口暴露

@RestController@RequestMapping("/api/agriculture")publicclassAgricultureController{@AutowiredprivateBaiduAiUtilsbaiduAiUtils;@Value("${file.upload-path}")privateStringuploadPath;/** * 上传图片并识别 */@PostMapping("/identify")publicMap<String,Object>identify(@RequestParam("file")MultipartFilefile)throwsIOException{// 1. 文件存到本地StringfileName=System.currentTimeMillis()+"_"+file.getOriginalFilename();Filedest=newFile(uploadPath+fileName);if(!dest.getParentFile().exists()){dest.getParentFile().mkdirs();}file.transferTo(dest);// 2. 调用 AI 识别StringresultName=baiduAiUtils.detectPlant(dest.getAbsolutePath());// 3. 返回结果Map<String,Object>res=newHashMap<>();res.put("imgUrl",fileName);// 实际项目中需配置静态资源映射res.put("result",resultName);returnres;}/** * 生成溯源二维码 */@GetMapping("/createTrace")publicMap<String,Object>createTrace(StringbatchId)throwsException{// 模拟溯源 H5 页面地址Stringh5Url="http://192.168.1.5:8080/trace/detail/"+batchId;// 生成二维码Stringbase64=QrCodeUtils.generateQrBase64(h5Url,300,300);Map<String,Object>res=newHashMap<>();res.put("qrCode",base64);returnres;}}

四、 前端核心实现 (Vue 3 + Element Plus)

4.1 简单的识别页面

<template><divclass="container"><h2>智慧农业 - 病虫害识别</h2><el-uploadclass="upload-demo"action="/api/agriculture/identify":show-file-list="false":on-success="handleSuccess"><el-buttontype="primary">点击上传作物图片</el-button></el-upload><divv-if="result"class="result-box"><p>识别结果:<spanclass="highlight">{{ result }}</span></p></div></div></template><scriptsetup>import{ref}from'vue';constresult=ref('');consthandleSuccess=(response)=>{// 获取后端返回的识别结果result.value=response.result;console.log('图片路径:',response.imgUrl);};</script><style>.highlight{color:red;font-weight:bold;font-size:20px;}</style>

五、 答辩时的“高分”技巧

很多同学做出来了,但不会吹。在这个项目中,你要重点强调以下几点:

  1. 架构优势
  • “本系统采用了分布式云服务架构的思想,将最耗费算力的图像识别模块通过 API 卸载到了百度云端,减轻了本地服务器的压力,这符合边缘计算的设计理念。”(其实就是调了个 API,但这样说逼格拉满)
  1. 溯源安全
  • “在二维码生成中,我设计了Base64 编码存储方案,相比于存储图片文件,这种方式减少了 IO 开销,且可以直接嵌入 HTML 渲染,提升了移动端的加载速度。”
  1. 难点攻克
  • “在开发过程中,最大的难点是AI 置信度的阈值调优。经过多次测试,我发现将阈值设定在 0.5 能有效平衡识别率和误报率。”

六、 总结

看到这里,你会发现所谓的“高大上”毕设,其实就是:Spring Boot 做胶水,把 AI 接口、二维码工具、数据库粘在一起。

这个项目的核心代码不超过 500 行,但它完整演示了**“图片上传 -> 云端计算 -> 结果返回 -> 数据存储 -> 二维码生成”**的全链路。

如果你按照本文做出了 Demo,记得在评论区交作业!遇到报错也可以在评论区提问,博主看到必回!

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

HTML插槽与Shadow DOM:Web Components基础

HTML插槽与Shadow DOM&#xff1a;Web Components基础 引言 在Web开发领域&#xff0c;随着项目复杂度的不断提升&#xff0c;代码复用与组件化开发的需求愈发迫切。Web Components作为一项原生支持的技术&#xff0c;为开发者提供了创建可复用、封装性强的自定义组件的能力。其…

作者头像 李华
网站建设 2026/1/14 4:05:48

HTML导入与模块化:`link rel=“import“`的替代方案深度解析

HTML导入与模块化&#xff1a;link rel"import"的替代方案深度解析 在Web开发的早期阶段&#xff0c;HTML导入&#xff08;<link rel"import">&#xff09;作为Web Components规范的一部分&#xff0c;曾被视为模块化HTML内容的重要解决方案。该特性…

作者头像 李华
网站建设 2026/1/15 1:08:00

建筑材料管理|基于Java + vue建筑材料管理系统(源码+数据库+文档)

建筑材料管理 目录 基于springboot vue建筑材料管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue建筑材料管理系统 一、前言 博主介绍&…

作者头像 李华
网站建设 2026/1/14 23:37:16

校园实验室|基于java+ vue校园实验室管理系统(源码+数据库+文档)

校园实验室管理 目录 基于springboot vue校园实验室管理系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue校园实验室管理系统 一、前言 博主介绍…

作者头像 李华
网站建设 2026/1/15 0:00:20

智能时代的测试新边界:AI系统测试的特殊考量与实践路径

1 范式转移&#xff1a;从确定性逻辑到概率性输出的测试革命 当我们从传统软件测试跨入AI系统测试领域&#xff0c;本质上经历的是一场测试范式的根本性变革。传统软件测试基于确定性逻辑——相同的输入必定产生预期的输出&#xff0c;测试用例的设计围绕业务逻辑路径展开。而…

作者头像 李华
网站建设 2026/1/14 14:48:08

EmotiVoice语音合成后台服务稳定性:7x24小时运行压力测试

EmotiVoice语音合成服务的724小时稳定性实践 在内容创作平台、虚拟偶像直播或在线游戏对话系统中&#xff0c;用户对语音交互的真实感和情感表达提出了更高要求。传统的文本转语音&#xff08;TTS&#xff09;技术虽然能“说话”&#xff0c;但往往语调单一、缺乏情绪变化&…

作者头像 李华