综合设计——多源异构数据采集与融合应用综合实践
综合设计——多源异构数据采集与融合应用综合实践
这个项目属于哪个课程 | 2024数据采集与融合技术实践 |
---|---|
组名 、项目简介 | 组名:味谱魔方 、项目需求:设计出一个交互友好的多源异构数据的采集与融合的小应用 、项目目标:本系统旨在实现用户将食品加入购物车,生成对应的食谱核心功能、项目开展技术路线:js逆向、java、springboot、ChatGLM-6B模型 |
团队成员学号 | 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
爬取数据:核心涉及到js
逆向
2 各模块技术实现
2.1 一键生成菜谱功能
目标:根据用户购物车中的食材信息,通过自己部署的 ChatGLM-6B 模型生成个性化的菜谱并展示给用户。
技术方案:
- 前端技术(安卓):
- 编程语言:使用 Java 进行安卓应用开发。
- UI 设计:采用 XML 布局来设计用户界面。
- 弹框显示:使用 AlertDialog 弹框来展示生成菜谱的过程,以增强用户体验。
- 接口请求:前端通过 RESTful API 向后端发送请求,传递购物车中的食材数据,并等待生成的菜谱内容。
- 后端技术:
- 编程语言:后端使用Java和 Spring Boot 构建 RESTful API。
- 与 ChatGLM-6B 模型集成
- API 接口:后端通过 HTTP 请求将食材数据传递给部署的 ChatGLM-6B 模型,模型返回生成的菜谱内容。
- MySQL 数据存储:使用 MySQL 数据库存储用户数据,以及菜品,名称,价格等。
流程:
- 用户选择食材:用户在安卓应用中选择食材并添加到购物车。
- 生成推荐食谱:前端通过 RESTful API 向后端发送请求,传递购物车中的食材数据。
- 后端请求 ChatGLM-6B 模型:后端接收食材数据后,将其通过 HTTP 请求传递给部署的 ChatGLM-6B 模型接口。使用 HttpURLConnection 发起 HTTP 请求。
- ChatGLM-6B 模型生成菜谱:模型根据传入的食材数据,生成详细的食谱内容(包括菜名、食材等)。
- 返回生成的食谱:后端收到模型返回的菜谱数据后,将其以 JSON 格式 返回给前端。
- 展示菜谱:前端接收到菜谱数据后,展示生成的菜谱内容,弹窗显示展示详细信息。
2.2 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 模型进行菜谱生成。
- 结果返回:生成完毕后,后端将菜谱数据通过回调或轮询返回前端,前端更新界面。
自己分工:
这次团队任务中我负责的是android端代码的编写,实现用户的登陆功能,以及页面信息的展示,包括商品的信息、用户的个人信息等,并在android的res文件夹中通过xml文件实现页面的布局
1、登录功能
`MemberUserUtils.getUid(this)` 和 `MemberUserUtils.getName(this)` 负责管理登录状态和用户数据的读取。
// 获取当前用户ID和姓名
params.put("orderUserId", MemberUserUtils.getUid(this));
params.put("orderUserName", MemberUserUtils.getName(this));
// 判断用户是否已登录
if (TextUtils.isEmpty(MemberUserUtils.getUid(this))) {
ToastUtil.ShowCentre(this, "请先登录");
return;
}
// 登录成功后的跳转处理
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
2、商品展示功能
-
mtvName
和mtvMsg
分别显示商品的名称和价格,通过shopModel.getShopName()
和shopModel.getShopMoney()
获取商品的信息。 -
shopModel
是一个包含商品信息的对象,负责显示商品的详细信息。// 从 Intent 中获取商品信息 shopModel = (ShopModel) this.getIntent().getSerializableExtra("msg"); if (shopModel != null) { mtvName.setText(shopModel.getShopName()); // 显示商品名称 mtvMsg.setText(shopModel.getShopMoney() + "元"); // 显示商品价格 Glide.with(this).load(shopModel.getShopImage()).into(mivShopImage); // 加载商品图片 } else { ToastUtil.ShowCentre(this, "商品信息加载失败"); }
通过
shopModel
实例获取商品的名称和价格,然后将其显示在相应的视图中。
3、个人信息栏
个人信息通过 MemberUserUtils
获取,以下代码展示了用户信息的显示:
// 显示用户个人信息
private void displayUserInfo() {
String userName = MemberUserUtils.getName(this);
String userId = MemberUserUtils.getUid(this);
mtvUserName.setText(userName != null ? userName : "未登录");
mtvUserId.setText(userId != null ? "用户ID:" + userId : "未绑定ID");
}
// 更新用户信息
private void updateUserInfo(String newUserName, String newUserId) {
MemberUserUtils.setName(this, newUserName);
MemberUserUtils.setUid(this, newUserId);
ToastUtil.ShowCentre(this, "个人信息已更新");
}
4、支付部分功能
配送地址输入
// 检查配送地址是否为空
if (TextUtils.isEmpty(mtvAddress.getText().toString())) {
ToastUtil.ShowCentre(this, "请输入配送地址");
return;
}
Gitee文件夹链接
https://gitee.com/jyppx000/data-collection-and-fusion
心得体会
在这个任务中我学习了多模态数据处理的流程,了解了处理不同模态数据的模型和算法,同时也了解了项目的编写和部署过程,也学习了前端如何与后端交互,数据如何爬取等知识,受益匪浅。