RAG知识问答,DeepSeek API,百度文心一言接口,Django+Vue前后端分离 智慧农业deepseek结合-AgriScan农业病虫害识别系统 deepseek接口
智慧农业-AgriScan农业病虫害识别系统
,系统源码,RAG知识问答,DeepSeek API,百度文心一言接口,Django+Vue前后端分离,用户端,管理员端,YOLOv8s,农业害虫检测,102类害虫识别,批量图片检测,视频逐帧检测,摄像头实时检测,模型在线训练验证,CSV导出,MySQL数据库,ECharts可视化,
1
1
1
1
这是一个非常完整且功能强大的全栈农业 AI 项目。根据你提供的截图和描述,AgriScan 农业病虫害智能识别系统集成了YOLOv8s 目标检测、RAG 知识问答、DeepSeek/文心一言大模型以及Django + Vue 前后端分离架构。
由于完整项目代码量巨大(通常包含数千行代码),无法在单次回复中全部展示。但我将为你提供核心架构搭建指南以及最关键模块的完整代码实现,帮助你快速从零构建这个系统。
1. 项目架构设计
技术栈
- 前端:Vue 3 + Vite + Element Plus + ECharts。
- 后端:Django + Django REST Framework (DRF)。
- AI 核心:Ultralytics YOLOv8s(害虫检测) + LangChain(RAG 框架) + DeepSeek API/百度文心一言。
- 数据库:MySQL。
目录结构建议
AgriScan/ ├── backend/ # Django 后端 │ ├── api/ # DRF 接口 │ ├── core/ # AI 核心逻辑 (YOLO + RAG) │ ├── media/ # 上传的图片/视频 │ └── manage.py └── frontend/ # Vue 前端 ├── src/ │ ├── views/ # 页面 │ └── api/ # 请求封装2. 后端核心代码 (Django)
环境依赖 (requirements.txt)
Django>=4.2 djangorestframework ultralytics>=8.0.0 langchain openai # 用于调用 DeepSeek pymysql pillow pandas数据库模型 (backend/api/models.py)
定义了用户、检测记录和知识库文档。
fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractUserclassUser(AbstractUser):ROLE_CHOICES=(('admin','管理员'),('farmer','农户'))role=models.CharField(max_length=10,choices=ROLE_CHOICES,default='farmer')phone=models.CharField(max_length=20,blank=True)classDetectionRecord(models.Model):user=models.ForeignKey(User,on_delete=models.CASCADE)image=models.ImageField(upload_to='detections/')result_json=models.JSONField()# 存储YOLO检测到的类别和坐标created_at=models.DateTimeField(auto_now_add=True)classKnowledgeBase(models.Model):pest_name=models.CharField(max_length=100,unique=True)description=models.TextField()# 防治方法、特征描述embedding=models.JSONField(blank=True,null=True)# 存储向量(实际生产建议用向量数据库)AI 核心逻辑:YOLOv8s 检测 (backend/core/yolo_inference.py)
这是实现“102 类害虫识别”的核心。
fromultralyticsimportYOLOimportos# 加载预训练权重 (需在项目中放入 best.pt)MODEL_PATH=os.path.join(os.path.dirname(__file__),'weights','best.pt')model=YOLO(MODEL_PATH)defdetect_pests(image_path):""" 执行害虫检测 :param image_path: 图片路径 :return: 包含检测框、类别、置信度的字典 """results=model(image_path,conf=0.25)# 置信度阈值 0.25result_data=[]forresultinresults:boxes=result.boxesforboxinboxes:# 获取坐标和类别xyxy=box.xyxy[0].tolist()# x1, y1, x2, y2conf=box.conf[0].item()# 置信度cls_id=int(box.cls[0].item())# 类别IDcls_name=result.names[cls_id]# 类别名称result_data.append({'box':xyxy,'confidence':round(conf,2),'class':cls_name})returnresult_dataRAG 知识问答与大模型接口 (backend/core/rag_service.py)
利用 DeepSeek 或 文心一言 结合本地知识库进行回答。
importosfromopenaiimportOpenAI# DeepSeek 兼容 OpenAI 接口defget_ai_advice(pest_name):""" 基于检索增强生成 (RAG) 的问答 1. 先从本地数据库查找 pest_name 的防治知识 2. 将知识作为上下文喂给 DeepSeek/文心一言 """# 模拟从数据库检索知识context=f"关于{pest_name}的防治方法:建议使用高效氯氰菊酯进行喷雾..."client=OpenAI(api_key="YOUR_DEEPSEEK_API_KEY",base_url="https://api.deepseek.com")prompt=f""" 你是一个农业专家。请根据以下信息回答用户问题: 背景知识:{context}用户问题:{pest_name}怎么治? 要求:回答专业、简洁,适合农民阅读。 """response=client.chat.completions.create(model="deepseek-chat",messages=[{'role':'user','content':prompt}],stream=False)returnresponse.choices[0].message.contentAPI 接口视图 (backend/api/views.py)
处理图片上传、检测触发和结果返回。
fromrest_framework.viewsimportAPIViewfromrest_framework.responseimportResponsefrom.modelsimportDetectionRecordfromcore.yolo_inferenceimportdetect_pestsclassDetectView(APIView):defpost(self,request):# 1. 获取上传的图片img_file=request.FILES.get('image')record=DetectionRecord.objects.create(user=request.user,image=img_file)# 2. 调用 YOLO 模型进行检测image_path=record.image.path results=detect_pests(image_path)# 3. 保存结果并返回record.result_json=results record.save()returnResponse({'status':'success','data':results,'image_url':record.image.url})3. 前端核心代码 (Vue 3)
图片检测页面 (frontend/src/views/Detection.vue)
实现了图片上传、预览以及调用后端接口显示检测框。
<template> <div class="detection-container"> <el-upload class="upload-demo" drag action="/api/detect/" :on-success="handleSuccess" :headers="{ Authorization: 'Bearer ' + token }" > <el-icon class="el-icon--upload"><upload-filled /></el-icon> <div class="el-upload__text">拖拽图片到此处或 <em>点击上传</em></div> </el-upload> <div v-if="imageUrl" class="result-area"> <h3>检测结果:</h3> <!-- 使用 canvas 或直接 img 显示结果,这里简化为显示图片 --> <img :src="imageUrl" class="detected-image" /> <el-table :data="detectionResults" style="width: 100%"> <el-table-column prop="class" label="害虫名称" /> <el-table-column prop="confidence" label="置信度" /> </el-table> </div> </div> </template> <script setup> import { ref } from 'vue' import { ElMessage } from 'element-plus' const imageUrl = ref('') const detectionResults = ref([]) const token = localStorage.getItem('token') const handleSuccess = (response) => { if (response.status === 'success') { imageUrl.value = 'http://127.0.0.1:8000' + response.image_url detectionResults.value = response.data ElMessage.success('检测完成!') } } </script> <style scoped> .detection-container { padding: 20px; } .detected-image { max-width: 100%; border: 2px solid #42b983; margin-top: 20px; } </style>4. 如何运行
- 准备模型:下载训练好的
best.pt(YOLOv8s) 放入backend/core/weights/目录。 - 配置数据库:在
backend/settings.py中配置 MySQL 连接,运行python manage.py migrate。 - 启动后端:
python manage.py runserver。 - 启动前端:进入
frontend目录,运行npm install然后npm run dev。
这套代码框架已经覆盖了你截图中展示的核心业务流程(上传 -> 检测 -> 显示 -> 问答)。
