README: хосты с путём, FPG_WS_PORT, нормализация видео, овал и логирование

This commit is contained in:
apuc committed 2026-09-17 15:23:23 +03:00
1 parent 5331730433
commit eb1c7ae276
1 file changed
+6 -2
+6 -2
View File
@@ -56,8 +56,11 @@ python3 -c "from waitress import serve; from app import app; serve(app, host='12
| `FPG_OAUTH_URL` | (необязательно) URL OAuth-токена (по умолчанию `https://oauth.sbermed.ai/token`) |
| `FPG_REST_HOST` | (необязательно) REST-хост SDK (по умолчанию `gigadoc-dnr-sdk.sbermed.ai` — персональный стенд) |
| `FPG_WS_HOST` | (необязательно) WebSocket-хост SDK (по умолчанию `gigadoc-dnr-sdk.sbermed.ai`) |
| `FPG_WS_PORT` | (необязательно) WebSocket-порт SDK (по умолчанию `8443`) |
| `FPG_WS_ORIGIN` | (необязательно) Origin для WebSocket (по умолчанию `https://gigadoc-dnr-sdk.sbermed.ai`) |
**Хосты с путём.** `FPG_REST_HOST` и `FPG_WS_HOST` могут содержать не только домен, но и путь — например `domain.com/v1/giga` (или полностью `https://domain.com/v1/giga`). Путь автоматически подставляется в REST-базу и в WebSocket-URI (`wss://domain.com:8443/v1/giga/api/v2/ws/predict/...`).
## Развёртывание на сервере
### 1. Клонирование и структура
@@ -152,14 +155,15 @@ sudo systemctl restart med.service
## Как работает анализ
1. Видео сохраняется в `videos/` (копия записи — доступна для скачивания)
2. `ffmpeg` извлекает 300 кадров 1280×720 (bt709 + yuv420p — важно для iPhone MOV с P3/HDR)
2. `ffmpeg` извлекает до 300 кадров 1280×720 (первые 20 секунд, fps=30) с нормализацией: HDR→bt709 (iPhone P3/HDR), поворот по метаданным, yuv420p
3. OAuth-токен → создание сессии → кадры по WebSocket (`wss://gigadoc-dnr-sdk.sbermed.ai:8443`, subprotocol `bearer.<token>`, Origin `https://gigadoc-dnr-sdk.sbermed.ai`)
4. Интерпретация JSON SDK → summary/metrics/warnings/advice → сохранение в SQLite
## Важные нюансы
- **SDK ФПГ не находит лицо на кадрах 640×480** — нужны кадры 1280×720.
- **Камерное сканирование** (мобильные): canvas 720×720 (квадрат, без обрезки головы), MediaRecorder с битрейтом 1.5 Мбит/с (~1–2 МБ за 310 кадров), автоповтор fetch до 3 попыток при обрыве сети.
- **Камерное сканирование** (мобильные): canvas 1080×1080 (квадрат), овал-подсказка для позиционирования лица, запас 10% при захвате (голова не обрезается), MediaRecorder с битрейтом 1.5 Мбит/с (~1–2 МБ за 310 кадров), автоповтор fetch до 3 попыток при обрыве сети.
- **Логирование прогресса SDK**: в логах сервера пишется `progress` и `face_ok` при каждом изменении; если финальный результат не пришёл — предупреждение в лог.
- **iOS MediaRecorder** пишет mp4 (webm может не поддерживаться) — расширение выбирается из `blob.type`.
- **Порт 5000** на сервере занят другим сервисом — приложение слушает 18018.
- Дисклеймер «не медицинский диагноз» — во всех отчётах и на страницах.