iT邦幫忙

2026 iThome 鐵人賽

DAY 30
0

一、前言

30 天前,府裡只有一個黑客松做的 prototype,
和 Day1 寫下的三個期許:
語音辨識、互動遊戲、介面設計。

這段時間,陸續請來好幾位俠客,也正式聘了一位師爺;
最後,還帶著平板走出府外,請長輩親自試玩。

今天是鐵人賽的最後一天,
讓我們一起回頭看看:

Day1 的三個期許,做到了哪些?
府裡請來的幫手,各自負責什麼?
還有哪些事,還沒做完?


二、30 天走過的路

篇 主題 做了什麼
Day1~6 認識需求 失智症、口腔機能、口腔體操、功能清單
Day7~11 Google MediaPipe Face Landmarker 臉部特徵點、表情係數,橋接進 Flutter
Day12、Day16~17 Google Cloud Speech-to-Text 實測單音、繞口令,接上同步與串流辨識
Day13~15 Cloud Functions for Firebase 保管金鑰、驗證 App,替 App 呼叫雲端服務
Day18~20 Google AI Studio 試模型:看、寫、畫、唱、拍、說、聽、聊
Day21~23 Gemini API 平安進 App:一起說畫、我們的好時光、家中尋寶
Day24~26 Google MediaPipe Pose 等四個模型 比較四個模型,請 Pose 進 App
Day27~28 Google Stitch 長輩友善檢查表、DESIGN.md、MCP,改版介面
Day29 使用者實測 花博、新莊社大、台灣失智症協會的回饋

三、府裡的幫手

(一)各自負責什麼

服務 文章裡的角色 在哪裡執行 負責的事
Google MediaPipe Face Landmarker 請進府的俠客 手機上 健口操:判斷嘴型
Google Cloud Speech-to-Text 住在山上、聞聲錄字的俠客 雲端 聽發音:健口操、語音小遊戲
Cloud Functions for Firebase 山腳下的鏢局 雲端 保管金鑰、發權杖、畫圖、看照片
Cloud Run 驛站 雲端 串流語音辨識的轉接
Gemini 師爺,App 裡叫「平安」 雲端 玩AI:一起說畫、我們的好時光、家中尋寶
Google MediaPipe Pose Landmarker 請進府的俠客 手機上 暖身動作、跟著音樂動一動
Google Stitch 妙筆俠客 雲端 介面設計:設計稿、DESIGN.md

鏢局門口還有守衛(App Check)、裡面有保險箱(Secret Manager),見 Day15。

(二)架構與角色

把這些幫手放在一起看,就是 App 的架構。
封面上的角色,都是台灣的動物~


四、技術回顧:Day1 的三個期許

(一)語音辨識:Google Cloud Speech-to-Text

Day1 寫下的困難是:
地端的 sherpa-onnx,辨識單音「怕、踏、卡、啦」不太穩定。

重點實作

  • 兩種辨識,兩條路(Day17):
    同步辨識,App 錄完整段交給 Cloud Functions,呼叫 STT V2 的 Recognize;
    串流辨識,callable 不能持續上傳聲音,所以另開 Cloud Run,
    App 用 WebSocket 每 100 ms 送一段 PCM,Cloud Run 再用 gRPC 轉給 STT。
  • 語音調整(Day16):
    用提示詞先提醒模型留意「怕、踏、卡、啦」;
    回傳的同音、近音字,再用別名映射到同一個指令。
  • 守衛(Day17):
    自己開的 Cloud Run,要在程式裡用 verifyToken() 驗證 App Check。

實測 Cloud STT 的結果:

項目 結果
小遊戲(怕、踏、卡、啦) Chirp 3+語音調整,整場沒有辨識錯誤
「怕」念八次 只留下五個字;官方回覆是刻意的保護機制
繞口令 正常朗讀可以用;念錯的地方沒有完整保留
費用 照錄音長度計費,每分鐘 US$0.016

去年只玩過 Chirp 1,今年體驗到 Chirp 3 很大的提升。
加上語音調整(Adaptation)後,小精靈乖乖聽話吃金幣、沒有亂跑,真的很感動XD
還實作了即時串流的雲端語音辨識,這是今年很大的收穫。

(二)互動遊戲:Gemini API

Day6 的構想 現在的 App 篇
一起畫畫:家人用語音一起創作 一起說畫:大家說,平安畫 Day22
一起大冒險:用家庭照片出題 我們的好時光:看照片聊天,做成卡片 Day23
一起大冒險:大家一起尋物 家中尋寶:找到寶物,給平安看 Day23

