我的Side Project 每拍呷 | 蒐集資料篇

更新 發佈閱讀 8 分鐘

繼續做我的AI Side Project:「每拍呷-營養標示一拍就懂」🫡

✔️今日進度1/14:確認營養標示算法、蒐集資料、統整國民健康署DIRS、把熱量&鈉&糖&脂肪換算成白飯&醬油&方糖&沙拉油、暫時先用GRADIO介面做初步的測試。

先看了家裡的零食,確認營養標示算法,我決定要先直接算吃完一整包的量,以後如果行有餘力,可以讓用戶選擇份量,譬如說吃了一包、半包、1/4包。

各種算數學:

* 每日鈉總攝取量不宜超過2400毫克(即6公克鹽=1茶匙鹽=2又2/5湯匙醬油)(1茶匙=5cc;1湯匙=15cc)

(算到這裡覺得好驚人喔!原來一天吃超過一茶匙鹽就爆表了,那很多人應該也是每天爆表)

* 添加糖攝取量不宜超過總熱量的10%(1顆方糖5公克),以總熱量1200大卡為例,10%則為120大卡,因為1克糖是產生4大卡熱量,故建議糖攝取量為30g,不能超過6顆方糖。
依據食藥署食品營養成分資料庫,1杯700毫升的「全糖」珍珠奶茶,含糖量近62公克,一天一杯就超過每日糖攝取上限。

* 脂肪每日建議攝取量上限是男性70公克與女性55公克、飽和脂肪每日建議攝取量上限是男性23公克、女性18公克(男、女性分別以體重70、55公斤之靜態工作者估計),我先暫時算總脂肪就好。1份油脂=15粒開心果=1茶匙沙拉油5克。
後續測試先參考女性靜態工作者的55克,之後會考慮將用戶的性別加入設定。

* 簡易食物代換:

一份主食=1/2碗熟麵條=1片吐司=白飯1/4碗(約40克70大卡);
一平碗的白飯約有160公克、熱量280大卡。
我覺得代換成白飯應該比麵條跟吐司更直覺,所以就決定是白飯了!

然後統一規格,數字都一律四捨五入到小數點後一位;
之後我還要放警語,類似「本分析結果僅供參考、如有醫療相關問題請諮詢醫院」之類的

import math
import gradio as gr # 導入 Gradio 函式庫
# --- 營養素常數與換算表 ---
# 這些值是根據您提供的資訊整理而成,作為程式的判斷依據。
NUTRITION_CONSTANTS = {
    # 每日建議攝取量 (DRIs)
    "DRIS": {
        # 鈉:單位毫克(mg),以衛福部建議的2400mg為準
        "SODIUM_UPPER_LIMIT_MG": 2400,
        # 糖:單位公克(g),以1200大卡總熱量為例,10%熱量相當於30g糖
        "SUGAR_UPPER_LIMIT_G": 30,
        # 脂肪:單位公克(g),參考女性靜態工作者的55公克
        "FAT_FEMALE_UPPER_LIMIT_G": 55,
    },
    # 食物代換與比喻
    "CONVERSIONS": {
        # 白飯:1平碗約160克,280大卡
        "RICE_KCAL_PER_BOWL": 280,
        # 鹽與醬油:2400mg鈉(6g鹽) = 2.4湯匙醬油,得出1湯匙醬油約含1000mg鈉
        "SODIUM_MG_PER_TBS_SOY_SAUCE": 1000,
        # 脂肪與沙拉油:1茶匙沙拉油5克脂肪
        "FAT_G_PER_TSP_OIL": 5,
        # 糖與方糖:1顆方糖5公克
        "SUGAR_G_PER_CUBE": 5,
    }
}

