开发设计了一个基于计算机视觉的智能餐饮热量监测与结算系统:

摘要
随着健康饮食意识的提升及智慧食堂建设的推进,传统的人工配餐与结算模式在效率、营养数据透明度及用户体验方面面临挑战。本文提出并设计了一套基于深度计算机视觉技术的智能餐饮热量监测与结算系统。该系统摒弃了复杂的视觉测重方案,采用"视觉分类识别 + 标准化营养数据库 + 混合计费逻辑"的创新架构。通过YOLO目标检测算法实时识别餐盘中的菜品类别,结合预置的精细化营养数据库(涵盖72类意式及通用菜品),实现了对每100g热量、蛋白质、脂肪等核心营养指标的精准查询与展示。系统创新性地设计了"固定份量"与"按重计费"双模式逻辑,有效解决了不同售卖场景下的结算难题。实验表明,该方案在大幅降低硬件成本与算法复杂度的同时,显著提升了营养数据的可获取性与结算流程的自动化水平,为智慧餐饮管理提供了高效、低成本的解决方案。
1. 引言
在现代餐饮管理,尤其是高校食堂、企业餐厅及自助料理场景中,用户对于食物热量摄入的知情权日益重视。然而,传统模式下,用户难以直观获取菜品的具体营养数据,且人工结算效率低下,易出现排队拥堵与计价误差。现有的视觉结算方案多尝试通过单目或双目摄像头估算食物体积进而推算重量,但受限于食物形态不规则、堆叠遮挡及光照变化等因素,测重精度难以满足商业结算要求,且算力成本高昂。
针对上述痛点,本文设计了一种轻量级、高可行性的智能系统。本系统的核心理念在于"解耦":将品类识别 交由高精度的深度学习模型完成,将重量获取 回归到成熟的电子秤硬件或固定规格标准,而系统本身专注于营养数据的映射与逻辑计算。这种设计不仅规避了视觉测重的技术瓶颈,更使得系统能够快速落地部署,专注于为用户提供准确的"每100g热量"参考及高效的结算服务。
2. 系统总体架构设计
本系统采用分层架构设计,主要包含感知层、数据层、逻辑层与应用层四个部分。
感知层 由高清工业摄像头与YOLOv8目标检测模型构成。其核心任务是对传输带或餐盘上的食物进行实时捕捉与分类,输出菜品类别ID(Class ID)及置信度。
数据层 构建了标准化的MySQL本地关系型数据库。数据库中预置了72种常见菜品的详细档案,包含中英文名称、每100g的热量(kcal)、三大营养素含量(蛋白质、碳水、脂肪)、单价策略以及售卖属性(固定份量/按重售卖)。数据源参考了权威食品营养数据库及实际烹饪标准,确保了数据的科学性。
逻辑层负责执行双重计费与营养计算算法。根据感知层输出的类别ID查询数据库,依据菜品的"售卖属性"字段动态切换计算路径:对于固定份量菜品,直接调用预设重量与价格。
应用层面向用户与管理者,提供实时的可视化界面。界面展示识别出的菜品名称、单位热量(每100g)、预估总热量(若有权重数据)及应付金额,同时支持营养分析报告的生成。
3. 核心功能模块与算法逻辑
3.1 基于YOLO的菜品细粒度识别
系统采用经过自定义数据集训练的YOLO目标检测模型。针对意式料理及通用食堂菜品种类繁多、外观相似的特点,模型被训练为识别72个特定类别(如"博洛尼亚千层面"、"海鲜酱意面"、"烤小牛肉"等)。模型输入为餐盘图像,输出为边界框(Bounding Box)及对应的类别索引。
3.2 标准化营养数据库构建
数据库设计是本系统的关键创新点。每张数据记录包含class_id作为主键,关联calories_per_100g(每100g热量)等核心指标。特别设计了is_fixed_portion布尔标志位,用于区分售卖模式:
- 固定份量模式(Fixed Portion) :适用于披萨切片、独立包装酸奶、整块肉排等标准化产品。数据库存储其
fixed_weight_g(标准克重)与fixed_price(固定售价)。 - 按重计费模式(Weight-based) :适用于米饭、沙拉、汤品及自助称重区菜品。数据库仅存储
price_per_100g(每100g单价),重量数据由外部硬件实时传入。
3.3 混合计费与热量计算引擎
系统内置智能图像识别算法,根据识别结果自动匹配计算逻辑:
- 识别匹配 :获取图像中的
class_id,检索数据库。 - 模式判断 :
若is_fixed_portion = True:系统直接计算总热量 Etotal=Wfixed100×E100gE_{total} = \frac{W_{fixed}}{100} \times E_{100g}Etotal=100Wfixed×E100g 及总价 Ptotal=PfixedP_{total} = P_{fixed}Ptotal=Pfixed。此过程无需额外传感器介入,实现"即识即算"。 - 异常处理 :对于识别置信度低于阈值或无法识别的物体(如
cibo_bianco_non_identificato),系统启用兜底策略,显示平均营养估值并提示人工复核,确保流程不中断。
4. 模型与系统设计
| 类别 | 配置项 | 详细规格/版本 |
|---|---|---|
| 硬件环境 | CPU | Intel® Xeon® Platinum 8255C |
| GPU | NVIDIA V100 (32GB 显存) | |
| 内存 (RAM) | 64 GB | |
| 软件环境 | 操作系统 | Ubuntu 20.04 LTS |
| CUDA 版本 | 11.8 | |
| Python 版本 | 3.10 | |
| 深度学习框架 | PyTorch 2.1.0 | |
| 实验数据 | 数据集名称 | UNIMIB2016 (公开数据集) |
识别模型为YOLOv11,其与YOLO系列的目标检测模型在结构上没有很大差异,都是由骨干特征提取模块、颈部特征聚合模块以及检测头模块组成:

