--- 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 ```