基于微信小程序的图片识别的菜品销售系统

前言介绍

基于微信小程序的图片识别的菜品销售系统是一个基于微信小程序的菜品销售平台,利用深度学习计算机视觉算法实现图片识别功能,用户可通过图片快速识别菜品名称。集成协同过滤推荐算法,根据用户收藏行为采用余弦相似度计算根据基于用户的协同过滤算法生成个性化推荐,提升用户体验。系统采用Spring Boot和Vue.js等技术开发,支持ECharts可视化图表展示数据,实现高效交互与数据分析。

01开发环境

1.1 Java 技术

1.2 Spring Boot 框架

1.3 MySQL数据库

1.4 B/S 结构

1.5、微信开发者工具

1.6、HBuilder X

1.7、Vue.js 技术

1.8、Uniapp

1.9 深度学习计算机视觉算法图像识别

1.10 协同过滤推荐算法

02系统功能模块

亮点:(深度学习计算机视觉算法图像识别,协同过滤推荐算法,ECharts可视化图表展示)

  具体运用基于用户的协同过滤方法,借助解析用户收藏行为数据,辨别出和目标用户有着相似兴趣偏好的用户群体,再依照这些相似用户的历史记录为目标用户生成个性化的音乐推荐列表。

  协同过滤算法的核心机制是依靠量化用户之间的相似性程度达成个性化推荐,在这个过程中,余弦相似度作为经典的相似性度量办法,在该领域得到了广泛运用。

余弦相似度计算公式:
在这里插入图片描述

03图片展示

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

04关键代码展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

/**
     *
     * 菜品识别(交流学习+vx:S20231025S )
     */
    @RequestMapping("/baidu/dish")
    @IgnoreAuth
    public R baiduPlant(@RequestParam("fileName") String fileName,HttpServletRequest request) {
        JSONObject jb = null;
        try {
            File path = new File(ResourceUtils.getURL("classpath:static").getPath());
            if(!path.exists()) {
                path = new File("");
            }
            File upload = new File(path.getAbsolutePath(),"/upload/");
            if(!upload.exists()) {
                upload.mkdirs();
            }
            File file = new File(upload.getAbsolutePath()+"/"+fileName);
            if(file.exists()){
                jb = BaiduUtil.dishDetect(file.getAbsolutePath());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return R.ok().put("data", com.alibaba.fastjson.JSONObject.parseObject(jb.getJSONArray("result").get(0).toString()));
    }
   /**
     * 协同算法(基于用户的协同算法)
     */
 @RequestMapping("/autoSort2")
    public R autoSort2(@RequestParam Map<String, Object> params,CaipinxinxiEntity caipinxinxi, HttpServletRequest request){
        String userId = request.getSession().getAttribute("userId").toString();
        Integer limit = params.get("limit")==null?10:Integer.parseInt(params.get("limit").toString());
        // 查询订单数据
        List<OrdersEntity> orders = ordersService.selectList(new EntityWrapper<OrdersEntity>());
        Map<String, Map<String, Double>> ratings = new HashMap<>();
        if(orders!=null && orders.size()>0) {
            for(OrdersEntity o : orders) {
                Map<String, Double> userRatings = null;
                if(ratings.containsKey(o.getUserid().toString())) {
                    userRatings = ratings.get(o.getUserid().toString());
                } else {
                    userRatings.put(o.getGoodid().toString(), 1.0);
                }
            }
        }
        // 创建协同过滤对象
        UserBasedCollaborativeFiltering filter = new UserBasedCollaborativeFiltering(ratings);
        // 为指定用户推荐物品
        String targetUser = userId;
        int numRecommendations = limit;
        List<String> recommendations = filter.recommendItems(targetUser, numRecommendations);
        // 输出推荐结果
        System.out.println("Recommendations for " + targetUser + ":");
        for (String item : recommendations) {
            System.out.println(item);
        }
        EntityWrapper<CaipinxinxiEntity> ew = new EntityWrapper<CaipinxinxiEntity>();
        ew.in("id", recommendations);
        ew.eq("onshelves","1");
        if(recommendations!=null && recommendations.size()>0 && recommendations.size()>0) {
            ew.last("order by FIELD(id, "+String.join(",", recommendations)+")");
        }
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