今天將昨天的方案和專題老師討論了,目前遇到的問題是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-flash 或 gemini-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 為預設。 |