def analyze_and_report_nutrition(
    serving_size_g_str: str, # 接收字串類型
    servings_per_package_str: str, # 接收字串類型
    sodium_per_serving_mg_str: str, # 接收字串類型
    sugar_per_serving_g_str: str, # 接收字串類型
    fat_per_serving_g_str: str, # 接收字串類型
    calories_per_serving_kcal_str: str # 接收字串類型
) -> str:

    try:
        # 將字串輸入轉換為浮點數
        serving_size_g = float(serving_size_g_str)
        servings_per_package = float(servings_per_package_str)
        sodium_per_serving_mg = float(sodium_per_serving_mg_str)
        sugar_per_serving_g = float(sugar_per_serving_g_str)
        fat_per_serving_g = float(fat_per_serving_g_str)
        calories_per_serving_kcal = float(calories_per_serving_kcal_str)
    except ValueError:
        return "### 輸入錯誤:請確認您輸入的都是有效的數字喔!" # 錯誤訊息也放大字體
    except Exception as e:
        return f"### 發生未知錯誤:{e}"


然後是計算是否有超過一天攝取量限制的部份,分成鈉、糖、脂肪三項,如果超過100%就回覆攝取已爆表:

# 加入警示判斷 
warnings = []
if sodium_percentage > 100:
warnings.append("⚠️ **注意:鈉攝取已爆表!**")
if sugar_percentage > 100:
warnings.append("⚠️ **注意:糖攝取已爆表!**")
if fat_percentage > 100:
warnings.append("⚠️ **注意:脂肪攝取已爆表!**")
if warnings:
message_parts.append("\n" + "\n".join(warnings))

emoji的部份也很重要!讓LINE的對話框訊息變活潑!

  • 綜合評分部份

用emoji加紅綠燈來表示,預設為😊笑臉。
如果任一營養素超過100%,則會變成😡生氣臉。
如果沒有生氣臉的情況,但有任一營養素介於**75%到100%**之間,則會變成😟哭臉。

  • ### 具體警示符號:

營養素超過100%的警示使用⚠️。
介於75%到100%的提醒,使用對應的食物符號(鈉🧂-->鹽罐,糖🍬-->糖果,脂肪🧈-->奶油塊)。

raw-image
來自我家那包洋芋片

來自我家那包洋芋片

明日進度:
因為今天提前做了明天原本要做的紅綠燈分類,明天改成針對成分表裡的食品添加物作分類,初步分類成:香料、防腐劑、乳化劑、色素、其他,用戶輸入文字內容後,可收到圓餅圖或其他視覺化分析內容。

加油!!

