フード認識AIパイプラインの仕組み:写真から栄養データまで

フード認識AIパイプラインの全体的な技術的な流れを詳しく解説します。カメラ入力からCNN特徴抽出、食品分類、ポーション推定、栄養データベースの照会、最終的なカロリー計算までのプロセスを追います。

Medically reviewed by Dr. Emily Torres, Registered Dietitian Nutritionist (RDN)

ランチの写真を撮って、2秒以内にマクロの詳細が表示されると、その結果を当然のことのように受け取ってしまいがちです。しかし、その瞬時に見える結果の背後には、カメラキャプチャ、前処理、ニューラルネットワーク推論、分類、ポーション推定、データベース照会、最終的なカロリー計算という多段階のパイプラインが存在します。各段階は異なる問題を解決し、それぞれのアルゴリズムに依存し、次の段階に特定の出力を渡します。

この記事では、シャッターを押してから栄養ラベルが表示されるまでの全過程を追います。その過程で、各段階を機能させるためのアーキテクチャ、技術、エンジニアリングのトレードオフを紹介し、Nutrolaが精度と速度を業界の基準を超えて推し進めるために導入した独自の革新についても強調します。

ステージ1: カメラインプットと画像取得

すべては、ユーザーがカメラのファインダーを開いて食べ物の皿をフレームに収める瞬間から始まります。最新のスマートフォンは、12から48メガピクセルの解像度で画像をキャプチャし、ベイヤーフィルターモザイクを通じて色の強度値をエンコードした生のセンサーデータを生成します。デバイスの画像信号プロセッサ(ISP)は、このデータをデモザイクし、ホワイトバランスを適用し、ノイズを低減し、数分の一秒で標準のJPEGまたはHEIFファイルを出力します。

この段階に影響を与える2つのハードウェア機能があります。まず、最近のiPhone Proや一部のAndroidフラッグシップには、RGB画像とともに深度マップをキャプチャできるLiDARセンサーがあります。この深度データは、ポーション推定の際に価値があります。次に、時間飛行センサーを搭載したデバイスは、LiDARが利用できない場合でもパイプラインが活用できる粗い深度情報を提供します。

パイプラインは、RGB画像と、利用可能な場合には深度マップをペア入力として取り込みます。デバイスに深度センサーがない場合、パイプラインはRGBのみで進行し、後で単眼深度推定を使用して補正します。

このステージの主要出力

ユーザーの前にあるシーンを表す高解像度のRGB画像(オプションで深度マップ)。

ステージ2: 画像前処理

生のカメラ出力は、ニューラルネットワーク推論には適していません。前処理は、モデルが期待する標準化されたテンソルに画像を変換します。

リサイズとクロッピング

ほとんどのフード認識モデルは、アーキテクチャに応じて、一般的に224x224、384x384、または512x512ピクセルの固定解像度での入力を受け付けます。パイプラインは、アスペクト比を保持しながら、ターゲット解像度に画像をリサイズし、必要に応じてレターボックスやセンタークロッピングを適用します。バイキュービック補間が標準的なリサンプリング手法であり、バイリニアの代替手法よりも細かいテクスチャの詳細を保持します。

正規化

ピクセル値は0-255の整数範囲から浮動小数点数に変換され、その後、トレーニングデータセットのチャネルごとの平均と標準偏差を使用して正規化されます。ImageNetで事前トレーニングされたモデルの場合、標準的な正規化値(R、G、Bチャネルそれぞれの平均が[0.485、0.456、0.406]、標準偏差が[0.229、0.224、0.225])が適用されます。この正規化は、入力分布をゼロ周辺に中心化し、単位分散にスケーリングすることで、トレーニング中の勾配フローを安定させ、一貫した推論動作を確保します。

カラースペースと拡張アーティファクト

トレーニング中、パイプラインは広範なデータ拡張を適用します:ランダムな回転、水平反転、色のジッター、ガウスぼかし、カットアウトパッチなど。推論時にはこれらの拡張は無効になりますが、モデルはそれらがシミュレートする視覚的ノイズに対して不変であることを学習しています。これにより、温かいレストランの照明の下で撮影された写真と、冷たい蛍光灯のオフィスの照明の下で撮影された写真の両方が、信頼できる特徴表現を生成します。

このステージの主要出力

ニューラルネットワークのバックボーンに準備された、固定された空間次元の正規化された浮動小数点テンソル。

