# Intelligent settlement **Repository Path**: charwavid/intelligent-settlement ## Basic Information - **Project Name**: Intelligent settlement - **Description**: 基于yolov8的智能结算系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-03-13 - **Last Updated**: 2025-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 餐盘智能结算系统 ### 背景 随着智能信息化时代的到来,人们越来越追求快节奏的生活,每次放学高峰期食堂排队点餐总是会发生拥挤的情况,主要问题是价格由员工临时计算,无法快速得出菜品共计多少钱。从这个角度出发,我们希望研发一种可快速且高效识别菜品的餐盘识别系统,在校园食堂中应用本系统,可缩短收银员计算价格的时间、简化收银步骤,节约学生点餐时间。 ### 主要技术 | 功能 | 技术 | | :--------: | :-------------: | | 目标检测 | yolov8、pytorch | | 可视化界面 | pyqt5 | | 数据标注 | labelimg | | 数据库 | sqlite | ### 目录结构 ``` intelligent-settlement |__ business | |__ function_page.py 用户主页 | |__ register.py 用户注册 | |__ crud | |__ select.py 查询功能 | |__ DataAnnotations | |__ JPEGImages 未标注的图片 | |__ data 已标注图片 | |__ 数据标注规则.md | |__ database | |__ database.py 数据库类 | |__ plave_data.db sqlite数据库 | |__ docs | |__ 模型训练.md | |__ 环境搭建.md | |__ Identify | |__ identify_camera.py 结算模块 | |__ identify_test.py 测试模块 | |__ plate_detect | |__ ultralytics yolov8模型训练框架 | |__ plate_detect.py 模型加载模块 | |__ UI | |__ function_page_ui.py 用户主页ui | |__ login_ui.py 登录页面ui | |__ register_ui.py 注册页面ui | |__ select_file_ui.py 查询页面ui | |__ VideoProcessing | |__ video_processing.py 测试 | |__ main.py 主函数 |__ README.md ``` ### 开发环境 - 计算机一台 - Vscode 工具软件 ### 实现方案 1. 使用 `Pyqt5` 构建一个智能结算系统,功能包括:登录、注册、查看账单信息、查看用户信息、结算测试、结算。 2. 使用 `labelimg` 对数据集进行标注。 3. 基于 `yolov8` 构建目标检测模型。 4. 使用 `sqlite` 存储数据。。 #### 关键技术概述 主要使用 `PyQT5` 来做系统可视化界面的设计,使用 `sqlite` 实现数据的存储,及基于 `yolov8` 构建目标检测模型 #### PyQT5 `PyQt` 是 `Qt` 框架的 `Python` 语言实现,由 `Riverbank Computing` 开发,是最强大的 `GUI` 库之一。 `PyQt` 提供了一个设计良好的窗口控件集合,每一个 `PyQt` 控件都对应一个Qt控件,因此 `PyQt` 的 `API` 接口与 `Qt` 的 `API` 接口很接近,但 `PyQt` 不再使用 `QMake` 系统和 `Q_OBJECT` 宏。 #### labelimg `labelimg` 是一个可视化的图像标定工具。它是用 `Python` 编写的,并将 `Qt` 用于其图形界面。批注以 `PASCAL VOC` 格式(`ImageNet` 使用的格式)另存为 `XML` 文件。此外,它还支持 `YOLO` 格式。`Faster R-CNN`,`YOLO`,`SSD` 等目标检测网络所需要的数据集,均需要借此工具标定图像中的目标。 #### sqlite `SQLite`,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。 #### yolov8 `YOLOv8` 是一个 `SOTA` 模型,它建立在以前 `YOLO` 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。具体创新包括一个新的骨干网络、一个新的 `Ancher-Free` 检测头和一个新的损失函数,可以在从 `CPU` 到 `GPU` 的各种硬件平台上运行。 ### 系统模块分析 #### 系统需求分析 随着现代人生活节奏的加快,餐饮行业的发展也进入了快车道,然而如何在保证餐饮质量的同时提高出餐率成为了各大餐饮商家所关心的问题。餐盘智能结算系统能够对结算环节进行优化,达到提高出餐效率的目的,能够将该系统应用在快餐、食堂等场所。 #### 系统总体框架分析 该系统主要分为三个个部分,分别为:用户信息管理模块,账单信息管理模块以及结算模块。用户信息管理包括,登录模块、注册模块以及查询用户信息模块。结算模块,包括测试模块、以及应用模块。 #### 用户信息管理模块分析 用户信息管理包含三个模块,登录模块、注册模块以及查询用户信息模块。 1. 登录模块 进入系统需要先进行登录,当用户点击登录按钮后,系统会对用户输入的账号、密码进行验证。若用户通过身份验证后,可进入主页,否则会收到""用户名或密码错误""的提示。 2. 注册模块 用户可通过注册页面,设置用户名和密码,完成注册,若用户名重复将受到"用户名重复"的提示信息,完成注册后可根据注册的用户名和密码进行登录。 3. 查询用户信息模块 用户完成登录后,可在主页查询用户信息,在查询界面可看到所有用户的基本信息。 #### 账单信息管理模块分析 登录后可查看所有的销售记录,信息包括:用户ID、交易金额、餐盘列表、交易时间。 #### 结算模块分析 结算模块包含两个模块,测试模块和应用模块。 1. 测试模块 用户登录后,可使用该模块,该模块可根据选择的视频文件,识别视频中餐盘,结算价格并跳转至结算界面。 2. 应用模块 用户登录后,可使用该模块,改模块将打开摄像头,根据摄像头返回的图像信息识别餐盘并结算总价,若连续80帧的餐盘信息不变则跳转至结算界面进行结算。 ### 系统模块设计与实现 系统总体结构设计的主要内容之一是系统模块结构设计,其任务是合理地进行模块的分解和定义,把每个子系统划分成一个个模块,并通过模块结构图把分解的模块按层次结构联系起来。通过每个模块设计后的思路进行模块实现,将每个模块一一搭建出整个系统。 #### 用户信息管理模块设计与实现 1. 登录模块 用户登录后才能进入系统主页,在登录页面需要输入用户名和密码,系统会查询 `User` 表验证信息是否正确,当验证通过时进入主页,若未通过则提示用户”用户名或密码错误“。 2. 注册模块 新用户要进入系统,需要通过改模块设置用户名和密码,用户输入需要设置的用户名和密码点击提交后,系统会查询 `User` 表若表中存在相同用户名的用户则提示用户该用户名以存在请重新输入用户名,若 `User` 表中不存在相同的用户名则将数据插入 `User` 表,并提示用户注册成功。 3. 用户登录后,在主页点击”用户信息查询“的按钮,系统会返回 `User` 表中所有的信息。 #### 账单信息管理模块设计与实现 用户登录后,在主页点击”账单信息查询“的按钮,系统会返回 `Record` 表中所有的信息。 #### 结算模块设计与实现 1. 测试模块 用户登录后,在主页点击”测试“的按钮,进入测试界面,选择视频文件后,会播放视频并进行目标检测,计算总价。若连续80帧的餐盘列表没有发生改变则将用户ID、总价、餐盘列表以及当前时间插入 `Record` 表中,若期间发生变化则帧数清零。 2. 应用模块 用户登录后,在主页点击”应用“的按钮,系统会打开摄像头,进行目标识别,并计算总价。若连续80帧的餐盘列表没有发生改变则将用户ID、总价、餐盘列表以及当前时间插入 `Record` 表中,若期间发生变化则帧数清零。 #### 数据库设计与实现 `User` 表里存放的都是用户信息,包括用户ID、用户名、密码。 | 字段名 | 字段类型 | 说明 | | :------: | :------: | :--------: | | uid | integer | 主键、自增 | | username | varchar | 用户名 | | password | varchar | 密码 | `Record` 表里存放账单信息,包括账单ID、用户ID、总价、餐盘列表以及交易时间。 | 字段名 | 字段类型 | 说明 | | :------: | :-------: | :------: | | rid | integer | 账单ID | | uid | smallint | 用户ID | | amount | float | 总价 | | list | json | 餐盘列表 | | rec_time | timestamp | 交易时间 | ### 系统环境 实现最基本的系统功能需求和进行系统相关性能测试所需要使用的运行环境以及相关测试工具。 - 开发工具 | 工具 | 版本 | | :----: | :----: | | vscode | 1.75.1 | - Anaconda 环境 | 框架 | 版本 | | :---------: | :----: | | Python | 3.9.0 | | pytorch | 2.1 | | PyQt5 | 5.15.9 | | ultralytics | 8.0.93 | ### 实现步骤 #### 环境搭建 具体可参考,`docs/环境搭建.md` #### 数据标注 具体可参考,`DataAnnotations/数据标注规则.md` #### 模型训练 具体可参考,`docs/模型训练.md` #### 用户信息管理模块 ##### 登录模块 继承 `login_ui` 分别给按钮绑定 `login`、`_register`、`close` 函数,其中 `_register` 用于展示注册页面。`login` 函数会获取输入的用户名和密码,并查询 `User` 表进行身份验证。 ##### 注册模块 继承 `register_ui` 给按钮绑定 `InsertDatabase` ,该函数会调用 `database` 的 `insert_user()` 方法,将用户名和密码插入数据库中。 ##### 查询用户信息模块 使用 `QTableWidget ` 表格控件,展示 `User` 表的所有信息。 #### 账单信息管理模块 使用 `QTableWidget ` 表格控件,展示 `Record` 表的所有信息。 #### 结算模块 ##### 测试模块 继承 `select_file_ui` 初始化模型,连接数据库,重写 `msg` 函数,将得到的锚框信息和计算得出的总价使用 `opencv` 显示在页面中。 ##### 应用模块 继承 `select_file_ui` 初始化模型,初始化摄像头,连接数据库,该模块不需要选择文件,将 `msg` 函数重写为 pass。 ### 运行 ![image-20230529201555567](img/image-20230529201555567.png) ![image-20230529201946578](img/image-20230529201946578.png) ![image-20230529201634412](img/image-20230529201634412.png) ![image-20230529201659482](img/image-20230529201659482.png) ![image-20230529201727893](img/image-20230529201727893.png) ![image-20230529201847919](img/image-20230529201847919.png)