iT邦幫忙

2025 iThome 鐵人賽

DAY 30
0
自我挑戰組

從零開始的AI學習之路:非本科轉職的30天挑戰記系列 第 30

D30 | 我用AI打造「每拍呷」LINE BOT的心路歷程

  • 分享至 

  • xImage
  •  

先恭喜自己連續30天寫作挑戰成功/images/emoticon/emoticon07.gif

第三十天,分享我這次用AI打造「每拍呷」LINE BOT的心路歷程
會想要做這個主題,是因為外食與超商食品成為日常,當我們拿起包裝,盯著密密麻麻的營養標示,應該常常一頭霧水,長輩族群也可能因為字太小而放棄查看。我希望透過一個簡單的 LINE BOT,讓營養標示不再是難以理解的天書,變成讓每個人都能輕鬆掌握的健康指南,這是我打造 「每拍呷-營養標示一拍就懂」 這個 AI Side Project 的初衷!

為什麼選LINE BOT?

在構思這個專案時,我首先思考的是「使用者會在哪裡、如何使用它?」手機是我們最常接觸的裝置,而 LINE 在台灣幾乎是國民級的通訊軟體,而且是我身邊的家人、朋友都會優先使用的介面。
將服務建構在 LINE 上,使用者不需要額外下載 APP,只要加入好友就能立即使用,大大降低了使用門檻,將複雜的 AI 技術融入使用者最熟悉的介面。

我觀察到,大部分人看營養標示的場景都是在賣場或超商,這時一手拿著商品,另一手操作手機,如果操作流程太複雜,使用者很可能就放棄了。因此,我將核心功能設計得極為簡單:

  1. 初次使用: 只需要輸入「生理性別、身高、體重」,這些基本資訊是計算個人化建議的基礎,後續要計算BMI跟每日熱量攝取上限。
  2. 日常使用: 只需要「拍下營養標示照片」,並「輸入份量」,系統就能立即給出分析與建議囉!
  3. 懶得用看的也可以聽語音檔,30~60秒內就可以掌握資訊!還有建議吃完這項食品需要走路多久就能消耗的時間,也蠻適合想要控制熱量的族群。

這樣的流程設計,讓使用者可以在最短的時間內獲得最有價值的資訊,符合現代人追求效率的習慣。

技術架構

整個技術架構核心基本上是圍繞著Google提供的服務:

  1. LINE BOT 與後端串接:
    我使用 Python 作為後端語言,並搭配 Flask 框架。LINE BOT 接收到使用者訊息(文字、圖片)後,會將其發送到我的後端伺服器。伺服器再根據訊息類型進行不同的處理。

  2. AI 核心:Gemini API 辨識與分析
    當使用者傳送營養標示圖片時,將圖片發送到 Gemini API。Gemini能夠直接辨識圖片中的文字,並理解其結構,(一開始有試過OCR辨識,雖然能辨識出文字,但是AI沒辦法理解結構,例如:可能抓到「蛋白質」、「每份」、「14公克」,卻沒辦法串起來。但是Gemini API就能理解結構,故選擇使用這項服務)

程式中需要給 Gemini 清晰的 Prompt:

「請你辨識這張圖片中的營養標示,並以 JSON 格式回傳以下資訊:每份、熱量、蛋白質、脂肪、碳水化合物、鈉、糖,以及其他重要營養素的數值。」

Gemini 會快速解析圖片,並回傳結構化的數據。接著,後端會將這些數據進行處理,並結合使用者的生理資訊(身高、體重、性別),計算出個人化的分析結果。

  1. 個人化建議與 TTS 服務:
    計算出分析報告後,根據使用者的需求與數據,生成個人化的建議,並代換成易懂的食物,例如:相當於一碗白飯、兩顆方糖、三茶匙油、4公克鹽巴。如果某個食品的鈉含量或含糖量過高,會計算出比例,提醒使用者注意。