ステージ3: CNN特徴抽出

ここがパイプラインの計算的なコアです。深い畳み込みニューラルネットワーク(またはますますビジョントランスフォーマー)が前処理されたテンソルを処理し、画像の視覚的内容を後続の分類および検出ヘッドが解釈できる形式でエンコードした密な特徴ベクトルを生成します。

バックボーンアーキテクチャ

フード認識に効果的なバックボーンアーキテクチャはいくつかあります:

EfficientNetは、ネットワークの深さ、幅、入力解像度のバランスを取るために複合スケーリングを使用します。EfficientNet-B4およびB5は、計算コストがモバイルハードウェアで実行可能な範囲で強力な精度を提供するため、人気の選択肢です。Nutrolaは、独自の食品画像データセットでファインチューニングされたEfficientNet由来のバックボーンを採用しており、レイテンシとトップ1精度の間で好ましいトレードオフを実現しています。

**Vision Transformers (ViT)**は、画像を固定サイズのパッチ(通常は16x16ピクセル)に分割し、各パッチを埋め込みに投影し、埋め込みのシーケンスをマルチヘッド自己注意層を通じて処理します。ViTsは、長距離の空間関係を捉えるのに優れており、たとえば、緑の葉の隣にある茶色の円盤がハンバーガーパティであることを理解するのに役立ちます。ハイブリッドモデルのDeiT(データ効率的画像トランスフォーマー)やSwin Transformerは、純粋なViTsのデータ要件と計算コストを削減し、製品のフード認識システムに適したものにしています。

MobileNetV3は、デバイス上での推論のために最適化されており、深さ方向に分離可能な畳み込みとハードウェア対応のニューラルアーキテクチャ検索を使用します。これは、モデルがネットワークの往復なしに完全にデバイス上で実行されなければならないレイテンシクリティカルなパスでバックボーンとして機能します。

特徴ピラミッドネットワーク

食品アイテムは、単一の画像内で見かけのサイズが大きく異なる場合があるため(大きなピザの隣に小さなディッピングソースカップがあるなど)、パイプラインは特徴ピラミッドネットワーク(FPN)を使用して複数の空間スケールで特徴を抽出します。FPNは、バックボーンの中間特徴マップからの横の接続を持つトップダウンパスを構築し、小さなガーニッシュと大きなメインディッシュの両方を検出するのに同等に表現力のあるマルチスケール特徴マップを生成します。

このステージの主要出力

画像内の各領域の視覚的意味をエンコードしたマルチスケール特徴マップのセット(または分類専用タスクのための単一のプールされた特徴ベクトル)。

ステージ4: マルチラベル食品分類と検出

実際の食事は、通常1つの食品アイテムだけで構成されることはありません。典型的なディナープレートには、グリルしたサーモン、蒸しブロッコリー、玄米、レモンのくし形が含まれているかもしれません。パイプラインは、フレーム内のすべての異なる食品アイテムを検出、位置特定、分類する必要があります。

YOLOとDETRによる物体検出

パイプラインは、抽出された特徴マップの上に物体検出ヘッドを適用します。この分野では、2つのファミリーの検出器が支配的です:

**YOLO (You Only Look Once)**は、画像をグリッドに分割し、各グリッドセルに対してバウンディングボックスとクラス確率を同時に予測することで、単一のフォワードパスで検出を行います。YOLOv8とその後継モデルは、領域を提案してから洗練するのではなく、全画像を一度に処理するため、モバイル展開に特に適しています。Nutrolaは、世界中の料理を網羅する15,000以上の食品クラスで調整されたYOLO由来の検出ヘッドを使用しています。

**DETR (Detection Transformer)**は、物体検出をセット予測問題として扱い、トランスフォーマーのエンコーダ-デコーダアーキテクチャを使用して、アンカーボックスや非最大抑制なしで直接検出のセットを出力します。DETRは、重なり合う食品をより優雅に処理します。なぜなら、そのセットベースの損失は自然に重複予測を回避するからです。

混合料理のためのセマンティックセグメンテーション

サラダ、炒め物、穀物ボウルなど、異なる成分が重なり合っている複合料理の場合、バウンディングボックスは粗すぎます。パイプラインは、U-NetやDeepLabv3+アーキテクチャに基づくセマンティックセグメンテーションブランチに切り替え、画像内のすべてのピクセルを分類します。このピクセルレベルの分類により、明確な境界がない場合でも、混合料理内の各成分の割合を推定することができます。

