YOLOv8cls(分类/检测)算法结合Django + Vue3 前后端分离架构 TasselScan_Yolo8cls 玉米雄蕊检测系统开发 基于Django+Vue与YOLOv8的玉米雄蕊智能

张开发
2026/5/30 18:55:26 15 分钟阅读
YOLOv8cls(分类/检测)算法结合Django + Vue3 前后端分离架构 TasselScan_Yolo8cls 玉米雄蕊检测系统开发 基于Django+Vue与YOLOv8的玉米雄蕊智能
智慧农业-TasselScan_Yolo8cls 玉米雄蕊检测系统开发 图片视频摄像头多源检测TasselScan_Yolo8cls玉米雄蕊检测YOLOv8cls目标检测Django开发Vue3前端Element Plus单图检测批量图片检测视频抽帧检测摄像头实时检测模型训练模型验证权重加载权重切换MySQL数据库ECharts可视化大屏CSV导出知识问答检测建议用户管理管理员端GPU推理CPU推理农业作物检测智能农业系统1这是一套专注于精准农业与智慧育种的全栈 AI 系统。“TasselScan”标识、数据大屏、检测记录以及黄色的 UI 主题该系统专为玉米雄蕊Tassel检测设计采用了YOLOv8cls分类/检测算法结合Django Vue3前后端分离架构。以下是为您整理的项目核心代码构建指南涵盖了从数据库设计到 YOLO 推理的关键实现。1. 项目架构与技术栈前端Vue 3 Vite Element PlusUI 组件 ECharts大屏可视化。后端Django Django REST Framework (DRF)。AI 算法Ultralytics YOLOv8用于识别玉米雄蕊。数据库MySQL。2. 数据库设计 (Django Models)根据截图中的“检测记录”、“用户管理”和“数据大屏”需求我们需要设计以下核心模型。文件路径backend/tassel_scan/models.pyfromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractUser# 1. 用户表 (扩展 Django 自带用户)classUser(AbstractUser):phonemodels.CharField(max_length11,blankTrue,nullTrue,verbose_name手机号)avatarmodels.ImageField(upload_toavatars/,defaultavatars/default.png,verbose_name头像)rolemodels.CharField(max_length10,choices[(admin,管理员),(user,普通用户)],defaultuser)# 2. 检测记录表 (对应截图中的检测记录列表)classDetectionRecord(models.Model):usermodels.ForeignKey(User,on_deletemodels.CASCADE,verbose_name检测用户)image_filemodels.ImageField(upload_todetections/%Y%m%d/,verbose_name检测图片)result_imagemodels.ImageField(upload_toresults/%Y%m%d/,blankTrue,nullTrue,verbose_name结果图片)# 统计信息tassel_countmodels.IntegerField(default0,verbose_name雄蕊数量)confidencemodels.FloatField(default0.0,verbose_name平均置信度)# 模式image(单图), batch(批量), video(视频)detect_modemodels.CharField(max_length10,choices[(image,单图),(batch,批量),(video,视频)],defaultimage)created_atmodels.DateTimeField(auto_now_addTrue,verbose_name检测时间)classMeta:ordering[-created_at]verbose_name检测记录verbose_name_plural检测记录# 3. 农业知识问答/建议表classAgriKnowledge(models.Model):questionmodels.CharField(max_length200,verbose_name问题关键词)answermodels.TextField(verbose_name防治/种植建议)created_atmodels.DateTimeField(auto_now_addTrue)def__str__(self):returnself.question3. AI 核心推理逻辑 (YOLOv8)这是系统的核心负责加载模型并处理图片、视频流。文件路径backend/tassel_scan/utils/yolo_detector.pyfromultralyticsimportYOLOimportcv2importosfromdjango.confimportsettings# 加载预训练的玉米雄蕊模型 (假设权重文件在 weights 目录下)MODEL_PATHos.path.join(settings.BASE_DIR,weights,best_tassel.pt)modelYOLO(MODEL_PATH)defdetect_tassel(image_path,save_path,conf_threshold0.5): 单张图片检测逻辑 # 运行推理resultsmodel(image_path,confconf_threshold)# 解析结果resultresults[0]boxesresult.boxes num_tasselslen(boxes)# 绘制结果并保存im_arrayresult.plot()# 绘制 BBox 和标签imImage.fromarray(im_array[...,::-1])# RGBim.save(save_path)return{count:num_tassels,saved_image:save_path,boxes:boxes.xyxy.cpu().numpy().tolist(),# 返回坐标给前端展示confidences:boxes.conf.cpu().numpy().tolist()}defdetect_video_stream(source0): 摄像头实时检测 (供前端 Video 标签推流或 WebSocket 使用) capcv2.VideoCapture(source)whilecap.isOpened():success,framecap.read()ifsuccess:# YOLO 推理resultsmodel(frame)# 绘制annotated_frameresults[0].plot()# 这里通常需要将帧编码为 JPEG 并通过生成器返回yieldannotated_frameelse:breakcap.release()4. 后端 API 接口 (Django REST Framework)文件路径backend/tassel_scan/views.pyfromrest_framework.decoratorsimportapi_view,permission_classesfromrest_framework.responseimportResponsefromrest_framework.permissionsimportIsAuthenticatedfrom.modelsimportDetectionRecordfrom.serializersimportDetectionRecordSerializerfrom.utils.yolo_detectorimportdetect_tassel# 1. 图片检测接口api_view([POST])permission_classes([IsAuthenticated])defdetect_image_view(request):imagerequest.FILES.get(image)# 保存原始图片recordDetectionRecord.objects.create(userrequest.user,image_fileimage,detect_modeimage)# 执行 AI 检测save_pathos.path.join(settings.MEDIA_ROOT,results,fres_{record.id}.jpg)result_datadetect_tassel(record.image_file.path,save_path)# 更新记录record.result_imagefresults/res_{record.id}.jpgrecord.tassel_countresult_data[count]record.save()returnResponse({msg:检测成功,count:result_data[count],image_url:request.build_absolute_uri(record.result_image.url)})# 2. 数据大屏接口 (ECharts 数据源)api_view([GET])permission_classes([IsAuthenticated])defdashboard_stats_view(request):# 统计总检测数totalDetectionRecord.objects.count()# 统计雄蕊总数total_tasselsDetectionRecord.objects.aggregate(models.Sum(tassel_count))[tassel_count__sum]or0returnResponse({total_records:total,total_tassels:total_tassels,# 这里可以添加更多按日期分组的统计数据用于折线图})5. 前端实现思路 (Vue3 Element Plus)根据截图的 UI 风格前端主要包含以下部分数据大屏 (Dashboard)组件使用vue-echarts。布局使用 CSS Grid 或 Flex 布局背景色设为浅米黄色对应截图风格。逻辑在onMounted钩子中调用/api/dashboard/接口获取数据并渲染饼图雄蕊分布、折线图趋势。检测中心 (Detection Center)上传组件使用el-upload实现拖拽上传或点击上传。交互上传成功后调用检测接口并在右侧展示返回的带有检测框的图片。参数设置使用el-slider调整置信度阈值传递给后端。代码片段 (Vue3 上传图片)templatedivclassdetect-containerel-uploadclassupload-demodragaction/api/detect/image/:headers{ Authorization: Bearer token }:on-successhandleSuccessel-iconclassel-icon--uploadupload-filled//el-icondivclassel-upload__text拖拽图片到此处或em点击上传/em/div/el-uploaddivv-ifresultImageclassresult-viewh3检测结果/h3img:srcresultImagealtResult//div/div/templatescriptsetupimport{ref}fromvueconstresultImageref()consthandleSuccess(response){resultImage.valueresponse.image_url ElMessage.success(检测完成发现${response.count}个雄蕊)}/script6. 总结这套TasselScan代码的核心在于Django负责稳健的用户管理和数据持久化。YOLOv8负责高精度的玉米雄蕊识别。Vue3负责提供友好的交互界面和直观的数据大屏展示。您可以基于上述代码结构填充具体的业务逻辑快速完成该系统的开发。

更多文章