数据采集与融合综合实践
综合设计——多源异构数据采集与融合应用综合实践
这个项目属于哪个课程 | 2024数据采集与融合技术实践 |
---|---|
组名 | 数据"融合炖" 异构 "大杂绘"队 |
项目简介 | 项目名称:味谱魔法 项目logo: 项目介绍: 智能购物菜谱助手是一款结合AI技术的智能化应用,旨在为用户提供从食材购买到菜肴烹饪的一站式服务。通过该平台,用户不仅可以完成食材的在线选购,还能根据选购的食材生成个性化菜谱。 |
团队成员学号 | 102202156 王贺雯 102202156 高涛 102202157 王党兵 102202119 吴佳辉 032004126 曾祥宝 |
项目目标 | 本系统旨在实现用户将食品加入购物车,生成对应的食谱核心功能 |
其他参考文献 | https://www.spkx.net.cn/CN/abstract/abstract58653.shtml |
gitee链接 | https://gitee.com/jyppx000/data-collection-and-fusion |
系统总体技术概览
1. 系统架构概览
我们的系统架构精巧设计,分为多个层次,包括后端管理系统、安卓应用、模型训练与部署、数据爬取、模型算法接口调用以及系统部署等。
- 后端管理系统:为管理员提供了一个平台,用于高效管理安卓端的商家和客户信息。
- 安卓应用:
- 用户可以便捷地在安卓手机端浏览各类生鲜产品。
- 商家可以在安卓手机端轻松发布和管理自己的商品信息。
- 模型训练及搭建:我们采用了业界领先的开源模型——ChatGLM-6B,以提升系统的智能化水平。
- 爬取数据:我们的核心数据爬取技术涉及到JavaScript逆向工程,以获取丰富的数据资源。
2. 各模块技术实现细节
2.1 一键生成菜谱功能
目标:利用用户购物车中的食材信息,通过我们自部署的ChatGLM-6B模型,为用户智能生成个性化菜谱,并直观展示。
技术方案:
- 前端技术(安卓):
- 编程语言:采用Java语言进行安卓应用的开发工作。
- UI设计:通过XML布局精心打造用户界面,提供流畅的用户体验。
- 弹框显示:利用AlertDialog弹框动态展示菜谱生成过程,增强用户的互动体验。
- 接口请求:前端通过RESTful API与后端通信,传递购物车中的食材数据,以获取生成的菜谱内容。
- 后端技术:
- 编程语言:后端采用Java和Spring Boot框架,构建稳定且高效的RESTful API。
- 模型集成:
- API接口:后端通过HTTP请求将食材数据发送至ChatGLM-6B模型,模型分析后返回生成的菜谱内容。
- 数据存储:采用MySQL数据库存储用户数据以及菜品信息,如名称和价格等。
流程:
- 用户在安卓应用中挑选食材并加入购物车。
- 前端通过RESTful API向后端发送食材数据,请求生成菜谱。
- 后端接收食材数据,通过HTTP请求调用ChatGLM-6B模型接口。
- ChatGLM-6B模型根据食材数据智能生成菜谱内容。
- 后端将模型返回的菜谱数据以JSON格式传递给前端。
- 前端接收菜谱数据,并以弹窗形式展示详细的菜谱信息。
2.2 ChatGLM-6B模型集成
目标:通过集成ChatGLM-6B模型,实现个性化菜谱的智能生成。
技术方案:
- 后端与模型通信:
- ChatGLM-6B模型提供API接口,供后端进行调用。
- 通过JSON格式在前后端与模型间传递数据,确保数据结构的一致性。
- 模型训练与调优:
- 利用爬取的食谱数据对ChatGLM-6B模型进行微调训练,以优化模型性能。
- 集成方式:
- 后端调用API:后端通过Java代码发送HTTP请求,将用户购物车数据传递给模型。
- 模型生成菜谱:模型处理请求后生成菜谱,并以JSON数据形式返回给后端,由后端展示给前端。
流程:
- 后端将用户购物车数据格式化为模型所需输入。
- 后端通过HTTP请求调用ChatGLM-6B模型接口,传递食材数据。
- 模型分析数据并返回包含菜谱信息的JSON格式结果。
- 前端接收菜谱数据,并在界面中展示。
2.3 异步处理与生成过程
目标:确保菜谱生成过程不会阻塞主线程,从而提升用户的整体体验。
技术方案:
- 前端异步请求:
- 利用Coroutines处理后台请求,保证UI线程的流畅性。
- 结合OkHttp和协程技术发起网络请求,避免UI界面的卡顿现象。
- 后端异步处理:
- 后端利用Spring Boot的@Async注解实现异步处理,避免请求处理过程中的阻塞。
流程:
- 前端触发异步请求,后台开始执行菜谱生成任务。
- 后端异步调用ChatGLM-6B模型,进行菜谱的智能生成。
- 生成完成后,后端通过回调或轮询机制将菜谱数据返回给前端,前端随即更新界面展示结果。
个人贡献
购物车功能——商品详情界面和加入购物车逻辑
包括:
- 包含一个
ShopModel
对象,存储当前商品的详细信息,包括shopId
(商品ID)、shopName
(商品名称)、shopMessage
(商品描述)、shopImg
(商品图片URL)和shopMoney
(商品价格)。 - 维护一个
list_result_choice
列表,用于存储用户选择的商品列表,便于后续支付处理。
逻辑实现:
-
页面加载与初始化:
- 使用
Intent
接收从上个页面传递的ShopModel
对象,动态填充商品详情信息。 - 动态加载商品图片。
- 设置异常捕获机制,确保图片加载失败时程序不会崩溃。
private void initShopMessage(ShopModel noticeModel) { // 设置商品名称和价格 TextView shopName = findViewById(R.id.shopName); TextView shopPrice = findViewById(R.id.shopPrice); shopName.setText(noticeModel.getShopName()); shopPrice.setText("¥" + noticeModel.getShopMoney()); // 设置轮播图,展示商品多张图片 try { List<SelectImageItem> images = new ArrayList<>(); images.add(new SelectImageItem(noticeModel.getShopImg())); images.add(new SelectImageItem(noticeModel.getShopImg2())); // 假设有第二张图 CycleViewPager cycleViewPager = findViewById(R.id.cycleViewPager); cycleViewPager.setImages(images); } catch (Exception e) { e.printStackTrace(); } }
- 使用
1.加入购物车功能:
-
监听按钮点击事件:
Button mbtnChat = findViewById(R.id.mbtnChat); mbtnChat.setOnClickListener(view -> addCar());
-
实现
addCar()
方法:- 构造请求参数,包含商品ID和用户ID,向后端发送 POST 请求。
- 后端接口返回成功后,通过回调更新购物车状态,并显示成功提示。
private void addCar() { // 构造请求参数 AjaxParams params = new AjaxParams(); params.put("action_flag", "addCar"); params.put("carShopId", noticeModel.getShopId()); // 当前商品ID params.put("carUserId", MemberUserUtils.getUid(this) + ""); // 当前用户ID // 异步发送请求 httpPost(Consts.URL + Consts.APP.MessageAction, params, Consts.actionId.resultState, true, "正在加载..."); } @Override public void callBackSuccess(int actionFlag, Object object) { // 请求回调,显示操作成功的 Toast if (actionFlag == Consts.actionId.resultState) { Toast.makeText(this, "商品已加入购物车!", Toast.LENGTH_SHORT).show(); } }
2.立即购买功能:
-
监听
mbtnPay
按钮事件,将当前商品加入支付列表list_result_choice
,并跳转到支付页面。Button mbtnPay = findViewById(R.id.mbtnPay); mbtnPay.setOnClickListener(view -> { list_result_choice.add(noticeModel); // 将当前商品加入列表 Intent intent = new Intent(this, PayShopMessageActivity.class); intent.putExtra("msg", (Serializable) list_result_choice); // 传递商品列表 intent.putExtra("payMoney", noticeModel.getShopMoney() + ""); // 传递总价 startActivity(intent); // 跳转到支付页面 });
3.商品图片点击预览功能:
-
点击商品图片时,跳转到大图预览页面,显示商品图片的全尺寸图。
ImageView shopImg = findViewById(R.id.shopImg); shopImg.setOnClickListener(view -> { Intent intent = new Intent(this, ShowPictureActivity.class); intent.putExtra("imageUrl", noticeModel.getShopImg()); startActivity(intent); });
完整功能交互:
- 购物车数据同步:
借助CarObservable
通知购物车模块其他页面,确保前后端购物车数据一致。 - 异常处理:
商品图片加载异常时记录日志,避免页面崩溃。 - 支付页面跳转:
将商品信息作为序列化对象传递给支付页面,便于后续操作。
总结:
该购物车功能通过动态数据绑定和与后端接口的交互,实现了商品详情展示、加入购物车和立即购买功能。功能的核心逻辑主要依赖 HTTP 异步请求和 Intent 跳转,为用户提供了流畅的购物体验。
项目感受
在参与这个项目的过程中,我深刻体会到了技术与创新在现代软件开发中的重要性。项目中,我们通过整合安卓应用、后端服务、数据库和人工智能模型,为用户提供了一个直观且智能的购物体验。这种跨领域的技术融合不仅提升了产品的功能性,也极大地增强了用户体验。我学到了,无论是前端的界面设计还是后端的数据处理,每一个细节都至关重要,它们共同决定了产品的成败。此外,项目中的敏捷开发流程让我意识到快速迭代和响应用户反馈的重要性,这在快节奏的科技行业中尤为关键。我也深刻感受到了团队合作的力量,每个成员的专长和努力都是项目成功不可或缺的一部分。通过这个项目,我更加坚信持续学习新技术、勇于面对挑战和持续优化产品是保持竞争力的关键。这些经验不仅提升了我的技术能力,也让我对软件开发有了更深刻的理解,对我的未来职业生涯有着积极的影响。