信頼度スコアと候補ランキング

各検出には信頼度スコアが付与されます。パイプラインは、低信頼度の予測をフィルタリングするためにしきい値(通常はアプリケーションに応じて0.5から0.7)を適用します。トップの予測が不確かである場合、システムはユーザーに確認のためにトップ3から5の候補を提示することができ、手動入力を必要とせずにエラー率を低下させます。

Nutrolaの分類エンジンには、ユーザーの過去の食事、料理の好み、地理的位置、時間帯を考慮に入れるユーザーコンテキストモジュールが組み込まれています。ユーザーがメキシコ料理を頻繁に記録している場合、モデルが小麦トルティーヤとナンの間で不確かであれば、コンテキストモジュールがトルティーヤの確率を高めます。このパーソナライズレイヤーは、時間の経過とともに誤分類率を測定可能に低下させます。

このステージの主要出力

クラスラベル、バウンディングボックスまたはピクセルマスク、信頼度スコアを持つ検出された食品アイテムのリスト。

ステージ5: ポーションサイズ推定

グリルした鶏肉とご飯が皿にあることがわかっても、それぞれの食品がどれだけあるかを推定する必要があります。なぜなら、100グラムの鶏むね肉と300グラムの鶏むね肉では、300カロリー以上の違いがあるからです。

単眼深度推定

ハードウェアの深度センサーが利用できない場合、パイプラインはRGB画像から深度マップを推測する単眼深度推定モデル(一般的にMiDaSまたはDPTアーキテクチャに基づく)を使用します。これらのモデルは、オブジェクトの重なり、相対的なサイズ、テクスチャの勾配、消失点などの文脈的手がかりから深度を予測することを学習します。推測された深度マップは、LiDARデータよりも精度は劣りますが、皿の上の食品の三次元形状を近似するには十分です。

参照オブジェクトスケーリング

写真には固有のスケールがありません。パイプラインは、フレーム内の既知の寸法の参照オブジェクトを検出することでこれを解決します。皿(通常直径25〜27cm)、標準的なカトラリー、ボウル、さらにはスマートフォンの端などがスケールの基準となります。検出された皿の縁に楕円をフィットさせ、投影幾何学を適用して視点を推測することで、パイプラインはピクセル測定から実世界の距離を再構築します。

体積から重量への変換

食品の三次元形状が推定されると、パイプラインは食品のピクセルマスクに対して深度プロファイルを統合することで体積を計算します。その後、食品特有の密度テーブルを使用して体積を重量に変換します。葉物野菜1カップの重量は、フムス1カップの重量よりもはるかに軽いため、密度の照会は精度にとって重要です。

Nutrolaは、さまざまな調理状態(生、調理済み、混合、冷凍)の数千の食品をカバーする独自の密度データベースを維持しており、推定された体積をより高い忠実度でグラム重量に変換するために使用しています。

このステージの主要出力

検出された各食品アイテムの推定重量(グラム)。

ステージ6: 栄養データベース照会

各食品アイテムが分類され、重量が測定されると、パイプラインは栄養データベースを照会して、その食品の100グラムあたりのマクロ栄養素およびミクロ栄養素のプロファイルを取得します。

データベースアーキテクチャ

高品質の栄養データベースは、USDA FoodData Central、UK Nutrient Databank、そして数十カ国の国の同等の政府の情報源からデータを引き出します。これらの情報源は、標準化された形式で数千の食品アイテムに対する実験室分析された栄養値を提供します。

Nutrolaのデータベースは、政府の情報源を超えて、120万以上のブランド製品から提供されたデータ、パートナーシップを通じて検証された栄養情報を持つレストランメニューアイテム、そして多層の検証パイプラインを通過したコミュニティからの提出エントリを組み込んでいます。これにより、2百万以上の食品エントリを持つ統一されたデータベースが形成され、栄養データは一貫したスキーマに正規化されています。

ファジーマッチングとエンティティ解決

