iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

第一次團體專題系列 第 11

Day 11 : Flask + Rekognition 整合開發筆記

  • 分享至 

  • xImage
  •  

Amazon Rekognition 效果實在太驚人! 完全達到我們要的目標
除了一開始因為介面不熟悉找不到key ,但依照第一個參考資料也成功取得後,後面幾乎沒有調適,只要一張圖片就能成功辨識,也不用訓練,更不用申請,終於找到我們專案的最佳解了~~ /images/emoticon/emoticon02.gif

參考資料如下
http://ccllab.cgu.edu.tw:58189/labWebsite/courses/ITM088_2021/AmazonRekognition.pdf
https://aws.amazon.com/tw/rekognition/faqs/
https://docs.aws.amazon.com/zh_tw/rekognition/latest/dg/collections.html

以下為難點筆記

I. 雲端服務轉換與架構調整 (從 Azure 遷移)

遇到的難點 (Difficulty) 解決方式 (Solution) 來源
API 呼叫方式差異 — 原本使用 Azure Face API,需要轉換至 AWS Rekognition,兩者在 SDK 語法、回傳格式上完全不同。 使用 AWS SDK(boto3)重寫呼叫,並重新映射回傳格式(例如將 Azure 的 faceRectangle 對應至 AWS 的 BoundingBox)。
資料庫結構調整 — Rekognition 採用 Collection 與 faceId 機制,原本僅儲存單一 encoding_json 的 schema 不足。 調整 schema,新增 collection_idface_id 欄位,以對應 Rekognition 的人臉集合與唯一編號。
金鑰與權限管理複雜 — 需從 Azure Key Vault 轉到 AWS IAM Policy + Secrets Manager,權限配置易出錯。 以 AWS IAM + Secrets Manager 儲存金鑰;採最小權限(Least Privilege),僅允許 Rekognition 與 S3。
檔案處理流程與 S3 存取 — 典型流程為 ESP32 → S3 → Rekognition,S3 權限與控制更複雜。 流程設計為 ESP32 → S3 bucket → Lambda/EC2 → Rekognition;使用預先簽名 URL(Presigned URL)上傳以避免 S3 公開讀取。
合規性與延遲考量 — 身份識別(Identify/Verify)在部分地區有限制;即時辨識需評估延遲。 僅需偵測時避免使用「識別/比對」以降低合規風險;選擇鄰近 Region(如東京/新加坡)以降延遲。

II. 本地開發與伺服器環境問題 (Flask)

遇到的難點 (Difficulty) 解決方式 (Solution) 來源
伺服器 Port 佔用 — 啟動 Flask 出現「Address already in use」,先前程式占用 8000。 使用 sudo netstat -tulnp | grep 8000 找到 PID,kill -9 <PID> 終止;或改用其他 Port(如 8080)。
AWS 權限不足 — Rekognition 擲回 AccessDeniedException,IAM 使用者(如 esp32)缺權限。 在 IAM 新增最小必要 Policy:rekognition:DescribeCollectionrekognition:IndexFacesrekognition:SearchFacesByImage
缺少 Python 套件 — 啟動時 ModuleNotFoundError: No module named 'numpy' 進入虛擬環境後 pip install numpy,或 pip install -r requirements.txt 安裝所有相依。
VM 對外 IP 查詢 — 不確定如何得知部署機器的外部 IP。 VM 內執行 curl ifconfig.me 或於雲端主控台查看「外部 IP」;同時確認防火牆已開放指定埠(如 8000)。

III. 應用程式功能與效能監控

遇到的難點 (Difficulty) 解決方式 (Solution) 來源
網頁即時顯示需求 — 無法即時顯示 ESP32 上傳的最新照片與識別結果。 前端以輪詢(Polling)呼叫 /latest_upload,每 2 秒更新影像與結果。
辨識流程延遲疑慮 — 擔心即時顯示拖慢後端流程。 輪詢僅增加約 1–2 秒前端延遲,對後端負載極小。
無法監控各步驟耗時 — 需要「上傳、辨識、生成廣告、總耗時」的效能數據。 後端以 time.time() 逐步打點並計算耗時,於 JSON 結果返回供前端展示。

上一篇
Day 10 : Azure 人臉辨識專題與實作難點筆記
下一篇
Day 12 : 專題目前進度演示+廣告播放裝置方案選擇
系列文
第一次團體專題14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言