AI是怎么认出食物的:从一张照片到热量和营养素
先说结论: 你拍下一个盘子之后,App会依次跑四个步骤——把食物从背景里分出来、认出每一样是什么、估算各有多少、再按这个量去查营养数据。前两步现在已经相当可靠;第三步,也就是从一张平面照片估算分量,是误差的主要来源;第四步完全取决于背后那个数据库的质量。补几个字的上下文("鸡胸肉,大概150克,配米饭"),最终误差大致会减半,因为它同时修好了第二步和第三步。
为什么这件事比看上去难
一个人瞥一眼盘子,无意识地做的也是这四件事,而且大多数时候是错的——在一项针对2000人的研究里,平均每人20张照片里只有5张的热量估算落在真实值20%以内,受过训练的标注员也一样。问题不在于聪明不聪明,而在于一张照片里确实没有足够的信息。深度、密度、藏起来的油和酱汁,以及全脂和低脂之间的差别,对镜头来说都是不可见的。
AI食物识别没有解决这个问题。它做到的是让这次猜测更快、更一致,也更容易修正。
第一步:分割——找到食物在哪里
模型先把图片分成若干区域:盘子、桌面、手,以及每一样能区分开的食物。现代分割模型即使在食物互相重叠时也处理得不错,但当各样东西是"混在一起"而不是"挨在一起"时,准确度会下降——炖菜、咖喱、什么都卷在里面的卷饼。如果模型没法在米饭周围画出一条边界,它就没法量这些米饭。
什么会破坏这一步: 光线暗、拍糊、角度太斜,以及配料被搅在一起的菜。
第二步:分类——给认出来的东西起名
每个区域会去和一个在数百万张带标签食物图片上训练过的模型比对。对常见食物——烤鸡、白米饭、西兰花、煎蛋——准确度很高。错误集中在长得像的那几组:
- 鸡腿肉和鸡胸肉(脂肪含量不同)
- 白米饭、烩饭和花菜米
- 全脂和低脂酸奶
- 黄油、人造黄油和橄榄油抹酱
- 加糖和无糖的饮料
- 模型见得比较少的地方菜
2026年多数App在这一步用的是大型多模态模型,而不是专门的食物分类器。这提升了对少见菜式和地方菜的覆盖,但没有解决长得像的问题——模型依然看不见脂肪含量。
什么会破坏这一步: 外观相似的食物、不常见的菜系、被酱汁或配菜盖住的食物。
第三步:分量估算——到底有多少
这是最难的一步,也是误差的主要来源。模型要从一张没有参照尺度的二维照片里推断三维体积。它会利用一些线索——盘子大小、筷子、手、常见的盛法——但一碗米饭从上往下看,装150克和装300克是一样的。
关于分量估算的研究一致显示,这一步贡献了最大比例的误差。在一项众包研究里,加入信用卡这样的参照物,反而让人的估算变得更差,从这一点就能看出体积这件事有多反直觉。
有两个办法有用:
- 用视频代替单张照片。 围着盘子转两秒,模型拿到多个角度,就有了推断深度的依据。CalMePlease支持视频输入正是为此。
- 直接说出量。 "大概一碗""150克"把这次猜测整个去掉了。
什么会破坏这一步: 深碗、堆叠的食物、正上方俯拍,以及超出模型预期的大分量。
第四步:营养查询——把食物和分量变成数字
识别出的食物和估算出的重量会被匹配到一个营养数据库,乘出热量、蛋白质、碳水、脂肪,以及在会统计它们的App里的纤维、糖、钠等等。
这一步的上限就是数据库的上限。"咖喱鸡"对应的条目,会因为奶油、油和糖的不同而差得非常远。众包数据库里有录错的条目,人工审校的数据库则有缺失的条目。做得好的App用一个经过验证的基础库,再让模型根据看到的样子(油大、奶味重、干)做调整。
什么会破坏这一步: 方差很大的菜用了通用条目、藏着油和糖的餐馆菜,以及本该扫条码却被拍照的包装食品。
中餐会在哪一步先输
把这四步放到中餐上,问题的分布和西式单品盘子不一样。
第一步就要吃亏:中餐的默认结构是"一道菜里有五六样东西",肉、菜、豆制品在同一个勺子里,边界画不清楚。第二步相对还好,常见家常菜的识别现在已经不差。真正致命的是第三步和第四步——共食是一桌菜转两圈,你到底吃了多少,模型只能猜;而做法差异带来的能量差,通常比分量差异还大:同样一盘青菜,清炒和白灼可能差100大卡以上;红烧、糖醋、鱼香里的糖都在锅里,不在画面里。
所以中餐用户最该养成的习惯不是多拍几个角度,而是补一句话:"这盘油大""糖醋的""我大概吃了三分之一"。这三句分别修的正是分类、数据条目和分量。
误差是怎么叠加的
每一步都会把自己的误差传给下一步。分量差10%,加上一次把鸡腿认成鸡胸而使脂肪差了30%,再加上一条通用的数据库条目,最终数字就可能偏离30%到40%——这也是为什么两款App看同一个盘子,结果能差三分之一。
整条流程公开的数字是:真实餐食上纯拍照估算的平均误差约15%到30%,用户补一句简短描述后降到约14%。单一简单食物落在低端,混合菜落在高端。
为什么一句上下文这么关键
一句简短的文字或语音,一步就修好了最差的两个环节:
- "鸡胸肉"解决了分类(是胸,不是腿)
- "大概150克"解决了分量
- "用了橄榄油"补上了看不见的脂肪
照片依然承担"认出盘子上有什么"的工作,而这句话修正的是照片看不见的那两件事。这也是CalMePlease围绕"照片加一段母语语音"来设计、而不是只做照片的原因。研究给出的结论很直接:在不用秤的前提下,这个组合就是准确度的实际上限。
数字之后:App拿它做什么
识别到第四步就结束了。之后发生什么,才是各家分道扬镳的地方。
多数记录App把热量加进当天合计,然后停下。CalMePlease把全部十项指标——包括多数拍照App会跳过的纤维、糖和钠——喂给一个AI教练,由它读完整天并告诉你接下来该吃什么。识别流程是输入,建议才是产品。一个偏20%但能引出"你蛋白质低了,晚饭补一点"的估算,比一个没人据此做任何事的完美数字有用。
识别能在手机上完成吗
有些App现在会用系统的端侧模型跑流程的一部分,这意味着照片不离开手机。截至2026年,这里的取舍是准确度:端侧模型更小,处理少见食物更差。多数App,包括CalMePlease,仍在服务器上处理图片,把结果历史保存在本地。对隐私来说真正重要的是"留下了什么":CalMePlease把用餐历史、体重和统计保存在你的设备上,不出售也不共享数据。
常见问题
App怎么从一张照片知道我吃了多少大卡? 它识别出每一样食物,从图片估算重量,再去数据库里查每克的热量。三件事都是估算,其中重量最不可靠。
为什么两款App对同一张照片给出不同的热量? 分类模型不同、分量估算的经验规则不同、数据库也不同,每一步的误差还会叠加。
AI识别能用在家常菜上吗? 能,而且比搜索数据库更好用——AI会把组成部分一一命名,否则你要自己一样一样去找。补一句关于油或酱汁的说明,数字会更接近。
AI能从视频识别食物吗? 能。视频提供多个角度,能改善分量估算。CalMePlease接受几秒的短视频作为输入。
AI食物识别对减肥来说够准吗? 只要记录稳定,够。随机误差在一周里会互相抵消;真正重要的是每一餐都记,并且把明显认错的地方改掉。详见拍照算热量准吗
延伸阅读:用语音记录饮食 · 扫条码算热量:标签没告诉你的事
CalMePlease支持拍照、视频、语音和条码记录,每餐统计十项指标。在App Store免费获取。