技术含量高但容易实现:基于图片识别的菜品销售系统uni-app开发秘籍

43 阅读6分钟

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

基于图片识别的菜品销售系统介绍

基于图片识别的菜品销售系统是一套融合计算机视觉技术与电商销售功能的综合性毕业设计项目,该系统采用Java SpringBoot框架作为后端核心架构,集成Spring、SpringMVC和MyBatis三大组件构建稳定的服务层,同时提供Python Django版本以满足不同技术栈需求,前端采用uni-app跨平台开发框架实现微信小程序和安卓应用的统一部署,数据持久化通过MySQL数据库完成,整体采用C/S和B/S混合架构模式确保系统的灵活性和可扩展性。系统核心功能围绕图片识别技术展开,用户可通过拍照或上传菜品图片进行智能识别和下单,管理端包含完整的用户管理、商家信息维护、菜品分类与信息管理等模块,支持公告类型和信息发布、充值记录追踪、轮播图展示等运营功能,订单管理系统涵盖从已支付、已发货、已退款、已取消到已完成的全生命周期状态跟踪,个人中心提供用户信息管理和密码修改等基础服务,整个系统通过IDEA或PyCharm开发环境配合微信小程序开发工具完成开发部署,既体现了人工智能图像识别的前沿技术应用,又具备完整的商业化电商系统功能特性,技术实现难度适中但创新性突出,非常适合作为计算机专业本科毕业设计项目。

基于图片识别的菜品销售系统演示视频

演示视频

基于图片识别的菜品销售系统演示图片

菜品分类.png

菜品信息.png

登陆界面.png

订单管理.png

商家信息.png

用户管理.png

基于图片识别的菜品销售系统代码展示

from pyspark.sql import SparkSession
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import RandomForestClassifier
import cv2
import numpy as np
from tensorflow.keras.models import load_model
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
import base64
from io import BytesIO
from PIL import Image
import mysql.connector
from datetime import datetime

spark = SparkSession.builder.appName("DishRecognitionSystem").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()

@csrf_exempt
def dish_image_recognition(request):
   if request.method == 'POST':
       try:
           data = json.loads(request.body)
           image_data = data.get('image')
           user_id = data.get('user_id')
           image_bytes = base64.b64decode(image_data.split(',')[1])
           image = Image.open(BytesIO(image_bytes))
           image_array = np.array(image.resize((224, 224))) / 255.0
           image_array = np.expand_dims(image_array, axis=0)
           model = load_model('dish_recognition_model.h5')
           predictions = model.predict(image_array)
           predicted_class_index = np.argmax(predictions[0])
           confidence_score = float(predictions[0][predicted_class_index])
           dish_categories = ['川菜', '粤菜', '鲁菜', '苏菜', '浙菜', '闽菜', '湘菜', '徽菜']
           predicted_category = dish_categories[predicted_class_index]
           conn = mysql.connector.connect(host='localhost', user='root', password='password', database='dish_system')
           cursor = conn.cursor()
           cursor.execute("SELECT * FROM dish_info WHERE category = %s AND status = 1 ORDER BY popularity DESC LIMIT 10", (predicted_category,))
           matched_dishes = cursor.fetchall()
           recognition_data = spark.createDataFrame([(user_id, predicted_category, confidence_score, datetime.now().strftime('%Y-%m-%d %H:%M:%S'))], ['user_id', 'category', 'confidence', 'recognition_time'])
           recognition_data.write.mode('append').option('url', 'jdbc:mysql://localhost:3306/dish_system').option('dbtable', 'recognition_log').option('user', 'root').option('password', 'password').save()
           cursor.execute("INSERT INTO recognition_history (user_id, predicted_category, confidence_score, recognition_time) VALUES (%s, %s, %s, %s)", (user_id, predicted_category, confidence_score, datetime.now()))
           conn.commit()
           result_dishes = []
           for dish in matched_dishes:
               dish_info = {'dish_id': dish[0], 'dish_name': dish[1], 'price': float(dish[2]), 'description': dish[3], 'image_url': dish[4], 'category': dish[5]}
               result_dishes.append(dish_info)
           cursor.close()
           conn.close()
           return JsonResponse({'success': True, 'predicted_category': predicted_category, 'confidence': confidence_score, 'matched_dishes': result_dishes, 'message': '图片识别成功'})
       except Exception as e:
           return JsonResponse({'success': False, 'message': f'图片识别失败: {str(e)}'})
   return JsonResponse({'success': False, 'message': '请求方法错误'})

