- 主題:Agent - 智慧城市
- TA:視覺障礙族群 — 隧道視野、中心黑點(視野缺損)、全盲
- 痛點:搭公車時看不清/看不到公車號碼與到站時間(站牌資訊)
- 載具:手機 Web(瀏覽器,不做原生 App)
- 比賽限制:只能用 Google 生態(Vertex AI / Gemini),不可用 AWS Bedrock、OpenAI、Anthropic 等競品
- 使用者拍下公車站牌照片
- 後端呼叫 Vertex AI Gemini 多模態辨識,取出公車號碼、到站時間、摘要
- 依照使用者的障礙類型客製化呈現:
- 不是原地 AR 覆蓋(像 Google 翻譯那樣貼在原文字位置)
- 是把資訊重新繪製到使用者「看得到的安全區」(例如中心黑點的人,資訊要放在畫面上緣而不是正中央)
- 全盲使用者:跳過畫面,純語音播報(Cloud Text-to-Speech)
- 第一次使用時,選擇障礙類型 + 簡單校準安全顯示區 + 字體大小/語音開關
- 存進 Firestore(
userscollection) - 之後每次使用,後端自動讀取這個人的偏好,不用重選
- 乘客在站牌拍照辨識出公車號碼後,可按「通知司機」
- 後端把警示寫進 Firestore(
bus_alertscollection:路線、站名、障礙類型、時間) - 司機端頁面(另一個網頁)選定路線後,每 3 秒輪詢後端 API,有新警示就跳出提示「XX路線有視障乘客在等車」
| 功能 | 技術 |
|---|---|
| 圖像辨識+摘要 | Vertex AI Gemini 2.5 Flash(多模態) |
| 語音輸出 | Google Cloud Text-to-Speech |
| 資料庫(使用者偏好、司機警示) | Firestore |
| 後端 | Python Flask |
| 前端 | 純 HTML/JS 手機網頁,localStorage 存裝置 user_id(不做登入系統) |
| 部署(加分項,時間夠再做) | Cloud Run |
POST /api/analyze— 上傳照片,回傳辨識摘要+依偏好客製化的呈現方式GET /api/profile/POST /api/profile— 讀寫使用者偏好POST /api/notify_driver— 乘客通知司機GET /api/driver_alerts?route=X— 司機端查詢該路線的警示
檔案位置:hackathon_smartcity/(pipeline.py 核心 AI 流程、firestore_client.py 資料庫存取、server.py Flask API + 前端頁面)
必做(demo 靈魂,不能開天窗)
- 拍照 → Gemini 辨識 → TTS 語音(模組1核心)
- Firestore 存使用者偏好,自動讀取(模組2)
應該做(讓評審覺得是系統不是玩具) 3. 通知司機功能(模組3)+司機端頁面 4. 依偏好客製化畫面呈現(安全區、字體)
有餘力再做 5. Cloud Run 部署,拿到公開網址 6. Gemini function calling(讓「查 Firestore」「選呈現模式」變成 Agent 自主決策,而非寫死邏輯)—— 呼應賽事名稱「Agent」
先砍掉
- 即時逐幀 AR 影像疊字(風險太高,用「拍照→重新繪製」取代)
- 模型微調、群眾回報防濫用機制、完整登入系統
| 角色 | 負責內容 | 對應檔案 |
|---|---|---|
| A.AI Pipeline | Vertex AI Gemini 串接、圖片辨識 prompt 設計、TTS 串接 | pipeline.py |
| B.後端+資料庫 | Firestore schema、API 開發(profile / notify_driver / driver_alerts)、Flask 路由 | firestore_client.py、server.py |
| C.前端 | 乘客端頁面(拍照、校準 UI、結果呈現、通知司機按鈕)、司機端頁面(路線選擇、警示輪詢顯示) | server.py 內的 HTML/JS |
| D.簡報+整合測試(若人力夠) | 簡報製作、demo 腳本、錄影、GCP 部署、整合各模組測試 | — |
- 新 GCP 專案 ID(目前測到原專案 billing 未啟用,需換成主辦方提供的專案)
- 驗證方式:service account 金鑰檔 or
gcloud auth application-default login - Gemini / Text-to-Speech / Firestore 三個 API 是否已在新專案啟用