# 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` (т.е. с согласием).