留言
avatar-img
留言分享你的想法!
avatar-img
Galing的腦內劇場
1會員
15內容數
學習AI的新手,在這邊分享學習筆記跟知識,希望文組轉戰AI也可以闖出一片天💪 大學學的是戲劇,擁有服務業12年經驗,擔任銷售顧問;2025.07開始學習python與AI商業應用,目標是讓職涯變得更自由有彈性,做出好玩有趣的東西! 💬喜歡打電動、看動畫、K-pop佛系追星,偶爾可能會出現這些主題的文章。
Galing的腦內劇場的其他內容
2025/08/19
在初步學習了Python、Gradio、Azure、SQL&NoSQL、LINE BOT之後,終於要開始做我的第一個AI Side Project--每拍呷-營養標示一拍就懂! 目標:兩周內完成(瑟瑟發抖)
Thumbnail
2025/08/19
在初步學習了Python、Gradio、Azure、SQL&NoSQL、LINE BOT之後,終於要開始做我的第一個AI Side Project--每拍呷-營養標示一拍就懂! 目標:兩周內完成(瑟瑟發抖)
Thumbnail
2025/08/16
首先讚嘆Azure的資源超級豐富💯 不過初學Azure時,複雜的介面+文件常常讓我感到滿頭問號; 一堆資源、服務又很多種,像是目前學了Cognitive Service、Translator、Speech、Vision、tts、Whisper…所以,寫程式時要記得抓對金鑰跟端點,還有記得檢查定價層
Thumbnail
2025/08/16
首先讚嘆Azure的資源超級豐富💯 不過初學Azure時,複雜的介面+文件常常讓我感到滿頭問號; 一堆資源、服務又很多種,像是目前學了Cognitive Service、Translator、Speech、Vision、tts、Whisper…所以,寫程式時要記得抓對金鑰跟端點,還有記得檢查定價層
Thumbnail
2025/08/15
還記得我第一次聽到「泡泡排序」這四個字時,腦海裡浮現的是肥皂泡泡跟珍珠奶茶的畫面。 結果打開講義一看 — — 什麼珍珠?沒有!也沒有肥皂泡泡!只有一堆數字在那邊跑來跑去,比較、交換、排列,最後由小排到大。 「這…到底跟泡泡有什麼關係?」
Thumbnail
2025/08/15
還記得我第一次聽到「泡泡排序」這四個字時,腦海裡浮現的是肥皂泡泡跟珍珠奶茶的畫面。 結果打開講義一看 — — 什麼珍珠?沒有!也沒有肥皂泡泡!只有一堆數字在那邊跑來跑去,比較、交換、排列,最後由小排到大。 「這…到底跟泡泡有什麼關係?」
Thumbnail
看更多
你可能也想看
Thumbnail
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
「沒有醜女人,只有懶女人。」但我已經是個成熟的大人了,偷懶和漂亮我全都要!!推薦幾款我的保養跟美妝愛用,讓你躺著就把美麗掙了! 雙11在蝦皮爆買了一波,來開箱分享我的懶人系保養及美妝品。趁雙12蝦皮購物一起用優惠囤好物!文末還有「蝦皮分潤計畫」讓你邊花錢邊賺零用錢!
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
嗨~各位不倒嗡,我是嗡嗡嗡的蜂聲 這個月點詩機主題是「購物清單」,想跟大家聊聊「慾望」這件事。 或許你點開這篇文章的時候,剛好在你心裡閃過類似的念頭 「我好想買那個喔。」 「這真的有必要嗎?」 「我是不是又開始亂花錢了?」 放心,我完全懂。 因為我也是在理性與慾望之間跳恰恰
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
Thumbnail
大家都知道要補充膠原蛋白,但步入中年後的我,肌膚的變化不只是「流失變快」,連狀態也開始慢慢改變。 後來才明白,原來膠原蛋白的補充不只要「吃對」,更要「吃對時間」。 就像肌膚保養會分成早晚程序,膠原的補充其實也需要「分時」進行,才能更貼近需求,效果也更好。 BEAUTY CLUB 讓我養成了「早
Thumbnail
沒有好不好,只有怎麼配!輕鬆配出你的每日均衡營養!
Thumbnail
沒有好不好,只有怎麼配!輕鬆配出你的每日均衡營養!
Thumbnail
趙鐸・安安您配角系 EP6|你看的不是料理,是你到底要不要離職:《料理新鮮人》
Thumbnail
趙鐸・安安您配角系 EP6|你看的不是料理,是你到底要不要離職:《料理新鮮人》
Thumbnail
過了多少日子,找回烹調的手感。
Thumbnail
過了多少日子,找回烹調的手感。
Thumbnail
好啦~記得追蹤郭師妙營養師的心靈雞腿加雞湯,讓營養師時時提醒你關於健康的點點滴滴,累積健康就靠郭師妙營養師💪 https://www.facebook.com/kuodietitian/
Thumbnail
好啦~記得追蹤郭師妙營養師的心靈雞腿加雞湯,讓營養師時時提醒你關於健康的點點滴滴,累積健康就靠郭師妙營養師💪 https://www.facebook.com/kuodietitian/
Thumbnail
記得追蹤郭師妙營養師的心靈雞腿加雞湯,讓營養師時時提醒你關於健康的點點滴滴,累積健康就靠郭師妙營養師 https://www.facebook.com/kuodietitian/
Thumbnail
記得追蹤郭師妙營養師的心靈雞腿加雞湯,讓營養師時時提醒你關於健康的點點滴滴,累積健康就靠郭師妙營養師 https://www.facebook.com/kuodietitian/
Thumbnail
分享我們與狗狗雞蛋的過年、嘗試更健康的飲食,以及和說書人的踏青。
Thumbnail
分享我們與狗狗雞蛋的過年、嘗試更健康的飲食,以及和說書人的踏青。
Thumbnail
每天晚餐吃什麼?每天晚餐煮什麼?
Thumbnail
每天晚餐吃什麼?每天晚餐煮什麼?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News