Spaces:
Sleeping
Sleeping
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.tarresnet18_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