SecureMLAPI / README.md
yenslife's picture
feat: integrate ppnet inference backend
896740b
metadata
title: SecureML
emoji: 😻
colorFrom: purple
colorTo: red
sdk: docker
app_file: app.py
pinned: false
license: mit
short_description: 成大資安計畫使用

SecureMLAPI

這個專案提供一個 FastAPI 服務,用來判斷圖片中是否有人。

目前已整合兩種推論後端:

  • ppnet_baseline:使用 people_detection_baseline/baseline_40_model.pt.tar
  • resnet18_presence:使用 best_global_model_presence.pt

預設模型是 ppnet_baseline

開發環境

請使用 uv 安裝依賴與執行指令。

uv sync

啟動服務

uv run uvicorn app:app --host 0.0.0.0 --port 8000 --reload

啟動後可使用以下路徑:

  • /docs:Swagger UI
  • /health:健康檢查
  • /predict:上傳圖片並取得 JSON 推論結果
  • /demo:簡易網頁測試介面

切換模型

目前不需要從 HTML 介面切換模型,直接用程式設定即可。

方式一:用環境變數切換

SECUREML_MODEL=ppnet_baseline uv run uvicorn app:app --host 0.0.0.0 --port 8000
SECUREML_MODEL=resnet18_presence uv run uvicorn app:app --host 0.0.0.0 --port 8000

方式二:修改預設值

可直接修改 model_service.py 裡的:

DEFAULT_MODEL_NAME = os.getenv("SECUREML_MODEL", "ppnet_baseline")

以及 MODEL_CONFIGS 中對應模型的設定。

本地推論

專案提供 inference.py,可直接對單張圖片做推論:

uv run python inference.py --image person.jpg

指定模型:

uv run python inference.py --image person.jpg --model ppnet_baseline
uv run python inference.py --image person.jpg --model resnet18_presence

API 使用方式

使用 curl 呼叫 /predict

curl -X POST \
  -F "file=@person.jpg" \
  http://127.0.0.1:8000/predict

回傳格式範例:

{
  "label": "person",
  "prediction_index": 1,
  "probabilities": {
    "no_person": 0.0,
    "person": 1.0
  },
  "model_name": "ppnet_baseline",
  "model_backend": "ppnet",
  "model_path": "baseline_40_model.pt.tar",
  "filename": "person.jpg",
  "content_type": "image/jpeg"
}

目前模型設定位置

模型切換與設定集中在 model_service.py

  • MODEL_CONFIGS:定義可用模型
  • DEFAULT_MODEL_NAME:定義預設模型
  • get_model_service():建立對應推論服務

如果之後要新增模型,建議直接在 MODEL_CONFIGS 增加一筆設定,並在 _load_model() 補上對應後端載入方式。

驗證

可先做基本語法檢查:

uv run python -m py_compile app.py main.py inference.py model_service.py protopnet.py