重點實作

  • 先面試再聘用(Day18~20):
    在 AI Studio 把 Day3 的照護原則寫進系統指令、
    用結構化輸出指定 JSON、用 Compare 並排比較模型。
  • 暫時性權杖(Day21):
    API 金鑰留在 Secret Manager;
    Cloud Functions 把守則組好、鎖進暫時性權杖,
    App 拿權杖直接連 Live API,App 裡沒有金鑰。
  • VAD(Day21、Day29):
    停頓 1.2 秒才算說完、endOfSpeechSensitivity 設 LOW,
    給長輩想的時間;平安說話時,不被現場的聲音打斷。
  • 函式呼叫(Day22):
    畫圖、修圖是 Live 的工具;
    Cloud Functions 用 Interactions API 呼叫 Nano Banana 2,等圖時平安不開口。
  • 看照片(Day23):
    好時光的照片,先請 Gemini 寫成文字、家人確認過才交給平安;
    家中尋寶,Live 直接看那一張,一張 266 個影像 token。

第一次在 AI Studio 打開 Live API 即時聊天,
真的有一種走進新時代的感覺,還能開攝影機、分享螢幕。
身為開發者,知道這些功能已經推出;
但以使用者的角度第一次用,那種感受很明顯:哇,即時互動,好玩!XD

9 月 22 日推出的 Voice replication,複製自己的聲音,也是很酷的體驗XD

(三)介面設計:Google Stitch

Day27 先定了一張長輩友善檢查表:

  • 字夠大、對比夠
  • 按鈕夠大、分得開
  • 一次一件事
  • 圖示配文字
  • 對錯不只靠顏色

再請 Stitch 改版快問快答、吃金幣、俄羅斯方塊。

重點實作

  • 提示詞(Day27):
    Idea、Theme、Content、Image 四段,檢查表寫進 Theme。
  • DESIGN.md(Day28):
    Stitch 產生的設計規則,上半部是 token,下半部寫為什麼;
    色票對到 Flutter 的 ColorScheme。
  • MCP(Day28):
    Claude Code 透過 Stitch 的 MCP 伺服器產生、修改畫面;
    App 的截圖,用 CLI 上傳當參考圖。
  • 數字自己再算(Day27~28):
    用 WCAG 公式重算對比;
    DESIGN.md 寫 6.3:1 的按鈕綠,重算是 6.17:1,改用更深的 #005445(8.92:1)。

這段我覺得很帥XD:
按下 Variations,畫布上就長出三個 App 畫面,
一筆一筆、一塊一塊,把版面佈局完成,當下真的被驚艷到~


五、技術回顧:期許之外

(一)健口操:Google MediaPipe Face Landmarker

黑客松的 prototype 就用了 Face Landmarker;
Day7~11 把它從頭拆開來看。

  • 三種輸出(Day9):
    478 個臉部特徵點、52 個表情係數、4×4 的臉部變換矩陣。
  • 自己橋接(Day10):
    App 自己寫 plugin(face_mesh),
    MethodChannel 下開始、停止的指令,EventChannel 持續推送偵測結果,
    相機畫面用 PlatformView 顯示。
  • 從點到動作(Day11):
    特徵點要先查編號圖,才知道哪一點是嘴角、哪一點是下唇;
    cheekPuff 一直是 0,嘴唇與臉頰體操改用計時引導。
  • 左右(Day11):
    *Left 是畫面裡那張臉自己的左邊,鏡像會對調;
    送進模型的影格不鏡像,左右就是本人的左右。

從特徵點取值、Flutter 橋接原生,再找出適合的基準與判定標準,
真的學習很多,然後踩坑也開心XDD

(二)動一動:Google MediaPipe Pose Landmarker

Day6 的功能清單裡,還寫了 Pose Landmarker。

  • 四個模型比一比(Day24~25):
    Hand 21 點、Gesture 認得 7 種手勢、Pose 33 點、
    Holistic 一次給 553 點;長輩坐著,點位都穩。
  • 請 Pose 進府(Day26):
    同一個 plugin 加 Pose 模式,共用前鏡頭,不另外橋接。
  • 座標變成動作(Day26):
    肩寬當尺、坐好 3 秒跟自己比;
    看不清楚就不判斷,兩段門檻防抖動。
  • 兩個人一起做(Day26):
    照螢幕左右編號,各自打勾。
  • 實機速度(Day26):
    Galaxy A70 一秒能看約 8 張畫面、iPhone 約 9~21 張;
    舉手、彎腰、拍手,都來得及判斷。

