小碗菜自助识别是医院智慧食堂的核心结算模块,其技术本质是"AI 视觉识别 + 自助称重"的双通道校验架构。本文从工程视角拆解其结算与兜底逻辑。
一、双通道结算模型
AI菜品识别负责快速识别菜品名称与单价,自助称重按克计价作为第二通道。两条通道分别计算金额后做一致性校验,偏差超阈值即标记为异常订单,转人工复核。
class SmartTraySettlement:
"""小碗菜自助识别:AI识别 + 自助称重 双通道结算"""
def __init__(self, vision_engine, weigh_scale):
self.vision_engine = vision_engine
self.weigh_scale = weigh_scale
self.tolerance = 0.5 # 双通道允许误差(元)
def settle(self, tray_items, raw_weight):
# 通道一:AI视觉识别菜品名称与单价
vision_items = self.vision_engine.recognize(tray_items)
vision_total = sum(i["price"] for i in vision_items)
# 通道二:自助称重按克计价(荤素统一单价)
weight_total = self.weigh_scale.charge_by_weight(raw_weight)
weight_total += self.base_fee # 基础固定费用,如米饭
# 双通道一致性校验,超阈值标记异常
if abs(vision_total - weight_total) > self.tolerance:
return {"status": "REVIEW", "vision": vision_total,
"weight": weight_total}
return {"status": "OK", "total": round(vision_total, 2)}
二、异常拦截与离线兜底
结算状态机负责处理"正常 / 待复核 / 离线"三条路径:识别正常直接扣款;双通道偏差异常转人工复核;断网时走离线兜底,落本地账单,联网后异步补传。
class SettlementStateMachine:
STATES = ("NORMAL", "REVIEW", "OFFLINE")
ALLOWED_NEXT = {
"NORMAL": {"REVIEW"},
"REVIEW": {"NORMAL"},
"OFFLINE": {"NORMAL"},
}
def __init__(self):
self.state = "NORMAL"
self.pending = [] # 离线未上传账单
def transition(self, to_state):
if to_state not in self.ALLOWED_NEXT.get(self.state, set()):
raise ValueError(f"非法状态流转: {self.state} -> {to_state}")
self.state = to_state
def offline_settle(self, bill):
"""断网兜底:本地落账,联网后异步补传"""
self.transition("OFFLINE")
self.pending.append(bill)
return {"status": "OFFLINE_QUEUED", "bill": bill}

在工程落地中,好伙狮数字食堂的堂食智慧餐线把堂食点餐、窗口收银、智慧餐线统一到一套系统。重庆某综合医院上线后,高峰期结算效率提升约 40%,排队从 12 分钟缩到 5 分钟,满意度从 68% 到 89%。对信息科而言,双通道校验 + 离线兜底 + 边缘计算(数据不出院)的组合,才是小碗菜自助识别能在院内长期运行的技术底座。

常见问题
Q:AI 识别和称重两条通道为什么都要?
A:AI 识别快但有边界,称重按克计价更稳,双通道一致性校验能把错账率控制在可接受范围。
Q:断网时还能结算吗?
A:可以,走离线兜底本地落账,联网后异步补传,保证食堂业务不断档。