[Hackathon] Calories Showing ー 食品写真からカロリー量を確認するアプリ
前置き
(https://www.worldbank.org/en/news/infographic/2020/01/29/the-crippling-costs-of-obesity)
現在、世界では栄養失調と過体重 (肥満)という2つの栄養問題を同時に直面しています。その中で、肥満人の率は急速に増加しています。
最近の統計により、1975年以来、肥満人は3倍になり、世界中で毎年約400万人が死亡しています。
2016年には、世界中で20億人以上 (44%) の大人が過体重または肥満でした。
(https://www.azumio.com/blog/nutrition/healthy-eating-101-food-journaling)
過体重の人は体にカロリーがたくさん摂取していますが、低体重の人は体体を維持するカロリーを十分に摂取していません。したがって、栄養士は、私たちがカロリ量ーをコントロールするために毎日のカロリーインとカロリーアウトの計画を立て、それによって栄養失調または過体重 (肥満)を改善し、健康な体を持っています.
(https://atlasbiomed.com/blog/best-food-diary-guide-2020/)
現在、技術の急速な発展、特に AI (人工知能) で、この技術を日常生活に適用することは避けられない傾向です。そして、この技術を【Fitness/Healthcare】に応用することも例外ではありません。
上記を基づいて、私たちのチームが「Calories Showing」アプリを開発するイデアを出しました。このアプリの主な機能は、携帯電話のカメラで撮影した食品のカロリ量を表示しすることで摂取カロリーを調整するのに役立ちます。
Calories Showingアプリ
利用技術
コンピューターとモバイルのデバイスの両方で使用できるように、私たちのチームは Javascript (NodeJS) の言語を使用してWebAppを構築することにしました。さらに、MySQLを使用してカロリーのデータを保存し、将来の追加機能の開発も容易にします。(ユーザー情報の保存など)
デプロイを容易にして、後で拡張しやすくするために、WebApp、MySQLに対してDocker を使用しています。
Google Cloud Vision
Google Cloud Vision API は、REST API を介して強い「pre-trained machine learning models」を提供します。開発者が、オブジェクト検出、顔認識、画像認識、分類、ラベル付け、印刷されたテキストまたはテキスト画像のテキスト抽出などの機能をアプリケーションに簡単に統合できるようにします。
今回の案件では、以下のような提供されているGoogle Cloud Vision APIの2つの機能を利用します。
- Label Detection: カテゴリのグループで、画像内のエンティティに関する情報を検出して抽出します。
- Object Localization:画像内の複数のオブジェクトを検出して抽出する
Google Cloud Visionから返された結果とデータベースから収集されたデータでユーザーは撮影された食品のカロリー量を知られます。
Google Cloud Visionの値段表
ユーザー数が少ない小規模なプロジェクトに適します。ユーザー数が増えると支払う金額も大幅に増加します。
→ そのため、Google Cloud Visionを依存するべきではありません。替えるソリューションが必要です。 (次の部分でで説明します)。
Calories Showingアプリのインタフェースと機能
カロリー量を分析したい画像を選択・撮影してください。
AIは選択・撮影された画像から食品を検出します。
また、検出できない食品を手で入力する機能もあります。
そのあと、それぞれの食品のカロリー量が表示されます。
未解決の問題と将来の開発方向
低精度
Google Vision Detect のデータセットは広いですが、食品については詳細ではないため、精度は低くなります。
例えば:上記の画像がキウィですが、Google Cloud Visionから返却された結果はFruit又はFoodになってしまいました。
精度を向上させるために、次の解決方法があります。
- Google Cloud Vision をFoodAI、LogMeal API などの食品分析のAI API のサービスに置き換えます。利点はGoogle Cloud Visionと同様の使いやすいが精度は高いです。欠点は価格が高くてAPIプロバイダーに依存されるため他の料理の新しいtrainingデータを追加できないことです。
- 食品のDeep Learning modelを独自に構築してtrainingします。 利点は高精度であり、必要に応じて料理の新しいtrainingデータを手動で追加できます。欠点はモデルを調査するのに時間がかかって、高い精度を得るには十分な大きさのデータセット (ラベル付きの画像) が必要です。
=>検討の後、以下のような解決策を選択することにしました。Google Cloud Vision を使用することと並行して、食品のDeep Learning model (Python、Tensorflow) を独自に構築してtrainingすることです。
ソリューションを組み合わせると、次のことができます。
- Google Cloud Vision API の料金の一部を減らします。
- 自作モデルの初期の限界を克服するには、データセットが小さく、最適なモデルが見つかっていないため、精度が高くありません。
- Deep Learning modelの構築の部分を別の部分に分けて、アプリの追加機能の構築に影響を与えないようにします。
- 自作のDeep Learning modelが目的の精度を達成したら、プロジェクト フローからGoogle Cloud Vision を削除します。
データベースに応じてカロリー数を決定する
食品がデータベースにない場合、その食品を選択する方はありません (手動入力でもできません)。
解決策: 検出されない場合は、アップロードされた画像をアプリのデータベースに追加したいかどうかをユーザーに聞くダイアログを表示します => ユーザーが同意した場合は、画像をストレージで保存します。その画像からカロリーの情報を調査調査してデータベースに保存し、データセットを収集してDeep Learning modelをtrainingします。
将来の開発方向
1/ 完全なアプリになるために機能を追加で展開します。 将来の追加機能は登録、ログイン、1日に必要なカロリー量の計算、カロリー不足/過負荷の警告、減量/増量計画、…
2/ AIの精度、Deep Learning modelを構築および最適化することを改善します。
そのため、私たちのグループは2つの小さなグループに分けられます。 アプリの機能の開発を担当するチームとDeep Learning modelの構築と最適化を担当するチームです。
参照資料
https://www.worldbank.org/en/news/infographic/2020/01/29/the-crippling-costs-of-obesity
https://cloud.google.com/vision