做了很多實測、拍了很多照片,
自己也跟著音樂動一動XD

(三)串起前後端:Cloud Functions for Firebase

Day13~15 開了一間鏢局,
後面的 Cloud STT、Gemini,都靠它和 App 接上線。

  • callable(Day14):
    自家 App 呼叫,用 onCall,只收 JSON;
    App 端指定的區域要跟函式一致,部署後記得設清理政策。
  • App Check(Day15):
    Android 用 Play Integrity、iOS 用 App Attest、模擬器用偵錯權杖。
  • Secret Manager(Day15):
    金鑰用 defineSecret 宣告後才讀得到;
    程式碼和 App 裡,都沒有金鑰。
  • 預算提醒(Day13):
    預算提醒不會暫停服務,花費要自己盯著。

這一段,讓我對 App 接後端,有了更多了解~
金鑰收進保險箱、門口有守衛,App 裡不用放任何金鑰。


六、回報給官方的 issue

實測時,遇到一些文件還沒提到或結果和預期不太一樣的地方;;
我試著把實測結果整理成 issue 回報給官方:

Issue 篇 回報的內容 官方的回應
Cloud STT #567868709 Day16 「怕」念八次,只留下五個字 Chirp 2、Chirp 3 刻意的保護機制,目前沒有參數可以調整
MediaPipe #6368 Day11 表情係數的 *Left/*Right,以誰的左右為準 採納建議,在 Face Landmarker 指南和原始碼註解補上說明
MediaPipe #6376 Day25 Hand、Gesture 的左右手,以誰為準 標為文件問題,維護者回覆正在處理(10/14)

#6368 更新的那天,看到官方文件多了說明,是由自己提出的,
真的滿開心XDD


七、雲端與手機上的費用

Day17 的心得提過:
以個人開發來說,長期營運費用,可能會是一筆不小的負擔。

這 30 天放進 App、或實測過的功能,費用整理如下:

功能 在哪裡執行 費用 篇
健口操的嘴型判斷 手機上(Face Landmarker) 不按次計費 Day11
暖身、跟著音樂動一動 手機上(Pose Landmarker) 不按次計費 Day26
發音辨識 雲端(Cloud STT) 每分鐘 US$0.016 Day17
一起說畫 雲端(Live API+Nano Banana 2) 實機一場約 NT$22~32 Day22
我們的好時光 雲端(Live API+插畫) 一場 NT$9.60(約 4 分 23 秒) Day23
家中尋寶 雲端(Live API,看 8 張畫面) 一場 NT$11.62(約 5 分 10 秒) Day23

八、Day29:交到長輩手上

Day29 帶著 App 走出府外,一共三次實測:

日期 地點 對象
9/5 圓山花博(黑客松現場) 2 位長輩
10/12 新莊社區大學 4 位,50~60 歲
10/13 台灣失智症協會 2 位副秘書長
  • 新莊社大:
    勾最多的是跟著音樂動一動(3 位);
    七題「用起來怎麼樣」,沒有人勾哭臉,4 位都說下次還想玩。
  • 台灣失智症協會:
    玩AI 的三個活動,兩位都勾喜歡;
    建議先確定目標受眾,失智族群可以考慮活動分級,再加上引導、鼓勵。
  • 新莊社大實測後,10/13 先調整的:
    家中尋寶加題庫、平安開場自我介紹、健口操加上我自己錄的口令、
    平安回話快一點、說話不被打斷。

Day27 的檢查表看的是畫面;
實測多看到了聲音、節奏、引導、動作幅度、發音、對象這些面向。
發現:每個人喜歡的活動,都不太一樣。


九、感謝

30 天的鐵人賽,到這裡告一段落。

很感謝今年還能再參加 iThome 鐵人賽。

謝謝主辦方持續舉辦,
讓大家有一個舞台,記錄自己的成長、看見每一位參賽者的努力;
讓每位開發者心中的想法,有實踐、圓夢、被看見的機會。

謝謝 Google Cloud 提供多元的賽道主題,讓 Build on Google AI 可以實踐在許多面向:
包含未來教育(AI for Education)和科技永續與社會創新(AI for Social Goods)。
謝謝你們關注這些面向,讓不同的需求與議題被看見;
謝謝你們提供學習資源,讓開發者在被支持的環境裡,好好探索、實踐技術。

很多內容,我可能還沒有摸透;但這段過程真的收穫很多。
謝謝前輩們開發出這麼多優秀的工具,為這個時代帶來很多新的可能,
讓我有機會站在前輩們的肩膀上,
看見更多需要關注的角落,試著找出可能的解方。

