Initial commit: digital reception monorepo (M1-M11 + demo extensions)

This commit is contained in:
2026-05-25 12:59:54 +05:00
commit b9f88194d9
182 changed files with 20578 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
# 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` (т.е. с согласием).