今天從 Google Vision 調整到 Azure AI Face方案,看能不能增加辨識的準確率。
最後發現Azure已將人臉識別(Identification)、人臉驗證(Verification),以及臉部清單(Face List)的創建與管理,歸類為受限存取功能。在未經核准的情況下,目前的帳號只能使用「偵測」(Face Detection)功能,無法執行人臉持久化儲存和比對等核心任務。
唯一的長期解決方案是提交申請表單給微軟,等待審核開通 Person Group / Face List / Find Similar 等功能,但這個申請僅限企業不能個人使用,儘管有詢問訓練機構能不能申請,但申請時間需要10天工作天,且不一定通過。
鑒於團體專題的時限問題,且身為ESP32應用對照組原先的設想是透過雲端的人工智慧 (AI) 服務解決,所以將儘量不使用開源函式庫訓練,明天將嘗試看看Amazon Rekognition看能不能找到解決方式。
本專案旨在儲存客戶臉部資訊,並在下次來訪時進行識別以提供客製化廣告。
難點 | 原因分析與細節 | 解決方式 | 來源 |
---|---|---|---|
難點 1:方案選擇 | 免費方案缺乏**「人臉儲存 (Face Storage)」**功能,無法建立穩定的客戶人臉資料庫,且交易次數限制嚴格,不適合商業應用。 | 建議使用**「標準」方案**,它提供完整的臉部儲存和訓練功能。 | |
難點 2:手動儲存與識別 | 若使用免費方案搭配 SQL 資料庫:① 識別精準度低 (需要多張照片訓練模型);② 效能極差 (需與所有照片進行暴力比對)。 | 必須使用 Azure 的 「人員群組 (Person Group)」功能,用於訓練模型並從大量人臉中快速找到目標 (需標準方案)。 | |
難點 3:API 權限受限 (403 錯誤) | Azure 已將人臉識別 (Identification)、人臉驗證 (Verification),以及臉部清單 (Face List) 的創建與管理歸類為受限存取功能。因此帳號目前只能使用「偵測」功能。 | 唯一的解決方法是提交申請表單 (例如:至 https://aka.ms/facerecognition),等待微軟審核開通 Person Group / Face List / Find Similar 等功能。 | |
難點 4:首次註冊流程 | 雖然所有流程都透過 API 呼叫,但首次註冊仍需確保人臉與客戶身份的關聯性。 | 需在程式中建立一個專屬的**「註冊頁面」**,用於第一次捕捉客戶多張人臉照片,並透過 API 將這些照片與客戶 ID 綁定。 | |
難點 5:替代方案 (無需等待審核) | 在無法立即取得 Azure 權限的情況下,專案需要替代的識別方案。 | 最推薦的混合式方案: 使用 Azure 雲端服務作為基礎設施,在上面運行開源函式庫 (如 face-recognition) 和向量搜尋工具 (如 Faiss),自行處理特徵提取和比對。 |
難點 | 原因分析與細節 | 解決方式 | 來源 |
---|---|---|---|
難點 A:Flask 模組無法找到 | 錯誤訊息:Could not import 'backend.backend.app' ;原因:啟動目錄錯誤,多加了一層 backend 。 |
啟動必須從專案根目錄開始,使用 --app backend.app 才能正確找到 backend/app.py 。 |
|
難點 B:Port 被佔用 | 錯誤訊息:Address already in use ;原因:之前的 Flask 實例沒有關閉。 |
使用 `ss -tlnp | grep 8000確認 Port 狀態,並使用 kill -9` 關閉殘留的 Flask 進程。 |
難點 C:背景常駐與更新 | 需求:關閉 SSH 後服務仍須運行;或是程式更新後,舊的 Flask 實例未關閉。 | 使用 nohup 指令啟動 Flask 服務,讓它在背景常駐。更新時,先用 pkill -f "flask --app backend.app" 關閉舊程序,再用 nohup 啟動新版本。 |
難點 | 原因分析與細節 | 解決方式 | 來源 |
---|---|---|---|
難點 E:SQLite UNIQUE 錯誤 | 錯誤訊息:UNIQUE constraint failed: members.member_id ;原因:members 表只有一個欄位,每個會員只能存一張臉,不支援多張照片。 |
建議新建 member_faces 表,以支援同一會員存儲多張臉部編碼 (多張照片)。 |
|
難點 F:雜湊比對無法辨識相似臉 | 現況使用 SHA-256 雜湊,但不同照片的雜湊必然不同,無法判斷「相似臉」。 | 中期解決方案: 引入 face_recognition 或 dlib 等函式庫,使用 embedding (嵌入向量) 進行相似度比對。 |
難點 | 原因分析與細節 | 解決方式 | 來源 |
---|---|---|---|
難點 1:編譯錯誤 | 錯誤訊息:'Serial0' does not name a type ;原因:Serial.printf 放在函式外,或 Core 3.3.1 版本問題。 |
將 Serial.printf 移除或移到函式內 (例如 connectToNetwork() 或 loop() )。 |
|
難點 3:HTTP POST 上傳失敗 | 錯誤訊息:HTTP POST failed: -1 (TCP 連線失敗);原因:Flask 跑在 8000 Port,但 ESP32 連接 5000 Port,或防火牆阻擋。 |
修正 SERVER_URL 定義中的 Port (改成 8000);同時在 GCP VM 防火牆規則裡開啟 TCP 8000。 | |
難點 4:ESP32-CAM 燒錄失敗 | 錯誤訊息:Failed to connect to ESP32: No serial data received ;原因:未進入燒錄模式。 |
燒錄前必須確認:IO0 → GND (進入下載模式)、TX/RX 交叉連接、確保 USB-TTL 模組供電足夠 (建議外接 5V/2A)。燒錄完成後,拔掉 IO0 → GND 並 RESET 進入正常模式。 |