Как заменить изображение с веб-камеры на аватар с искусственным интеллектом? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Как заменить изображение с веб-камеры на аватар с искусственным интеллектом? [закрыто]

Сообщение Anonymous »

Microsoft Teams: замена канала веб-камеры AI-аватаром/видео YouTube — глубокое техническое исследование
Предыстория и цель
Я пытаюсь создать собственное решение Microsoft Teams, которое заменяет канал веб-камеры пользователя AI-аватаром (или видео YouTube в качестве доказательства концепции) во время живых собраний. Цель состоит в том, чтобы добиться замены видеопотока в реальном времени, который отображается как фактическая камера пользователя, а не как отдельный участник-бот.
Почему не виртуальная камера/расширение? Мне нужна встроенная интеграция с Teams для улучшения пользовательского интерфейса, централизованного развертывания и возможностей управления предприятием.
Текущее состояние: подход с использованием корпоративных ботов (.NET 8 + Graph Communications API)
После тщательного тестирования нескольких подходов я добился значительного прогресса с ботом C# .NET 8 с использованием Microsoft Graph Communications API, но я столкнулся с проблемами развертывания и нуждаюсь в руководстве по последним шагам.
✅ Что работает в настоящее время
Внутренняя инфраструктура (полностью функциональная):
Бот-служба .NET 8 с Microsoft.Bot.Builder 4.22.9
Настроена служба Azure Bot (один клиент, уровень S1)
Предоставлены разрешения Graph API: Calls.JoinGroupCall.All, Calls.AccessMedia.All, OnlineMeetings.ReadWrite.All
Конфигурация Azure:
Идентификатор бота: 8389d339-20d4-4dd3-96fb-1a446739946d
Конечная точка обмена сообщениями: https:///api/messages
Канал Teams: включен с вызовом веб-перехватчика
График Communications Calls.Media SDK: интегрированный (v1.2.0.15533)
Ключевые пакеты: 🚧 Текущие блокировщики
  • Проблема с политикой развертывания приложений Teams:
    «У вас нет доступа к этому приложению.
    Из-за политики обмена сообщениями вашей организации вам не разрешено устанавливать это приложение».
При попытке загрузить пакет приложения Teams с исправленными манифест:
Конфигурация манифеста Teams:

Код: Выделить всё

{
"id": "8389d339-20d4-4dd3-96fb-1a446739946d",
"botId": "8389d339-20d4-4dd3-96fb-1a446739946d",
"bots": [{
"botId": "8389d339-20d4-4dd3-96fb-1a446739946d",
"scopes": ["personal", "team", "groupChat"],
"supportsFiles": false,
"supportsCalling": true,
"supportsVideo": true
}],
"authorization": {
"permissions": {
"resourceSpecific": [
{ "name": "Calls.JoinGroupCall.All", "type": "Application" },
{ "name": "Calls.AccessMedia.All", "type": "Application" },
{ "name": "OnlineMeetings.ReadWrite.All", "type": "Application" }
]
}
}
}
Предполагаемые требования к администратору: Центр администрирования Teams → В политике разрешений пользовательских приложений должно быть включено «Разрешить все приложения».
  • Ожидается тестирование собрания Real Teams:
Все конечные точки API работают с тестовыми URL-адресами
Создание CallId успешно
Необходимо проверить с помощью фактическое собрание Teams для подтверждения того, что бот отображается как участник с видеопотоком
Попытки предыдущих подходов
❌ Подход 1: Node.js Bot Framework (не удалось)
Проблема: бот отображался как отдельный участник собрания, а не как замена камеры пользователя.

Код: Выделить всё

// This created a new participant, not replaced user's feed
const call = await graphServiceClient.communications.calls.post({
participants: [{ info: { identity: { user: { id: botUserId } } } }]
});
Недостаток архитектуры:

Код: Выделить всё

User's Camera -> Teams Meeting Participant #1
Bot Camera    -> Teams Meeting Participant #2  ❌ (Separate, not replacement)
Извлеченный урок: Bot Framework создает участников собрания; он не заменяет пользовательские видеопотоки через стандартные API.
❌ Подход 2: приложение Teams с разрешениями RSC (Node.js + React) (частичный успех)
Что сработало:
✅ Приложение Teams успешно загружено и установлено
✅ Разрешения RSC настроены правильно
✅ Аутентификация Teams SSO работает
✅ Приложение появляется в Teams с соответствующими разрешениями.
Что не удалось:
❌ На данный момент серверная служба C# DirectStreamService недоступна
❌ SDK Teams JavaScript не предоставляет API media.replaceOutgoingVideo() (начиная с SDK версии 2.46.0)
❌ Разрешения RSC существуют в манифесте, но соответствующие API не предоставляются
Попытка реализации на стороне клиента:

