Spaces:
Sleeping
Sleeping
| 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` 安裝依賴與執行指令。 | |
| ```bash | |
| uv sync | |
| ``` | |
| ## 啟動服務 | |
| ```bash | |
| uv run uvicorn app:app --host 0.0.0.0 --port 8000 --reload | |
| ``` | |
| 啟動後可使用以下路徑: | |
| - `/docs`:Swagger UI | |
| - `/health`:健康檢查 | |
| - `/predict`:上傳圖片並取得 JSON 推論結果 | |
| - `/demo`:簡易網頁測試介面 | |
| ## 切換模型 | |
| 目前不需要從 HTML 介面切換模型,直接用程式設定即可。 | |
| ### 方式一:用環境變數切換 | |
| ```bash | |
| SECUREML_MODEL=ppnet_baseline uv run uvicorn app:app --host 0.0.0.0 --port 8000 | |
| ``` | |
| ```bash | |
| SECUREML_MODEL=resnet18_presence uv run uvicorn app:app --host 0.0.0.0 --port 8000 | |
| ``` | |
| ### 方式二:修改預設值 | |
| 可直接修改 `model_service.py` 裡的: | |
| ```python | |
| DEFAULT_MODEL_NAME = os.getenv("SECUREML_MODEL", "ppnet_baseline") | |
| ``` | |
| 以及 `MODEL_CONFIGS` 中對應模型的設定。 | |
| ## 本地推論 | |
| 專案提供 `inference.py`,可直接對單張圖片做推論: | |
| ```bash | |
| uv run python inference.py --image person.jpg | |
| ``` | |
| 指定模型: | |
| ```bash | |
| uv run python inference.py --image person.jpg --model ppnet_baseline | |
| ``` | |
| ```bash | |
| uv run python inference.py --image person.jpg --model resnet18_presence | |
| ``` | |
| ## API 使用方式 | |
| 使用 `curl` 呼叫 `/predict`: | |
| ```bash | |
| curl -X POST \ | |
| -F "file=@person.jpg" \ | |
| http://127.0.0.1:8000/predict | |
| ``` | |
| 回傳格式範例: | |
| ```json | |
| { | |
| "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()` 補上對應後端載入方式。 | |
| ## 驗證 | |
| 可先做基本語法檢查: | |
| ```bash | |
| uv run python -m py_compile app.py main.py inference.py model_service.py protopnet.py | |
| ``` | |