Хакатонный прототип динамической замены фона для видеозвонков. Проект был подготовлен для хакатона T1 и занял 3 место.
Идея близка к виртуальным фонам в Zoom, но ориентирована на сценарий корпоративной видеосвязи в Dion от T1: пользователь включает камеру, приложение отделяет человека от фона в реальном времени и заменяет фон на цвет, размытие, изображение или видео.
- обработка изображения с веб-камеры прямо в браузере;
- сегментация человека с помощью TensorFlow.js-модели;
- режимы фона:
- оригинальное видео без обработки;
- однотонный цвет;
- размытие реального фона;
- автоматический цвет по окружению;
- предустановленные изображения;
- пользовательские изображения и видео;
- настраиваемая сила размытия;
- оверлей приватности с данными сотрудника из
employee.json; - счетчики FPS и времени обработки кадра для быстрой оценки производительности.
Приложение является статическим сайтом без backend-части.
- Браузер получает поток с веб-камеры через
navigator.mediaDevices.getUserMedia. - TensorFlow.js загружает модель из папки
model/. - Каждый кадр проходит через модель сегментации.
- Canvas собирает итоговое изображение: выбранный фон + вырезанный человек + приватный оверлей.
- UI позволяет переключать режимы и загружать собственные фоны.
.
├── index.html # Разметка приложения
├── style.css # Стили интерфейса
├── app.js # Инициализация камеры, модели и UI-состояния
├── scripts.js # Рендеринг canvas, анализ цвета и оверлей приватности
├── employee.json # Демонстрационные данные сотрудника
├── background/
│ ├── index.json # Список встроенных фонов
│ └── *.png # Изображения фонов
├── docs/
│ └── architecture.md # Подробности архитектуры и потока данных
├── model/
│ ├── model.json # TensorFlow.js graph model
│ └── *.bin # Веса модели
├── Dockerfile # Сборка статического контейнера
├── nginx.conf # Конфигурация nginx для контейнера
└── package.json # Локальные команды запуска
Проект нужно открывать через HTTP-сервер. При открытии index.html напрямую из файловой системы браузер может заблокировать загрузку модели и JSON-файлов.
npm install
npm startПосле запуска откройте:
http://localhost:3000
python3 -m http.server 8000После запуска откройте:
http://localhost:8000
Собрать образ:
docker build -t dion-background-lab .Запустить контейнер:
docker run --rm -p 8080:80 dion-background-labПосле запуска откройте:
http://localhost:8080
То же самое через npm-скрипты:
npm run docker:build
npm run docker:runФайл employee.json управляет текстом приватного оверлея:
full_name- имя сотрудника;position- должность;company- компания;department- подразделение;office_location- локация;contact- контакты;branding- демонстрационные бренд-данные;privacy_level- уровень приватности по умолчанию:low,mediumилиhigh.
- Положите изображение в папку
background/. - Добавьте имя файла в
background/index.json. - Перезапустите HTTP-сервер или обновите страницу.
Пример:
[
"bg1.png",
"bg2.png",
"bg3.png",
"office.png"
]- камера работает только в защищенном контексте:
localhostили HTTPS; - производительность зависит от устройства, браузера и размера модели;
- TensorFlow.js подключается с CDN, поэтому для первого запуска нужен интернет;
- текущая версия является демо-прототипом и не интегрирована напрямую в клиент Dion;
- данные в
employee.jsonдемонстрационные.
- HTML, CSS, JavaScript;
- TensorFlow.js;
- Canvas API;
- Docker + nginx для статической раздачи.
- Architecture - поток данных, роли файлов и ограничения прототипа.
Проект создавался как хакатонное решение для T1. Основной фокус был на демонстрации real-time computer vision в браузере: сегментации пользователя, замене фона и сценариях приватности для корпоративной видеосвязи.