Кнопка «Фон» в тулбаре комнаты и выбор фона в превью на входе: три готовые
сцены и свои картинки из профиля. Фон применяется процессором к самому
публикуемому треку (`LocalVideoTrack.setProcessor`), а НЕ пересозданием
`RoomOptions` — ссылка на них обязана оставаться стабильной, иначе
`LiveKitRoom` переподключается к комнате.
Фича только для ДЕСКТОПА, и «десктоп» определяется по возможностям устройства
(`pointer: fine` + `hover: hover` + `maxTouchPoints`), а НЕ по ширине окна:
узкое окно на десктопе — всё ещё десктоп, а широкий планшет — всё ещё планшет,
который сегментация греет. На мобильном кнопки нет вовсе, а не задизейбленной.
Ассеты сегментации отдаются СО СВОЕГО домена: библиотека по умолчанию тянет
wasm с jsdelivr, а модель с storage.googleapis.com, и в закрытом контуре фича
молча не работала бы. Модель (Apache 2.0, см. NOTICE.txt) лежит в репозитории,
wasm-рантайм (~19 МБ) копируется из node_modules плагином сборки. Сама
библиотека и модель грузятся ЛЕНИВО — только когда фон реально включают, вход
в конференцию не стал медленнее.
Три дефолтные сцены — собственные векторные рисунки (`design/backgrounds/`),
а не фотографии из интернета: у нарисованной сцены нет чужой лицензии, а
продукт расходится по инсталляциям, и проверять права на каждую копию некому.
Свои картинки — в профиле, до 10 штук, с уменьшением до 1280px и переводом в
WebP прямо в браузере перед отправкой. Удаление применённого сейчас фона
сбрасывает выбор на «без фона»: хранится ключ записи, а не URL картинки.
Смена камеры фон не теряет (`restartTrack` перезапускает процессор сам),
выключение и включение камеры — навешивает его на новый трек заново.
⚠️ Прокси dev-сервера для `/media/` — обязательно со слэшем: ключ `/media`
Vite матчит префиксом и перехватывает заодно `/mediapipe/...`, из-за чего
модель получала 404 и фон молча не включался.
17 lines
1.1 KiB
Plaintext
17 lines
1.1 KiB
Plaintext
selfie_segmenter.tflite
|
||
=======================
|
||
|
||
Модель сегментации силуэта человека MediaPipe Selfie Segmenter (float16),
|
||
используется заменой фона видео (см. frontend/src/lib/virtualBackground.ts).
|
||
|
||
Источник: https://storage.googleapis.com/mediapipe-models/image_segmenter/selfie_segmenter/float16/latest/selfie_segmenter.tflite
|
||
Документация: https://ai.google.dev/edge/mediapipe/solutions/vision/image_segmenter
|
||
Правообладатель: Google LLC
|
||
Лицензия: Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0)
|
||
|
||
Файл лежит в репозитории намеренно: npm-пакетом модель не поставляется, а
|
||
VidConf — самоуправляемый продукт и обязан работать в контуре без доступа к
|
||
внешним CDN. Wasm-рантайм MediaPipe (тоже Apache 2.0) в репозиторий не
|
||
коммитится — он копируется в public/mediapipe/wasm/ из node_modules при
|
||
сборке, см. плагин `mediapipeWasm` в frontend/vite.config.ts.
|