训练结果如下:我们训练了200个epoch,最终 mAP50 为 0.798,mAP 为 0.698

训练后的模型预测效果如下:

训练后的模型为.pt格式,为方便部署,将其转换为ONNX格式。
4.1 整体架构
本项目以训练成熟的 YOLO 目标检测模型为核心引擎,结合 PyQt5 桌面应用框架与 MySQL 数据库技术,构建了一站式智能餐饮解决方案。旨在解决传统食堂/餐厅结算慢、热量统计难的问题,实现菜品识别的自动化与营养数据的可视化。
4.2 核心技术栈
视觉算法:YOLO (You Only Look Once) 深度学习模型+OpenCV,负责复杂场景下的多类别菜品实时检测。
交互界面:PyQt5,打造响应迅速、布局美观的桌面客户端,支持多线程处理以避免界面卡顿。
数据管理:MySQL,存储用户信息、菜品库、历史检测记录及热量/价格映射表,确保数据一致性与可追溯性。
4.3 主要功能模块
多源图像采集:
- 本地上传:支持常见格式(
JPG/PNG)图片上传,即时反馈检测结果。 - 实时抓拍:调用摄像头接口,实现视频流实时帧捕获与动态检测,模拟自助结算台场景。
智能分析与结算:
- 自动识别餐盘中的菜品种类与数量。
- 基于预设数据库,实时计算总热量(kcal)与预估总价(CNY),生成详细结算清单。
数据管理与溯源:
- 历史记录:自动保存每次检测的截图、时间、菜品明细等。
- 用户中心:实现用户注册、登录及权限分级管理,保障数据安全。

用户登录后,选择要上传的图像:

随后点击保存并自动推理按钮,通过YOLO模型识别菜品种类,随后根据菜品ID前往系统数据库中获取菜品热量与价格,计算出最终的菜品热量与总价。

输出效果如下:

同时支持开启摄像头检测,点击抓拍按钮,即可实现自动识别

生成的检测记录可以查看

点击查看按钮可以看到具体的检测信息与检测图像


此外,对于管理员,还有用户管理功能

5. 结论与展望
本文设计的智能餐饮热量监测与结算系统,成功解决了视觉测重难、营养数据缺失的行业痛点。系统以"识别分类+查表计算"为核心,实现了高效、准确的菜品识别与多元化的结算逻辑。实测表明,该系统在保持极低硬件门槛的同时,能够提供专业级的营养数据分析与流畅的结算体验。
未来工作将集中在两个方面:一是进一步扩充数据库覆盖范围,引入更多地域性菜品及过敏原信息;二是探索与用户个人健康账户的联动,根据用户的历史摄入数据提供个性化的菜品推荐与热量预警,打造全方位的智慧健康管理生态。