Appearance
Expired:食品过期检测
- 来源:
noai-train/联合训练/Day4/T3 Expired 王鹤霖 - 类型:CV / OCR + rule reasoning
- 原始资料:
Expired.ipynb、baseline.py、metrics.py、Day4 ref/T3 Expired ref - 题面完整性:题面位于 notebook markdown,较完整
- 解法资料完整性:有参考脚本;以下结合题面与 OCR 常规解法整理
题面大意
给定食品包装图片,判断截至 2026-06-22 是否过期。图片中保证有且仅有一个生产日期和一个保质期,生产日期格式可能是 YYYY/MM/DD、YYYY年MM月DD日、YYYY.MM.DD、YYYY-MM-DD;保质期格式为 N天 或 N个月。规则是生产日期 + 保质期不少于 2026-06-22 则未过期,等于当天不算过期。特别希望减少“过期误判为未过期”。
数据特点
训练图片较少,文字清晰,但包装上还可能有商标、配料表、营养成分等干扰数字。核心不是泛化识别所有包装,而是从图像中准确抽取两个文本字段,并按公历规则计算日期。月份相加时若目标日期不存在,取当月最后一天。
考点
核心考点是 OCR 后的结构化信息抽取和规则推理。纯图像二分类可能利用训练集捷径,但真正稳健的解法应识别日期和保质期,再计算是否过期。评分偏向避免过期食品漏判,因此阈值和不确定性处理要保守。
涉及知识点
- OCR / 文本检测识别。
- 正则表达式抽取日期与保质期。
- 日期运算、闰年、月底截断。
- 风险敏感分类:降低 false negative。
- 图像预处理:裁剪、二值化、旋转/透视修正。
解法思路
标准解法流程:先用 OCR 引擎或视觉模型识别图片文字;再用正则匹配生产日期四种格式和“保质期 N 天/月”;然后用 datetime 和日历函数计算到期日;最后比较到期日与 2026-06-22。若 OCR 结果中出现多个日期/数字,要利用“保质期”关键词附近窗口、日期格式完整性和上下文过滤。
如果环境不适合 OCR,可训练图像分类模型作为 fallback,但应把 OCR 规则作为主路径。对识别不确定的样本,可以保守判为过期,以符合“减少过期误判为未过期”的业务目标。
可选/多种解法
OCR + 正则 + 日期规则:最符合题意,解释性强。
端到端二分类 CNN:实现简单,但容易学训练集包装风格,泛化差。
混合方案:OCR 可解析时按规则,解析失败时用 CNN 或人工特征补判。
特殊技巧
日期正则应允许中文、斜杠、点、横线四种分隔符,并处理月份/日期补零。月份加法不能简单加 30 天,必须按题面规定“月份增加,非法日期取月末”。包装干扰数字很多,保质期最好围绕“保质期”关键词抽取,而不是拿第一个数字。
调参优化
题解已有 baseline 使用较高学习率和少量 epoch 训练字符/视觉模型,但更稳的调参重点是 OCR 置信度和规则容错。可以调 OCR 检测阈值、文本框合并距离、日期正则优先级、保质期单位识别规则,以及不确定样本默认判过期的阈值。若用分类模型兜底,应按 F_beta(beta=3) 扫描过期概率阈值,通常阈值要低于 0.5 以减少漏判。验证时要单独统计“日期识别错”“保质期识别错”“规则计算错”,否则难以知道该调模型还是调规则。
注意事项
题面今日日期固定为 2026-06-22,不是运行当天。等于当天未过期。训练标签不能替代日期计算;题面还提到不允许直接使用标签里的日期做计算,应从图像内容识别。若模型输出概率,阈值应偏向把可疑样本判过期。
推广意义
这题是视觉 OCR 与符号规则结合的典型业务题。类似流程广泛用于票据识别、证件有效期判断、药品批号/保质期读取和合规审核。