iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
自我挑戰組

第一次團體專題系列 第 12

Day 12 : 專題目前進度演示+廣告播放裝置方案選擇

  • 分享至 

  • xImage
  •  

今天將昨天的方案和專題老師討論了,目前遇到的問題是ESP32-CAM沒有HDMI口,所以要找到如何在螢幕播放的解法,近期將開始研究Kiosk App

今日難點筆記

專案環節 遇到的難點 (Challenges Encountered) 解決方式 (Solutions/Resolutions) 來源
I. 硬體與網路連線 (ESP32-CAM & Network)
Wi-Fi 靜態 IP 設定 使用 WiFi.config() 設定靜態 IP 時,常出現 HTTP POST failed: -1,表示無法建立 TCP 連線。 移除靜態 IP 設定,改為 DHCP 自動分配,並確保 Gateway 與 DNS 設定正確。程式碼中強制使用 WiFi.config(IPAddress(), IPAddress(), IPAddress());
伺服器連線/防火牆 ESP32 顯示 HTTP POST failed: -1,代表網路無法連接伺服器;Flask 在 VM 上啟動時,有時只綁定 127.0.0.1:8000 (僅限本地存取)。 Flask 啟動時必須使用 --host 0.0.0.0,以便外部設備存取。VM 防火牆需允許 TCP 8000 端口的 inbound 流量。
圖片上傳間隔 預設程式設定為 5000ms,導致每 5 秒上傳一次,頻率可能過高。 將間隔改為 10 秒:constexpr uint32_t kCaptureIntervalMs = 10000;
II. 資料格式與後端 API 處理
圖片上傳格式錯誤 (422) ESP32 顯示 HTTP POST failed: 422。原因是 ESP32 預設使用 Content-Type: image/jpeg 傳輸 raw binary,但 Flask 預期收到 multipart/form-data 格式。 方法 A (修改 ESP32): 將上傳方式改為 multipart/form-data,欄位名稱設定為 image方法 B (修改 Flask): 修改 Flask 後端以接收 raw binary,並使用 request.get_data() 解析。
Gemini API 配額超出 收到 429 Quota exceeded 錯誤。免費額度 (Free Tier) 每日上限為 50 次請求。 啟用 Google Cloud Console 的付費方案,以避免受限於免費額度的每日配額。可透過實作快取機制 (Cache) 來降低 API 呼叫次數。
Gemini API 錯誤代碼 (404/403/504) 收到 404 Not Found (使用了不存在的模型名稱 gemini-1.5-flash-002);403 Permission denied (API Key 傳輸錯誤,使用了 Authorization: Bearer);以及 504 Timeout (API 回應過慢)。 模型名稱改用正確的 gemini-1.5-flashgemini-1.5-pro。改用正確的呼叫方式,例如將 API Key 放在 URL 參數中。
服務中斷風險 系統高度依賴單一 Gemini Text API。一旦配額用盡 (quota 爆掉),廣告文案生成功能會完全無法使用。 在後端新增 Fallback (備援) 機制。若遇到 429 或 504 錯誤,使用預存模板或前一次生成的內容作為預設廣告文案。臉部辨識也可切換至本地 dlib 或 Amazon Rekognition 作為備援。
API 重試延遲 達到配額上限後,會收到 retry_delay (約 30–46 秒) 的等待提示。 實作重試間隔:根據 API 回傳的延遲時間,在程式中設定延遲呼叫,避免頻繁失敗請求。
III. 人臉識別 ID 管理
跨帳號/跨集合 ID 不一致 Amazon Rekognition 不會跨帳號、跨 Collection 建立「同一個人」的唯一 ID。使用不同金鑰或不同 Collection,會產生不同的 FaceId,結果看起來像「不同人」。 專案必須在資料庫層面自行管理「會員 ID (Member ID) ↔ FaceId」的對應關係。Rekognition 僅保證在特定 Collection 內FaceId 穩定一致。
IV. 廣告展示與部署
廣告播放裝置不穩定 專案需要一個「穩定的全螢幕播放裝置」。使用一般瀏覽器可能遇到睡眠、誤觸或斷線不自動重載等問題。 採用 電視棒 + Kiosk App (如 Fully Kiosk Browser)。Kiosk App 能提供「開機自動載入」「保持常亮」「全螢幕沉浸」與「避免誤觸」等功能。
避免額外 Android App 開發 專案時程與人力有限,不適合自行開發高成本的 Android App。 直接使用現成的 Kiosk App,這是專為「商用廣告播放」設計的工具,能快速落地。
Kiosk App 選擇與相容性 不確定市面上有哪些 Kiosk App 適用於 Android 電視棒,以及它們的功能差異。部分 App (如 Fully Kiosk Browser) 在 Android TV 上可能無法自動成為預設 Launcher。 首選方案: Fully Kiosk Browser & Lockdown (功能最完整)。次選方案: Kiosk Browser Lockdown (設計較簡單)。若遇到預設 Launcher 限制,需手動設定 Fully Kiosk 為預設。

上一篇
Day 11 : Flask + Rekognition 整合開發筆記
下一篇
Day 13 : 第一次規則嘗試
系列文
第一次團體專題14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言