@csrf_exempt
def create_order(request):
   if request.method == 'POST':
       try:
           data = json.loads(request.body)
           user_id = data.get('user_id')
           dish_items = data.get('dish_items')
           delivery_address = data.get('delivery_address')
           payment_method = data.get('payment_method')
           conn = mysql.connector.connect(host='localhost', user='root', password='password', database='dish_system')
           cursor = conn.cursor()
           order_id = f"ORD{datetime.now().strftime('%Y%m%d%H%M%S')}{user_id}"
           total_amount = 0
           order_details = []
           for item in dish_items:
               cursor.execute("SELECT price, dish_name FROM dish_info WHERE dish_id = %s", (item['dish_id'],))
               dish_data = cursor.fetchone()
               if dish_data:
                   item_total = float(dish_data[0]) * int(item['quantity'])
                   total_amount += item_total
                   order_details.append({'dish_id': item['dish_id'], 'dish_name': dish_data[1], 'quantity': item['quantity'], 'unit_price': dish_data[0], 'subtotal': item_total})
           cursor.execute("INSERT INTO orders (order_id, user_id, total_amount, delivery_address, payment_method, order_status, create_time) VALUES (%s, %s, %s, %s, %s, %s, %s)", (order_id, user_id, total_amount, delivery_address, payment_method, 'pending_payment', datetime.now()))
           for detail in order_details:
               cursor.execute("INSERT INTO order_details (order_id, dish_id, quantity, unit_price, subtotal) VALUES (%s, %s, %s, %s, %s)", (order_id, detail['dish_id'], detail['quantity'], detail['unit_price'], detail['subtotal']))
           order_spark_data = spark.createDataFrame([(order_id, user_id, total_amount, len(dish_items), datetime.now().strftime('%Y-%m-%d %H:%M:%S'))], ['order_id', 'user_id', 'total_amount', 'item_count', 'order_time'])
           order_spark_data.write.mode('append').option('url', 'jdbc:mysql://localhost:3306/dish_system').option('dbtable', 'order_analytics').option('user', 'root').option('password', 'password').save()
           cursor.execute("UPDATE user_info SET total_orders = total_orders + 1 WHERE user_id = %s", (user_id,))
           for item in dish_items:
               cursor.execute("UPDATE dish_info SET order_count = order_count + %s WHERE dish_id = %s", (item['quantity'], item['dish_id']))
           conn.commit()
           cursor.close()
           conn.close()
           return JsonResponse({'success': True, 'order_id': order_id, 'total_amount': total_amount, 'order_details': order_details, 'message': '订单创建成功'})
       except Exception as e:
           return JsonResponse({'success': False, 'message': f'订单创建失败: {str(e)}'})
   return JsonResponse({'success': False, 'message': '请求方法错误'})

@csrf_exempt
def user_recharge(request):
   if request.method == 'POST':
       try:
           data = json.loads(request.body)
           user_id = data.get('user_id')
           recharge_amount = float(data.get('recharge_amount'))
           payment_method = data.get('payment_method')
           conn = mysql.connector.connect(host='localhost', user='root', password='password', database='dish_system')
           cursor = conn.cursor()
           cursor.execute("SELECT balance FROM user_info WHERE user_id = %s", (user_id,))
           current_balance = cursor.fetchone()[0]
           new_balance = float(current_balance) + recharge_amount
           recharge_id = f"RCG{datetime.now().strftime('%Y%m%d%H%M%S')}{user_id}"
           cursor.execute("INSERT INTO recharge_records (recharge_id, user_id, recharge_amount, payment_method, recharge_status, create_time) VALUES (%s, %s, %s, %s, %s, %s)", (recharge_id, user_id, recharge_amount, payment_method, 'completed', datetime.now()))
           cursor.execute("UPDATE user_info SET balance = %s, total_recharge = total_recharge + %s WHERE user_id = %s", (new_balance, recharge_amount, user_id))
           recharge_spark_data = spark.createDataFrame([(user_id, recharge_amount, payment_method, datetime.now().strftime('%Y-%m-%d %H:%M:%S'))], ['user_id', 'amount', 'payment_method', 'recharge_time'])
           recharge_spark_data.write.mode('append').option('url', 'jdbc:mysql://localhost:3306/dish_system').option('dbtable', 'recharge_analytics').option('user', 'root').option('password', 'password').save()
           user_recharge_history = spark.sql(f"SELECT * FROM recharge_analytics WHERE user_id = '{user_id}' ORDER BY recharge_time DESC")
           total_recharge_this_month = user_recharge_history.filter(user_recharge_history.recharge_time.contains(datetime.now().strftime('%Y-%m'))).agg({'amount': 'sum'}).collect()[0][0]
           if total_recharge_this_month and total_recharge_this_month >= 500:
               bonus_amount = recharge_amount * 0.05
               cursor.execute("UPDATE user_info SET balance = balance + %s WHERE user_id = %s", (bonus_amount, user_id))
               cursor.execute("INSERT INTO bonus_records (user_id, bonus_amount, bonus_reason, create_time) VALUES (%s, %s, %s, %s)", (user_id, bonus_amount, '月度充值奖励', datetime.now()))
               new_balance += bonus_amount
           conn.commit()
           cursor.close()
           conn.close()
           return JsonResponse({'success': True, 'recharge_id': recharge_id, 'old_balance': float(current_balance), 'new_balance': new_balance, 'message': '充值成功'})
       except Exception as e:
           return JsonResponse({'success': False, 'message': f'充值失败: {str(e)}'})
   return JsonResponse({'success': False, 'message': '请求方法错误'})

基于图片识别的菜品销售系统文档展示

文档.png

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目