AI如何通过照片估算食物分量:技术深度解析
深入探讨AI如何利用深度估算、参考物体和体积建模,从单张照片中估算食物分量。
识别盘子上的食物只是AI驱动的卡路里追踪的一半挑战。另一半,甚至可以说是更难的一半,是确定食物的实际分量。一份意大利面可能是200卡路里,也可能是800卡路里,这取决于分量的大小。准确估算这一点是将有用的营养追踪工具与新奇产品区分开来的关键。
本文将深入探讨AI系统如何通过照片估算食物分量,涵盖深度估算、参考物体缩放、体积建模以及研究人员和工程师在提高这些估算准确性方面面临的持续挑战。
为什么分量估算比食物识别更具挑战性
食物识别本质上是一个分类问题。系统必须从有限的食物类别中选择。而分量估算则是一个回归问题,系统必须仅凭视觉信息预测一个连续值(克或毫升)。
几个因素使得这一过程特别具有挑战性:
- 2D到3D的问题: 照片将三维现实压缩成二维图像,深度信息丢失,使得区分薄薄一层食物和厚厚一堆食物变得困难。
- 密度变化: 一杯生菜和一杯燕麦的体积相同,但重量和卡路里含量却截然不同。系统必须同时估算体积和密度。
- 透视失真: 照片拍摄角度会影响食物的大小表现。正上方拍摄的盘子与以45度角拍摄的同一盘子看起来截然不同。
- 模糊的缩放: 如果画面中没有已知的参考物体,就无法确定绝对大小。近距离拍摄的小饼干可能与远处拍摄的大披萨看起来一模一样。
从单张图像进行深度估算
使得从照片中进行分量估算的关键突破之一是单目深度估算,即从单张图像推断深度信息,而不需要立体相机或专用硬件。
单目深度估算的工作原理
人类视觉系统通过多种线索推断深度:物体重叠(近处物体遮挡远处物体)、相对大小(小物体通常在远处)、纹理梯度(远处的纹理变得更细腻)和大气透视(远处物体看起来模糊)。
深度学习模型可以从大量配有深度图的图像数据集中学习这些线索。当应用于食物摄影时,这些模型能够估算食物的哪些部分离相机更近,哪些部分更远,从而有效地从平面图像重建食物的三维形状。
深度图与食物体积
深度图为图像中的每个像素分配一个距离值。对于食物估算,这意味着系统可以确定一碗汤的中心处于一个深度,而碗的边缘处于另一个深度。这些深度之间的差异,加上检测到的食物边界,使得系统能够估算体积。
现代智能手机配备的LiDAR传感器(在最近的iPhone Pro和iPad Pro型号上可用)能够捕捉实际的深度数据,与彩色图像一起提供,比单纯的算法估算更准确。食物追踪应用可以在可用时利用这一硬件,而在没有深度传感器的设备上则退回到单目估算。
参考物体缩放
在没有已知参考点的情况下,照片中物体的绝对大小是模糊的。参考物体缩放通过使用已知尺寸的物体为整个图像建立大小比例,解决了这一问题。
常见参考物体
| 参考物体 | 已知尺寸 | 准确性优势 |
|---|---|---|
| 标准晚餐盘 | 25-27厘米直径 | 为整餐建立整体比例 |
| 叉子或勺子 | ~19厘米长度 | 即使在特写镜头中也能提供比例 |
| 信用卡 | 8.56 x 5.4厘米 | 精确且普遍标准化 |
| 智能手机 | 根据型号变化但已知 | 可以通过算法检测和测量 |
| 手 | 根据人口统计变化但可估算 | 当没有其他参考时的近似缩放 |
自动参考检测
现代系统尝试自动检测常见的参考物体,而不是要求用户在食物旁边放置参考卡(这会增加使用的摩擦并降低使用率)。盘子、碗、餐具和桌子在食物照片中经常出现,如果系统能够识别它们,就可以作为大小参考。
Nutrola的分量估算系统会自动寻找框架中的盘子、碗和餐具以建立比例。当检测到这些物体时,系统会利用它们的典型尺寸来校准食物的大小。如果没有找到参考物体,系统会依赖于对典型食物分量的学习先验,并可能提示用户进行确认。
基于盘子的校准
一种特别有效的方法是基于盘子的校准。大多数国家的标准晚餐盘直径在一个狭窄的范围内(25到27厘米)。通过检测图像中盘子的椭圆轮廓并假设其标准尺寸,系统可以为盘子上的所有食物建立可靠的比例。
这种方法效果很好,因为盘子几乎总是出现在餐食照片中,其椭圆形状无论相机角度如何都容易检测,而椭圆的透视失真实际上编码了关于相机角度的信息,有助于纠正食物的透视效果。
体积估算技术
一旦系统识别了食物、估算了深度并建立了比例,就必须将这些信息结合起来估算每种食物的体积。
几何原始体
一种方法是将食物物体近似为简单几何形状的组合:
- 圆柱体 用于高的食物,如饮料、叠放的煎饼或分层蛋糕
- 半球体 用于圆形食物,如米饭球、土豆泥堆或冰淇淋球
- 长方体 用于切片面包、奶酪块或能量棒
- 截头锥体 用于汤碗或谷物碗(碗的形状有助于定义体积)
- 不规则多面体 用于形状复杂的食物,如鸡腿或整颗水果
系统将一个或多个这些原始体拟合到检测到的食物区域,并根据拟合的形状和已建立的比例计算体积。
基于体素的重建
一种更复杂的方法涉及基于体素的重建,其中食物物体被建模为一个小立方体(体素)的三维网格。每个体素根据深度图和分割掩模被分类为包含食物或为空。总的体积就是所有包含食物的体素的总和。
这种方法比几何原始体更好地处理不规则形状,但需要更多的计算资源。它特别适用于不符合简单形状的食物,如撕成碎片的面包或不规则切片的水果。
神经体积估算
最新的方法完全跳过显式的几何建模。相反,训练一个神经网络从图像中端到端地预测食物体积。这些模型从配有实际重量测量的大量食物图像数据集中学习食物几何的隐式表示。
这种方法显示出良好的效果,因为它能够捕捉与体积相关的细微视觉线索,例如光线如何在液体表面反射或食物堆的阴影模式。它还避免了在深度估算、分割和几何拟合作为独立步骤执行时可能出现的误差累积。
从体积到重量再到卡路里
估算体积并不是最后一步。为了计算卡路里,系统必须将体积转换为重量(使用食物密度),再将重量转换为卡路里(使用营养成分数据)。
食物密度数据库
不同食物的密度差异很大。一杯油重约220克,而一杯面粉重约120克,一杯爆米花重约8克。准确的密度数据对于将体积估算转换为重量估算至关重要。
生产系统维护着将食物项目与其密度映射的数据库,考虑到准备方法的变化(熟食与生食、切块与整块)和常见的分量样式。
| 食物项目 | 密度 (g/mL) | 1杯重量 (g) | 每杯卡路里 |
|---|---|---|---|
| 水 | 1.00 | 237 | 0 |
| 全脂牛奶 | 1.03 | 244 | 149 |
| 熟白米 | 0.74 | 175 | 205 |
| 生菠菜 | 0.13 | 30 | 7 |
| 花生酱 | 1.09 | 258 | 1517 |
| 橄榄油 | 0.92 | 218 | 1909 |
营养成分
一旦系统获得了以克为单位的重量估算,它会从全面的食物数据库中查找每克的营养成分。这些数据库通常来自权威来源,如USDA FoodData Central,并补充了来自食品制造商和地区营养数据库的数据。
Nutrola的数据库涵盖超过130万种食物,包括品牌产品、餐厅菜单项和具有完整宏观和微量营养素信息的通用食品。这种全面的覆盖确保一旦识别出食物项目和分量,营养计算就会非常精确。
准确性挑战及应对措施
尽管这些技术非常复杂,但从照片中进行分量估算仍然是一门不完美的科学。理解误差来源有助于设定现实期望,并突显该领域的持续改进。
已知的误差来源
相机角度变化: 同样的分量在照片拍摄角度不同的情况下看起来会有所不同。正上方拍摄的照片通常能提供最准确的估算,因为它们最小化了透视失真,但许多用户自然会将手机保持在一个角度。
被遮挡的食物: 被酱汁、奶酪或其他配料遮挡的食物无法直接通过视觉测量。系统必须根据可见的菜肴类型和典型准备情况推断隐藏的部分。
不规则容器: 非标准的碗、杯子和容器使得基于盘子的缩放不那么可靠。小分量在大碗中看起来与大分量在小碗中看起来不同,即使食物面积相似。
个体准备差异: 两个人制作的“一碗燕麦粥”可能使用的燕麦和水的量截然不同,导致相同的表观体积但不同的卡路里含量。
提高准确性的策略
多角度拍摄: 一些系统要求用户从多个角度拍摄照片,以便进行立体重建和更准确的体积估算。这显著提高了准确性,但增加了记录过程的摩擦。
用户反馈循环: 当用户称重食物并确认或纠正估算的分量时,这会生成训练数据,从而随着时间的推移改善模型。Nutrola鼓励用户偶尔使用厨房秤验证分量,以校准AI和用户自己的分量意识。
上下文先验: 系统可以利用上下文信息来细化估算。如果用户在特定的餐厅连锁店,系统可以使用已知的分量。如果用户经常记录特定的早餐,系统可以学习他们的典型分量。
基于置信度的估算: 先进的系统不仅提供一个单一的数字,而是提供一个置信范围。如果系统对分量不确定,可以将估算呈现为一个范围(例如,300到450卡路里),并要求用户提供额外信息。
当前准确性基准
来自国际图像分析与处理会议的研究表明,最先进的食物体积估算系统的平均绝对百分比误差在15%到25%之间。作为参考,研究表明经过训练的营养师从照片中估算分量的误差约为10%到15%,而未经训练的个体平均误差为30%到50%。
这意味着AI分量估算已经显著优于大多数人独立完成的效果,并且接近训练专业人士的准确性。结合速度和便利性,这使得AI辅助的追踪在大多数用户中相较于手动记录有了显著提升。
用户校准的角色
AI分量估算的一个被低估的方面是用户随着时间推移的校准作用。当用户记录餐食并偶尔提供修正时,系统会建立他们典型分量和食物偏好的档案。
对于常规用户而言,这意味着系统的准确性逐渐提高。如果你倾向于为自己盛更多的米饭,系统会学习相应地提高米饭的估算。如果你通常使用的油量少于标准食谱,系统也可以对此进行调整。
Nutrola利用这种个性化来提供越来越精准的分量估算,使用应用时间越长,估算越精准。新用户受益于人口水平的平均值,而经验丰富的用户则获得根据其特定习惯校准的个性化估算。
提高分量估算准确性的实用技巧
虽然AI处理了大部分繁重的工作,但用户可以通过遵循一些简单的指导原则来提高准确性:
- 尽可能从上方拍摄。 正上方的照片提供了关于食物表面积的最多信息,并最小化透视失真。
- 确保整个盘子在画面中。 盘子的边缘作为缩放的关键参考物体。
- 避免极端特写。 系统需要上下文来判断大小。仅显示食物而没有周围物体的照片没有比例参考。
- 在混合前拍照。 可见分开的食材的沙拉比混合在一起的沙拉更容易分析。
- 使用良好的照明。 阴影和低光可能会遮挡食物边界和深度线索。
- 偶尔确认或修正。 每周使用厨房秤验证AI估算有助于校准系统和你自己的直觉。
常见问题解答
AI分量估算的准确性与使用食品秤相比如何?
食品秤的准确性在1到2克之间,远比任何视觉估算方法精确。AI通过照片进行的分量估算通常在实际重量的15%到25%内达到准确性。然而,AI估算的便利性(仅需2秒,而使用秤则需30秒或更长时间)意味着更多人能够持续追踪,这在长期结果中往往比完美的精确度更为重要。
相机角度是否会影响分量估算的准确性?
是的,影响显著。正上方的照片(直接向下看盘子)提供最佳准确性,因为它们展示了食物的完整表面积,且透视失真最小。以45度角拍摄的照片是最常见的,仍能产生良好的估算。非常低的角度(接近桌面水平)是最不准确的,因为大部分食物被盘子的前缘遮挡。
AI能否估算液体如汤和奶昔的分量?
液体带来了独特的挑战,因为它们的体积由容器决定,而不是自身形状。AI系统通过识别容器类型和填充水平来估算液体分量。盛满的汤碗与盛到一半的汤碗的体积不同。当容器是标准形状时,准确性通常较好,但对于不寻常的容器则不太可靠。
为什么AI有时会高估或低估我的分量?
高估的常见原因包括密集的摆盘看起来比实际更大、装饰物增加了视觉体积但卡路里不多,以及使用大盘子使系统假设食物更多。低估的常见原因包括被其他食物遮挡的食物、看起来小但卡路里密度高的食物,以及不寻常的分量样式。当估算不准确时提供反馈有助于系统改进。
我需要配备LiDAR传感器的手机才能准确追踪分量吗?
不需要。虽然配备LiDAR的手机可以提供更准确的深度信息,但现代AI模型可以仅凭标准相机图像很好地估算深度。LiDAR设备与标准手机之间的准确性差异随着基于软件的深度估算的改进而缩小。Nutrola在任何现代智能手机上都能准确工作。
系统如何处理堆叠或分层的食物?
对于明显堆叠的食物,如煎饼或分层三明治,系统可以计算层数并从侧面轮廓估算厚度。对于隐藏层的食物,如千层面或卷饼,系统依赖于学习的组成模型,根据可见外部和菜肴类型估算典型的内部结构。