52 lines
2.6 KiB
Markdown
52 lines
2.6 KiB
Markdown
# face-service
|
|
|
|
Python + FastAPI + InsightFace `buffalo_l`. Считает 512-d L2-нормализованные эмбеддинги лиц, хранит в pgvector, делает cross-camera re-id и узнавание пациентов.
|
|
|
|
## Эндпоинты
|
|
|
|
| Метод | Путь | Назначение |
|
|
|---|---|---|
|
|
| `GET` | `/health` | Статус + флаг загрузки модели |
|
|
| `POST` | `/embed` | Только эмбеддинг (без БД). Body: `{frame: base64}` |
|
|
| `POST` | `/track-embeddings` | Сохранить эмбеддинг с привязкой к треку/камере |
|
|
| `POST` | `/reid/search` | Cross-camera re-id (top-K в окне T мин) |
|
|
| `POST` | `/recognize` | Узнать пациента (`patient_id`) по кадру |
|
|
| `POST` | `/enroll` | Привязать эмбеддинги трека к пациенту |
|
|
| `DELETE` | `/patient/{id}/embeddings` | Удалить эмбеддинги пациента (отзыв согласия) |
|
|
| `GET` | `/patient/{id}/count` | Кол-во эмбеддингов у пациента |
|
|
|
|
## Запуск (dev)
|
|
|
|
```bash
|
|
cd apps/face-service
|
|
python -m venv .venv && source .venv/bin/activate
|
|
pip install -r requirements.txt
|
|
cp .env.example .env # либо использовать корневой .env
|
|
uvicorn main:app --reload --port 8001
|
|
```
|
|
|
|
## Запуск (docker)
|
|
|
|
```bash
|
|
docker build -t reception/face-service .
|
|
docker run --rm -p 8001:8001 \
|
|
-e DATABASE_URL=postgresql://postgres:postgres@host.docker.internal:5434/reception \
|
|
reception/face-service
|
|
```
|
|
|
|
## Пороги (ТЗ §4.3)
|
|
|
|
- `RECOGNITION_THRESHOLD=0.5` — узнавание уже зарегистрированного пациента.
|
|
- `REID_THRESHOLD=0.35` — склейка треков между камерами (строже, иначе ложные склейки).
|
|
|
|
Тюним после baseline-замеров на проде.
|
|
|
|
## Источник
|
|
|
|
Скопировано и расширено из `work-pcs-adm-time-tracker/apps/face-service/`. Изменения:
|
|
|
|
- Новая схема `face_embeddings` (track_id, camera_id, patient_id, quality, captured_at) — управляется через Prisma в `packages/db`.
|
|
- Добавлены функции `save_embedding_with_meta`, `attach_track_to_patient`, `find_topk_in_window`, `find_nearest_patient`, `delete_patient_embeddings`.
|
|
- Эндпоинты `/embed`, `/track-embeddings`, `/reid/search`, `/enroll`, `/patient/.../embeddings` — новые.
|
|
- Эндпоинт `/recognize` теперь работает только с эмбеддингами с проставленным `patient_id` (т.е. с согласием).
|