25年的鸡蛋
Hacker News 摘要原标题:25 Years of Eggs
作者拥有一个坚持了25年的业余爱好:从2001年起,他就扫描并保存了自己所有的购物收据。他从未输入过价格数据,只是保留图片,期待未来的技术能够读取这些信息。2026年,他利用 AI 技术对这11345份收据进行了数字化处理,并以鸡蛋作为切入点来测试系统的可靠性。
项目概况
在为期14天的处理过程中,作者消耗了约16亿个 Token。他从乱码的感热纸打印件、OCR 失败案例以及包含拼写错误的文件夹中,成功提取到了589份购买鸡蛋的收据。整个过程他实际坐在键盘前操作的时间仅约15小时,其余时间则是 AI 代理在后台运行。
技术突破与挑战
1. 边界识别问题
由于早期的收据是放在平板扫描仪上扫描的,白色纸张在白色扫描背景下极难区分,作者将其称为白色阴影问题。
• 他先后尝试了边缘检测、自适应阈值、轮廓分析等七种传统计算机视觉方法,结果最理想的 F1 分数仅为 0.302。
• 最终他采用了 Meta 的 SAM3 模型,仅通过一个 API 调用,就以 92% 至 98% 的置信度识别出了每一张收据的边界。
2. 文本识别与矫正
收据往往由于摆放角度随机而难以读取。作者发现,传统的 Tesseract 识别精度堪忧,例如会将 OAT MILK 识别为 OATH ILK,或者丢失小数点。
• 最终的处理方案是:先使用在苹果芯片上本地运行的 PaddleOCR-VL 视觉语言模型进行清洗录入。
• 针对长条收据,作者编写了脚本将其按长宽比切片处理。
• 最后由 Codex 或 Claude 进行结构化信息提取。
3. 结构化数据提取
最初尝试使用正则表达式提取鸡蛋的价格和数量,但由于超市经常使用缩写(如 STO LRG BRUNN 代表鸡蛋),正则表达式漏掉了大量数据。
• 作者决定使用 Codex 进行全量处理。当 Codex 的 Token 额度用完时,系统会自动切换到 Claude 继续任务。
• 为了防止长任务崩溃导致数据丢失,他优化了执行逻辑:每批次启动一个新进程,并能够从缓存中恢复进度。这让原本需要12小时的任务缩短到了3小时。
数据准确性与质量控制
为了验证数据,作者用22分钟搭建了一个基于 Flask 的标记工具,并手动标注了375份收据作为基准。
• 经过多次迭代,AI 分类器的准确率达到了 99% 以上。
• 作者发现,AI 甚至能纠正其手动标注的错误,例如识别出被漏掉的条形码扫描件或面条收据。
• AI 还能处理极端情况,比如有一张扫描反了的收据,Claude 逐个字符解码了镜像后的 OCR 文本。
核心数据统计
• 时间范围:2001年至2026年。
• 处理总量:11345份收据。
• 代码代理运行时间:14天。
• Token 消耗成本:约1591美元。
• 确认的鸡蛋收据:589份。
• 买蛋总支出:1972美元。
• 鸡蛋总数:8604枚。
作者总结认为,成功的关键不在于单一模型,而在于使用针对性强的模型堆栈:用 SAM3 分割图像,用 PaddleOCR 提取文本,再用 Codex 和 Claude 完成后续所有工作。作者感慨,这就是奇迹发生的时代,他计划继续分析过去30年的鸡蛋价格数据。
原文:https://www.john-rush.com/posts/eggs-25-years-20260219.html