分類モデルは、「皮付きグリルチキンもも肉」のような食品ラベルを出力し、これを正しいデータベースエントリにマッチさせる必要があります。これは、同じ食品が地域や言語によって数十の名前を持つことがあるため、非自明なエンティティ解決の問題です。パイプラインは、埋め込みベースのセマンティック検索を使用して、最も近いデータベースエントリを見つけます。ファインチューニングされたテキストエンコーダは、予測された食品ラベルとすべてのデータベースエントリ名を同じベクトル空間にマッピングし、コサイン類似度で測定された最近傍を選択します。

複数の近いマッチが存在する場合(たとえば、「皮付きグリルチキンもも肉」と「皮を食べたローストチキンもも肉」)、システムは、視覚的手がかりで検出された調理方法に最もよく一致するエントリを選択します。

このステージの主要出力

各検出された食品アイテムの100グラムあたりの完全な栄養プロファイル(カロリー、タンパク質、炭水化物、脂肪、食物繊維、ミクロ栄養素)。

ステージ7: マクロとカロリー計算

最終的な計算ステージは単純な算術ですが、ここで上流の各ステージからのエラーが累積します。パイプラインは、100グラムあたりの栄養値を各食品アイテムの推定重量で掛け算し、すべてのアイテムの結果を合計して、総食事の内訳を生成します。

計算

各食品アイテムについて:

  • カロリー = (推定グラム / 100) x 100グラムあたりのカロリー
  • タンパク質 = (推定グラム / 100) x 100グラムあたりのタンパク質
  • 炭水化物 = (推定グラム / 100) x 100グラムあたりの炭水化物
  • 脂肪 = (推定グラム / 100) x 100グラムあたりの脂肪

これらのアイテムごとの値を合計して、食事全体の合計を生成します。

エラー伝播と信頼区間

各上流ステージが不確実性をもたらすため、Nutrolaは単一のポイント推定を絶対的なものとして提示しません。システムは、分類の信頼度スコアとポーション推定の不確実性を計算に伝播させることによって信頼区間を計算します。分類の信頼度が高いがポーション推定が不確かである場合(たとえば、食品が深いボウルに盛られていて体積が隠れている場合)、システムは信頼範囲を広げ、ユーザーにポーションの確認を促すことがあります。

この透明性は意図的なデザインの選択です。誤った精度感を提供するのではなく、Nutrolaは、基礎となる推定がそれに値する場合、範囲(たとえば、「420から510 kcal」)を示し、ユーザーが自分の摂取量を現実的に理解できるようにしています。

このステージの主要出力

食事の総カロリーとマクロ栄養素の内訳、オプションの信頼区間。

ステージ8: ユーザー表示とログ記録

最終ステージでは、結果がユーザーインターフェースに表示されます。検出された食品アイテムは、それぞれのカロリーとマクロ値と共にリストされ、食事の合計が目立つように表示されます。ユーザーは、任意のアイテムをタップして修正したり、ポーションを調整したりでき、これらの修正はパーソナライズモデルにフィードバックされ、将来の予測を改善します。

Nutrolaでは、表示には元の写真に対して検出された食品ごとにバウンディングボックスやセグメントハイライトが重ねられ、AIが何を特定したのか、どこにあるのかがすぐにわかるようになっています。この視覚的フィードバックは信頼を築き、エラーを簡単に見つけて修正できるようにします。

ログされた食事は、ユーザーの日々の栄養ジャーナルに保存され、カロリー、タンパク質、炭水化物、脂肪、追跡されたミクロ栄養素の合計に寄与します。データは、標準化された健康データAPIを通じてApple Health、Google Fit、その他の接続プラットフォームに同期されます。

このステージの主要出力

アイテムごとの栄養データ、視覚的オーバーレイ、健康プラットフォームへの同期を含む完全にレンダリングされた食事ログエントリ。

パイプライン概要表

ステージ コア技術 入力 出力
1. カメラインプット デバイスISP、LiDAR/ToFセンサー シーンからの光 RGB画像 + オプションの深度マップ
2. 画像前処理 バイキュービックリサイズ、チャネル正規化 生画像 正規化テンソル(例:384x384x3)
3. 特徴抽出 EfficientNet、ViT、Swin Transformer、FPN 正規化テンソル マルチスケール特徴マップ
4. 食品分類 YOLOv8、DETR、DeepLabv3+、ユーザーコンテキスト 特徴マップ バウンディングボックス/マスク付きのラベル付き食品アイテム
5. ポーション推定 MiDaS深度推定、参照スケーリング、密度テーブル RGB + 深度 + 食品マスク 食品アイテムごとの重量(グラム)
6. データベース照会 埋め込みベースのセマンティック検索、USDA/ブランドデータベース 食品ラベル + 調理手がかり 100グラムあたりの栄養プロファイル
7. カロリー計算 重み付き算術、信頼性伝播 グラム推定 + 栄養プロファイル 信頼区間付きの総カロリーとマクロ
8. ユーザー表示 UIレンダリング、健康データ同期API 計算された栄養データ 視覚オーバーレイ付きの食事ログエントリ

