iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
自我挑戰組

第一次團體專題系列 第 10

Day 10 : Azure 人臉辨識專題與實作難點筆記

  • 分享至 

  • xImage
  •  

今天從 Google Vision 調整到 Azure AI Face方案,看能不能增加辨識的準確率。
最後發現Azure已將人臉識別(Identification)、人臉驗證(Verification),以及臉部清單(Face List)的創建與管理,歸類為受限存取功能。在未經核准的情況下,目前的帳號只能使用「偵測」(Face Detection)功能,無法執行人臉持久化儲存和比對等核心任務。
唯一的長期解決方案是提交申請表單給微軟,等待審核開通 Person Group / Face List / Find Similar 等功能,但這個申請僅限企業不能個人使用,儘管有詢問訓練機構能不能申請,但申請時間需要10天工作天,且不一定通過。
鑒於團體專題的時限問題,且身為ESP32應用對照組原先的設想是透過雲端的人工智慧 (AI) 服務解決,所以將儘量不使用開源函式庫訓練,明天將嘗試看看Amazon Rekognition看能不能找到解決方式。

以下是 Azure AI Face 專案、後端服務部署以及硬體整合時所遇到的核心挑戰與解決方案的筆記整理。

本專案旨在儲存客戶臉部資訊,並在下次來訪時進行識別以提供客製化廣告。

一、 Azure Face API 服務選擇與限制

難點 原因分析與細節 解決方式 來源
難點 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),自行處理特徵提取和比對。

二、 VM Flask 後端服務部署與管理

難點 原因分析與細節 解決方式 來源
難點 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_recognitiondlib 等函式庫,使用 embedding (嵌入向量) 進行相似度比對。

四、 ESP32-CAM 硬體與網路連線

難點 原因分析與細節 解決方式 來源
難點 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 進入正常模式。

上一篇
Day 9 : 從 Google Vision 轉向 Azure
下一篇
Day 11 : Flask + Rekognition 整合開發筆記
系列文
第一次團體專題14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言