From eb1c7ae27634bc4e33872c0bd822797f7f3c2235 Mon Sep 17 00:00:00 2001 From: Kavalar Date: Thu, 17 Sep 2026 15:23:23 +0300 Subject: [PATCH] =?UTF-8?q?README:=20=D1=85=D0=BE=D1=81=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D0=BF=D1=83=D1=82=D1=91=D0=BC,=20FPG=5FWS=5FPORT,=20?= =?UTF-8?q?=D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE,=20=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B8=20=D0=BB=D0=BE=D0=B3=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 35a9a08..829cbf6 100644 --- a/README.md +++ b/README.md @@ -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.`, 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. - Дисклеймер «не медицинский диагноз» — во всех отчётах и на страницах.