一、个人简介
💖💖作者:计算机编程果茶熊 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 计算机毕业设计选题 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
开发语言:Java+Python 数据库:MySQL 系统架构:B/S 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django 前端:Vue+HTML+CSS+JavaScript+jQuery
智慧农业管理系统是一个基于B/S架构的综合性农业信息化平台,采用Python语言结合Django框架开发后端业务逻辑,前端使用Vue框架构建交互界面,数据存储采用MySQL关系型数据库。系统涵盖农业政策发布、农机设备管理、农家商品交易、害虫智能识别、农业知识共享等多个功能模块。用户可以通过平台浏览各类农机设备信息并按分类检索,查看农家商品的详细介绍和价格信息,利用图像识别技术快速识别农作物害虫种类。系统还设置了交流论坛供用户分享种植经验和技术心得,支持留言反馈机制收集用户意见,提供举报功能维护社区秩序。平台整合了农业政策资讯和专业知识库,帮助农户及时了解政策动态和科学种植方法。通过充值记录管理实现平台增值服务,多维度分类体系使信息检索更加便捷高效,为现代农业生产提供了数字化管理工具。
三、视频解说
四、部分功能展示
五、部分代码展示
# 核心功能1: 害虫智能识别
from django.views import View
from django.http import JsonResponse
from PIL import Image
import numpy as np
import base64
from io import BytesIO
import json
class PestRecognitionView(View):
def post(self, request):
"""害虫识别核心处理函数"""
try:
# 解析上传的图片数据
image_data = request.POST.get('image')
if not image_data:
return JsonResponse({'code': 400, 'msg': '未接收到图片数据'})
# Base64解码并转换为图像对象
image_bytes = base64.b64decode(image_data.split(',')[1])
image = Image.open(BytesIO(image_bytes))
# 图像预处理:调整尺寸和归一化
image = image.resize((224, 224))
image_array = np.array(image) / 255.0
# 特征提取:计算颜色直方图特征
color_features = []
for channel in range(3):
hist, _ = np.histogram(image_array[:, :, channel], bins=32, range=(0, 1))
color_features.extend(hist / hist.sum())
# 纹理特征提取:计算灰度共生矩阵
gray_image = image.convert('L')
gray_array = np.array(gray_image)
texture_features = self.calculate_texture_features(gray_array)
# 特征向量拼接
feature_vector = np.concatenate([color_features, texture_features])
# 加载害虫特征库进行匹配
pest_database = self.load_pest_database()
max_similarity = 0
recognized_pest = None
for pest_name, pest_features in pest_database.items():
# 计算余弦相似度
similarity = np.dot(feature_vector, pest_features) / (
np.linalg.norm(feature_vector) * np.linalg.norm(pest_features)
)
if similarity > max_similarity:
max_similarity = similarity
recognized_pest = pest_name
# 查询害虫详细信息和防治方案
if max_similarity > 0.75:
pest_info = PestInfo.objects.filter(name=recognized_pest).first()
prevention_methods = PreventionMethod.objects.filter(pest=pest_info)
# 记录识别历史
RecognitionHistory.objects.create(
user=request.user,
pest_name=recognized_pest,
confidence=max_similarity,
image_path=self.save_image(image),
recognition_time=timezone.now()
)
result_data = {
'pest_name': pest_info.name,
'scientific_name': pest_info.scientific_name,
'description': pest_info.description,
'harm_level': pest_info.harm_level,
'affected_crops': pest_info.affected_crops,
'prevention_methods': [
{
'method': m.method_name,
'description': m.description,
'effectiveness': m.effectiveness
} for m in prevention_methods
],
'confidence': round(max_similarity * 100, 2)
}
return JsonResponse({'code': 200, 'data': result_data})
else:
return JsonResponse({'code': 404, 'msg': '未能识别该害虫,请上传更清晰的图片或咨询专家'})
except Exception as e:
return JsonResponse({'code': 500, 'msg': f'识别过程出错: {str(e)}'})
# 核心功能2: 农机设备管理与推荐
class MachineryManagementView(View):
def get(self, request):
"""农机设备查询与智能推荐"""
category_id = request.GET.get('category_id')
price_min = request.GET.get('price_min', 0)
price_max = request.GET.get('price_max', 999999)
keyword = request.GET.get('keyword', '')
# 构建查询条件
query_conditions = {
'is_available': True,
'price__gte': price_min,
'price__lte': price_max
}
if category_id:
query_conditions['category_id'] = category_id
# 查询设备列表
machineries = Machinery.objects.filter(**query_conditions)
if keyword:
machineries = machineries.filter(
Q(name__icontains=keyword) | Q(description__icontains=keyword)
)
# 获取用户浏览历史进行个性化推荐
user_history = BrowseHistory.objects.filter(
user=request.user
).order_by('-browse_time')[:20]
# 统计用户偏好的设备类型
category_preferences = {}
for history in user_history:
cat_id = history.machinery.category_id
category_preferences[cat_id] = category_preferences.get(cat_id, 0) + 1
# 计算推荐权重
machinery_scores = []
for machinery in machineries:
score = 0
# 基础评分
score += machinery.rating * 10
score += machinery.sales_count * 0.1
# 类别偏好加分
if machinery.category_id in category_preferences:
score += category_preferences[machinery.category_id] * 5
# 价格合理性评分
category_avg_price = Machinery.objects.filter(
category_id=machinery.category_id
).aggregate(Avg('price'))['price__avg']
if category_avg_price:
price_ratio = machinery.price / category_avg_price
if 0.8 <= price_ratio <= 1.2:
score += 15
# 新品加分
days_since_release = (timezone.now() - machinery.release_date).days
if days_since_release < 30:
score += 10
machinery_scores.append({
'machinery': machinery,
'score': score
})
# 按评分排序
sorted_machineries = sorted(machinery_scores, key=lambda x: x['score'], reverse=True)
# 组装返回数据
result_list = []
for item in sorted_machineries:
machinery = item['machinery']
# 查询该设备的评价统计
reviews = Review.objects.filter(machinery=machinery)
positive_rate = reviews.filter(rating__gte=4).count() / max(reviews.count(), 1) * 100
result_list.append({
'id': machinery.id,
'name': machinery.name,
'category': machinery.category.name,
'price': machinery.price,
'manufacturer': machinery.manufacturer,
'specifications': machinery.specifications,
'image_url': machinery.main_image.url if machinery.main_image else '',
'rating': machinery.rating,
'sales_count': machinery.sales_count,
'positive_rate': round(positive_rate, 1),
'is_new': (timezone.now() - machinery.release_date).days < 30,
'recommend_score': round(item['score'], 2)
})
return JsonResponse({'code': 200, 'data': result_list, 'total': len(result_list)})
六、部分文档展示
七、END
💕💕文末获取源码联系计算机编程果茶熊