Spaces:
Sleeping
Sleeping
File size: 2,658 Bytes
f17af10 00c8599 f17af10 00c8599 f17af10 00c8599 f17af10 896740b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 | ---
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
```
|