Nutrolaの革新が適用される場所

上記のいくつかのステージには、Nutrolaの実装に特有の革新が含まれています:

パーソナライズされた分類コンテキスト。 ステージ4のユーザーコンテキストモジュールは、過去の食事データ、料理の好み、位置情報、時間帯を使用して不確定な予測を解消します。これは、ほとんどのフード認識パイプラインでは標準ではなく、コンテキストフリーのモデルと比較して現実世界の精度に測定可能な改善をもたらします。

独自の密度データベース。 ステージ5の体積から重量への変換は、複数の調理状態にわたる食品をカバーする密度データベースに依存しています。一般的なシステムは、食品ごとに単一の平均密度を使用することが多く、調理済みと生の野菜や、排水された缶詰と排水されていない缶詰のようなアイテムに対して系統的な誤差を引き起こします。

信頼性を考慮した表示。 Nutrolaは、単一のカロリー数値を表示するのではなく、不確実性が存在する場合にはそれを示します。この正直なアプローチは、推定が不正確に見えるときのユーザーのフラストレーションを軽減します。なぜなら、範囲自体が特定のアイテムについてシステムが不確実であることを伝えるからです。

統一されたマルチソース栄養データベース。 ステージ6の200万エントリのデータベースは、政府の実験室データ、ブランド製品データ、検証されたコミュニティの提出を単一の正規化スキーマに統合し、パイプラインが単一の情報源が提供する以上の食品エントリにアクセスできるようにします。

修正からの継続的な学習。 ステージ8のユーザーによる修正は、定期的な再トレーニングサイクル中に分類およびポーションモデルにフィードバックされ、ユーザーベースが成長するにつれて精度が向上するフライホイールを作成します。

レイテンシとデバイス上の考慮事項

エンドツーエンドのレイテンシは、ユーザー体験にとって非常に重要です。パイプラインが2〜3秒以上かかると、ユーザーはそれを遅いと感じ、手動記録に戻る可能性があります。レイテンシを低く保つためのいくつかのエンジニアリング戦略があります:

モデルの量子化は、32ビット浮動小数点の重みを8ビット整数に変換し、モデルサイズを約4倍削減し、モバイルニューラルプロセッシングユニット(NPU)での推論を加速します。Nutrolaは、特徴抽出バックボーンと検出ヘッドの両方にポストトレーニング量子化を適用します。

デバイス上での推論は、計算集約的なステージ(特徴抽出と検出)に対してネットワークの往復を完全に排除します。AppleのCore MLやAndroidのNNAPIは、パイプラインがターゲットとするハードウェア加速推論パスを提供します。軽量なデータベース照会とカロリー計算のステージのみがサーバー呼び出しを必要とし、これらもオフライン操作のためにローカルキャッシュにフォールバックできます。

投機的実行は、ユーザーがシャッターボタンを押す前にカメラプレビューがアクティブな間に前処理と特徴抽出を開始します。これにより、ユーザーがシャッターボタンを押す頃には、パイプラインがすでにフレームを部分的に処理している状態になります。この技術は、知覚されるレイテンシを数百ミリ秒短縮します。

精度ベンチマークと実世界のパフォーマンス

Food-101、ISIA Food-500、Nutrition5kなどの標準的な学術ベンチマークでは、最新のパイプラインはトップ1分類精度を85%から92%の間で達成し、ポーション推定誤差は真の重量の15%から25%の範囲内です。実世界のパフォーマンスは、ユーザーが提出した写真がキュレーションされたデータセットよりもノイズが多いため変動します。悪い照明、部分的な隠蔽、異常な角度、珍しい地域料理などがすべて精度を低下させます。

Nutrolaの内部テストでは、50,000の実ユーザーフォトを保持したセットで、トップ1分類精度は89%、中央値のポーション推定誤差は18%です。トップ3の候補を考慮すると、分類精度は96%に上昇します。これが、修正インターフェースが代替提案を目立たせて表示する理由です。