https://ithelp.ithome.com.tw/upload/images/20250904/20177974osWRczN5Zf.png

為了讓體驗更佳,我整合了Google的 TTS (Text-to-Speech) 服務。這項服務能將分析報告的文字轉換為音檔,並回傳給使用者。這對於視力不佳或不方便看手機的使用者來說,是一項非常有價值的輔助功能。想像一下,在賣場裡,你只需要戴上耳機,就能聽到營養標示的語音分析,這大大提升了使用的便利性。

https://ithelp.ithome.com.tw/upload/images/20250904/20177974YU8e74XguQ.png

  1. 資料庫管理:Firestore 與 Firebase
    為了儲存使用者資料與音檔,我選擇了Firestore這個雲端資料庫,非常適合存取使用者 ID、生理數據、等資料。它的即時同步特性也讓資料管理變得非常方便。

此外,我用Firebase 的 Cloud Storage來儲存生成的音檔。當Gemini生成文字報告,後端會將其產生語音檔並上傳到 Cloud Storage,然後產生一個公共連結,再將此連結回傳給 LINE BOT,讓使用者能夠直接播放。

資料庫這段過程算是自行摸索的,一定還有可以做得更好的地方!

挑戰與克服:從技術到使用者體驗的磨練

這個專案的開發過程並非一帆風順,我遇到了許多挑戰,而解決這些問題的過程,也讓我對專案有了更深的理解。

  1. 照片辨識失敗的備案

解決方案: 我在 Prompt 中增加了更多的上下文與容錯機制,例如:「如果無法辨識特定數值,請提示使用者文字輸入。」 下方圖文選單也可以按「文字輸入營養標示」,LINE BOT會逐項詢問。

  1. 個人化建議

單純的營養分析只是第一步,如何給出有價值的個人化建議才是關鍵。因此才會需要用戶輸入生理性別、身高、體重。

解決方案: 我在後端設計了更複雜的計算邏輯,這是程式碼佔最大比例的部份,像是我有參考了衛福部的DIRs建議攝取量標準、參考每個營養素提供的熱量與食物代換、參考了以時速4公里散步能消耗的熱量...等等。
未來,我還會考慮加入更多個人化標籤,例如「高血壓患者」、「糖尿病患者」、「素食者」等,讓建議更貼近使用者的真實需求!

  1. UI/UX考量
    UI/UX (使用者介面/使用者體驗)也是我這次主要考慮的一部份,因為我希望各個年齡層都能輕鬆使用。關於這個部份雖然所學不多,但就多多運用LINE本身提供的介面,還是有很多可以發揮的空間。
    例如:Flex Message的Carousel可以向左滑動看第二頁資訊,讓資訊更明瞭。還有圖文選單方便快速查找功能。

https://ithelp.ithome.com.tw/upload/images/20250904/20177974CM8YqC3T1u.png

結語

「每拍呷-營養標示一拍就懂」這個專案,對我來說既是一個技術挑戰(畢竟才剛學程式語言兩、三個月),也是一次將所學應用於生活的實踐,AI可以跟我們的日常習慣結合,創造出更大的價值。
從最初的一個小想法,到現在擁有一個不完美但可行的技術架構,這段旅程充滿了學習與成長,也看到很多人做出厲害、有趣的專案!

雖然這樣講有點老套,但是這次的經驗真的是「學中做、做中學」,像是兩週前我還在驚訝別人怎麼把「部署」講得如此家常便飯(佩服),沒想到兩周後我也硬是逼自己把頭洗下去,然後依然覺得部署好難(誤)。

這個領域有趣的事情很多,當然還有太多、太多要學習的,希望自己能一直保持空杯心態、虛心學習,有機會繼續上來分享學習心得。/images/emoticon/emoticon41.gif


上一篇
D29 | 我的Side Project 每拍呷--更新流程架構篇
系列文
從零開始的AI學習之路:非本科轉職的30天挑戰記30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言