Код: Выделить всё

// Tried canvas-based processing with MediaStream generation
const canvas = document.createElement('canvas');
const stream = canvas.captureStream(30);

// Goal: await teamsApp.media.replaceOutgoingVideo(stream);
// Reality: API doesn't exist in SDK
Проблемы с конфигурацией:
Для проверки JWT требовался точный формат URI ресурса: api:///
Несколько ошибок 422 проверки с разделом манифеста webApplicationInfo
Несоответствие аудитории аутентификации
❌ Подход 3: Обработка видео на стороне клиента (ограниченный успех)
Построен работающий видеопроцессор что:
✅ Обрабатывает видео YouTube через HTML5 Canvas (30 кадров в секунду)
✅ Генерирует MediaStream из холста
✅ Обеспечивает функцию предварительного просмотра в реальном времени
❌ Невозможно внедрить поток в собрание Teams (без поддержки API)
Конкретные вопросы
API Graph Communications — мультимедиа в реальном времени: является ли Microsoft.Graph.Communications.Calls.Media SDK (v1.2.0.15533) правильный подход для замены видеопотока пользователя (без добавления участника-бота)?
Бот против пользовательского потока: может ли бот, использующий Graph Communications API, заменить исходящий видеопоток пользователя или он всегда будет отображаться как отдельный участник?
Политики администратора Teams: Какие именно настройки Центра администрирования Teams необходимы для:
Загрузки пользовательских приложений с разрешениями на вызовы/медиа
Разрешения ботов с поддержкой SupportCalling: true и supportVideo: true
Разрешения RSC для Calls.AccessMedia.All
Недокументированные API: есть ли в Teams JavaScript SDK или API Graph какие-либо недокументированные или предварительные API, которые поддерживают прямую манипулирование видеопотоком?
Настройка мультимедиа в реальном времени: для тех, кто внедрил мультимедиа в реальном времени Graph Communications, каков правильный поток для:
Присоединения к собранию в качестве бота
Доступа/замены медиапотоков
Обеспечения отображения видео в виде канала пользователя (а не канала бота)
Альтернативная архитектура: Следует ли мне использовать:
Команды Приложения для собраний с настраиваемыми сценами режима «вместе»?
Коммуникационные службы Azure с взаимодействием с Teams?
Другая комбинация SDK/API?
Техническая среда
Внутренняя часть: .NET 8.0 (TeamsMediaService) в Windows
Внешний интерфейс: React 18 + TypeScript + Vite + Teams JavaScript SDK v2.46.0
Azure: Bot Услуга (S1), Один арендатор, Туннель ngrok для локального разработчика
Тестирование: эмулятор Bot Framework (успешное подключение), тесты API PowerShell (все пройдены)
Что я ищу
Подтверждение того, что этот подход (бот C# + Graph Communications API) действительно может обеспечить замену пользовательского видео (а не бот как отдельный участник)
Руководство по требованиям политики администратора Teams для пользовательских приложений с разрешениями на вызов
Примеры или документация успешного завершения замена медиапотока в реальном времени реализации
Альтернативные подходы, если текущий путь архитектурно невозможен
Ссылка на документацию
Microsoft Graph Communications API
Создание ботов для звонков и встреч
Концепции мультимедиа в реальном времени
Teams JavaScript SDK
Любые идеи, исправления или примеры будут с благодарностью приняты! Я потратил на это много времени и хочу убедиться, что нахожусь на правильном техническом пути, прежде чем продолжить.
Теги: microsoft-teams, Teams-bot, azure-bot-service,graph-api, мультимедиа в реальном времени, потоковое видео, webrtc, microsoft-graph
Эта расширенная версия предоставляет:
✅ Подробный технический контекст из все 4 подхода
✅ Конкретные конечные точки API и данные ответов
✅ Точные версии пакета и детали конфигурации
✅ Четкая разбивка успехов/неуспехов для каждого метода
✅ Конкретные вопросы, на которые можно ответить
✅ Полные сведения о технической среде
✅ Фрагменты кода, показывающие, что было предпринято

Подробнее здесь: https://stackoverflow.com/questions/797 ... -ai-avatar
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»