謝謝 Day29 幫忙試玩的長輩和使用者,
謝謝新莊社區大學、弘道老人福利基金會、台灣失智症協會,
也謝謝回覆 issue 的官方團隊,和一路陪伴的你。

健口動一動是開源專案:
https://github.com/NamoAmitabhaTW/kenkou-app
目前 repo 是 9/25 的版本,大約到 Day11;
Day12 之後的功能,還在本機測試環境,後續技術選型定案,會再同步上來。

文章內容如果有錯誤,麻煩前輩們提點~大大感謝!


十、期許

(一)還要繼續努力的地方

30 天完成了不少實作,但也有一些需要繼續努力的地方:

  • 發音辨識:
    雲端還是地端,還沒有定案;
    念八次的計次、繞口令念錯的地方,還沒有解方;
    「怕、踏、卡、啦」對長輩可能不好發音(Day29)。
  • 家中尋寶:
    判斷寶物還不穩定(Day23)。
  • 持續使用:
    不同的使用者,喜歡的活動不一樣;
    要請更多長輩用過,才能做出長輩願意持續使用的訓練 App。
  • 有溫度的介面:
    開發時間有限,介面經過 Google Stitch 的巧手,
    已經跟 prototype 很不一樣;
    但要做到「有溫度」「長輩看了歡喜」,還需要持續改善。
  • 營運費用:
    必須誠實地說,Google Cloud、Gemini Live API、Nano Banana 都非常優秀;
    但目前的我,沒有能力負擔 App 營運所需的服務費用,讓所有長輩免費使用。

所以接下來,
也會看看其他可行的落地方式,或是先只做開源地端的 Google MediaPipe 相關功能。

(二)洋流慧聚

從黑客松到鐵人賽,我也曾想過:
這真的對長輩有幫助嗎?

就在這個念頭冒出來的那天,
我在脆(Threads)上看到一篇貼文:

一位兒子發文說,他快沒有媽媽了…
他的母親是重度失智患者,貼文的影片,是臥床的母親。

我當下被觸動了,很「捨不得」。

捨不得,貼文裡說的長年照顧;
捨不得,這個家庭即將面臨的道別。

所以,哪怕健口動一動現在只踏出很小的一步,
還是一個很不成熟的 App,
我也想繼續做下去,真的把它落實。

我會努力讓這款 App 上架,讓長輩有機會用到。

長輩對 3C 可能很陌生,但我仍然懷抱一個小小的盼望:
哪怕只有一位、幾十位長輩也好,
如果真的對口腔機能和延緩認知退化有幫助、也願意持續使用,
我就很開心、很感謝了。

直播裡,有一句話讓我印象很深刻:

「最短的捷徑,是繞遠路。」

漸漸明白:

從初衷走向願景,中途可能會有波折、需要繞路;
繞路,是因為記著初衷、繼續向前。

2026 年,世界仍有許多動盪:
烏俄、中東地區的戰爭,非洲的伊波拉疫情,
南韓的人民走上街頭抗議。

台灣也同樣面臨許多困境;
但我們仍存有希望與光明,那是一種溫暖而堅定的信念。

Day2 寫過「失智友善社會,每個人都能做的事」:

在街上遇到疑似迷路、神情困惑的長輩,耐心詢問、陪伴,
必要時協助聯繫警察,就是實踐「失智友善」的精神。

在別人需要的時候伸出手,
就像沒有變裝的超人;
這樣的身影,在台灣各處都看得到。

如同,

觀世音菩薩「千處祈求千處應」:
哪裡有人需要,就予以幫助。

不論超人、菩薩,
我覺得這都是台灣人很特別、很可貴的精神展現。

我們每一個人都是小水滴,
因為溫暖的信念,慧聚成洋流。

謝謝每一位為世界、為台灣付出的前輩,
也謝謝每一位為了溫暖信念、持續前行的小水滴。

相信,

日頭透光、陽光灑下,照耀小水滴,
就會看見美麗的彩虹。

期許自己能成為庇蔭他人的一棵樹、一片雲;
希望台灣這片土地上的大家,都能如風般自由、自在。

願我們都是一道光,點亮自己、照亮他人,
讓世界看見台灣,也讓世界因台灣而明亮。

感謝有緣看到這邊的你~
希望佛菩薩也祝福你:🌟健康平安 順遂幸福🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️


上一篇
使用者實測與改善方向
系列文
Build on Google AI :長者照護 —— 口腔機能訓練 與 延緩認知退化 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言