これらの数値は、修正フィードバックループが実世界の使用からのラベル付きデータを蓄積するにつれて、各再トレーニングサイクルで改善し続けます。

よくある質問

写真から栄養データまでのパイプライン全体にはどれくらいの時間がかかりますか?

最新のスマートフォンで専用のニューラル処理ハードウェアを使用している場合、エンドツーエンドのパイプラインは通常1.0〜2.5秒で完了します。その大部分の時間は、ステージ3と4の特徴抽出と物体検出に費やされます。前処理とカロリー計算はほぼ瞬時に行われ、データベース照会はネットワーク条件やローカルキャッシュの使用に応じて50〜150ミリ秒しか追加されません。Nutrolaの投機的実行システムは、ユーザーがシャッターを押す前にカメラプレビューの処理を開始し、多くの場合、知覚されるレイテンシを1秒未満に短縮できます。

AI食品分類は手動記録と比較してどれくらい正確ですか?

AI食品分類は、標準ベンチマークで85%から92%のトップ1精度を達成し、トップ3精度は95%以上です。手動記録は、慎重に行った場合には理論的には正確ですが、発表された栄養研究によると、10%から45%の系統的な過小報告に悩まされます。実際には、AI分類と迅速なユーザー確認ステップを組み合わせることで、特に1日に複数の食事を記録し、入力疲労を経験するユーザーにとって、純粋な手動入力よりも一貫性があり、偏りの少ない結果が得られる傾向があります。

AIが食品アイテムを特定できない場合はどうなりますか?

最高の信頼度予測がシステムのしきい値を下回ると、パイプラインは優雅なフォールバックアプローチを取ります。トップ3から5の候補識別を提示し、ユーザーに正しいものを選択させるか、手動で名前を入力させます。このユーザー修正は記録され、次の再トレーニングサイクル中にトレーニングパイプラインにフィードバックされるため、すべての失敗が将来の予測を改善するためのトレーニング信号となります。時間が経つにつれて、これらの修正が蓄積されることで、システムの珍しい地域食品に対するカバレッジが着実に拡大します。

サラダやカレーのような混合料理に対してパイプラインは異なる動作をしますか?

はい。個々の成分が空間的に分離されていない混合料理の場合、パイプラインはバウンディングボックス検出からセマンティックセグメンテーションに切り替え、DeepLabv3+のようなアーキテクチャを使用してピクセルレベルの分類を行います。このピクセルレベルの分類により、混合エリア内の各成分の割合を推定できます。スムージーやピューレスープのように視覚的に分離が不可能な料理の場合、パイプラインはレシピベースの分解に依存します。料理の種類を特定し、次にレシピモデルを使用して、推定される成分の割合とそれらの組み合わせた栄養プロファイルを推定します。

深度センサーなしでポーション推定はどのように機能しますか?

LiDARや時間飛行センサーが利用できない場合、パイプラインはRGB画像から近似深度を推測する単眼深度推定モデル(MiDaSやDPTなど)を使用します。これらのモデルは、数百万の画像-深度ペアでトレーニングされており、皿の形状、影のパターン、テクスチャの勾配などの文脈的手がかりから食品の三次元形状を推定できます。システムは、特に皿やカトラリーのような既知のサイズの参照オブジェクトを検出してスケールを固定します。単眼推定はハードウェア深度センシングよりも精度は劣りますが、学習した深度手がかりと参照スケーリングの組み合わせにより、栄養追跡のための実用的な精度範囲内でポーション推定を維持します。

パイプラインは、単一の写真で複数の皿や食事を処理できますか?

物体検出ステージは、単一の皿や複数の皿に関係なく、任意の数の食品アイテムを処理できるように設計されています。YOLOおよびDETR検出ヘッドは、全画像をスキャンし、見つかったすべての食品アイテムに対して独立した検出を出力します。各検出アイテムは、ポーション推定およびカロリー計算のステージを独立して処理されます。最良の精度を得るために、Nutrolaは、各皿やボウルを個別に撮影することを推奨していますが、システムはそれが実用的でない場合でもマルチプレートシーンを優雅に処理します。

栄養追跡を革新する準備はできていますか?

Nutrolaで健康の旅を変えた数千人に参加しましょう!