Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebRTC勉強会 LT: リアルタイムAI会話(映像+音声)をPythonで制御できないか?

Avatar for sadahry sadahry
March 12, 2025
97

WebRTC勉強会 LT: リアルタイムAI会話(映像+音声)をPythonで制御できないか?

リアルタイムAI会話を映像配信するため、Unityキャラクター映像をNDIで転送してAgoraで配信しています。業務委託の方に実装いただいたカスタムAgora SDK(by C++)があるのですが、C++の知見が社内になく、Pythonに置き換えられないかを奮闘した結果を発表します。

https://webrtcmeetup.connpass.com/event/344723/

Avatar for sadahry

sadahry

March 12, 2025
Tweet

More Decks by sadahry

Transcript

  1. 2 自己紹介 吉川 禎洋(YOSHIKAWA Sadahiro) @sadahry • 現職: リサーチエンジニア ◦

    社会人大学院(JAIST)にて音声対話研究(修士) ◦ 国際会議での登壇経験あり ◦ Kaggle Expert • 関心: システムとの対話(e.g., 会話のテンポ)を人がどう感じるのか • WebRTC初心者 M5Stack CoreS3 with https://github.com/openai/openai-r ealtime-embedded-sdk
  2. 会話AIエージェント InteLLA - Intelligent Language Learning Assistant [Saeki et al.

    2024] 英会話におけるスピーキング能力判定と会話練習サービスを教育団体やビジネス業界へ展開 3 [Saeki et al. 2024] Mao Saeki, Hiroaki Takatsu, Fuma Kurata, Shungo Suzuki, Masaki Eguchi, Ryuki Matsuura, Kotaro Takizawa, Sadahiro Yoshikawa, and Yoichi Matsuyama. "InteLLA: Intelligent Language Learning Assistant for Assessing Language Proficiency through Interviews and Roleplays." In Proceedings of the 25th Annual Meeting of the Special Interest Group on Discourse and Dialogue, pp. 385-399. 2024 Best Paper Award.
  3. DialOpsの実践 | 騒音ノイズに強い話者交替モデル [Kurata et al. 2023] 4 [Kurata et

    al. 2023] Fuma Kurata, Mao Saeki, Shinya Fujie and Yoichi Matsuyama, Multimodal turn-taking model using visual cues for end-of-utterance prediction in spoken dialogue systems, Proc. Interspeech 2023, pp.2658-2662, 2023. 会話中の騒音への対処は大きな課題のひとつであり、その問題へ対処したモデル
  4. Values | Don’t think, just talk! 5 能力を引き出す 対話インタラクション技 術

    InteLLA: Face-to-Faceの会話を通して ユーザーの潜在能力や潜在ニーズを自然 に引き出す。 対話シナリオ・ パーソナライゼーション技術 Plands: 診断結果・学習ゴール・学習履歴に もとづいて英会話カリキュラムを提供。 人の成長を促す診断技術 Gnowsis: 現状分析と次の達成目標までのプ ロセス管理はAIにお任せ。深層学習モデルに より専門家を凌駕する判定精度をマーク。 1. 2. 3. 特許出願済 特許出願済 特許出願済
  5. 6 Client-side Server-side システム構成 [Saeki et al. 2024] WebRTC を活用。目標レイテンシは0-400[ms]

    + 安定的な接続 [Saeki et al. 2024] Mao Saeki, Hiroaki Takatsu, Fuma Kurata, Shungo Suzuki, Masaki Eguchi, Ryuki Matsuura, Kotaro Takizawa, Sadahiro Yoshikawa, and Yoichi Matsuyama. "InteLLA: Intelligent Language Learning Assistant for Assessing Language Proficiency through Interviews and Roleplays." In Proceedings of the 25th Annual Meeting of the Special Interest Group on Discourse and Dialogue, pp. 385-399. 2024 Best Paper Award.
  6. 7 Client-side Server-side Unity -> NDI -> Agora SDK のながれで通信。映像と音声の両方を送受信。

    リアルタイム通信の概要 Unity NDI-Plugin InteLLA rtc module(C++) Agora Web SDK Dialog modules Agora Server SDK NDI SDK
  7. 置き換えでの問題: NDI通信 11 • そもそも、NDIの現行通信方式がわからない -> NDI通信結果をファイルに書き込むツールを作成。気合いでデバッグ • NDIのrecv_capture_v2の通信待機設定を使うと映像がフリーズしてしまう ->

    blocking処理なのか -> タイムアウトを0秒に -> infinite loopでCPUを占領してしまったためtime.sleepで占領を回避 • NDIが48,000hzだったので16,000hzに変換 • リアルタイム処理でAgoraにバイパスするときに遅延 -> リングバッファを用意。全てに処理せずスキップできるように調整
  8. 置き換えでの問題: Agoraの送受信 Agora SDKがbyte codeを入出力に使っていたため、 byteだとどれくらい処理負荷が違うのかをシミュレータで検証。 $ python3 benchmark.py Test

    1: Python socket loopback (1KB × 10000): 0.255913 seconds Test 2: C++ FFI loopback (socket, 1KB × 10000): 0.238292 seconds Test 3: FFI pointer echo (1KB pointer, 10000 calls): 0.007161 seconds created by chatgpt https://chatgpt.com/share/679f0765-a9dc-800c-9ce4-e5302018b4ac socket処理と同じくらいC++のバインディングで byteを転送すると処理時間がかかることがわかった 12
  9. 結果 14 Client-side Server-side Unity NDI-Plugin InteLLA module(python) Agora Web

    SDK Dialog modules Agora-Python -Server-SDK ndi-python 概ねできた。
  10. 残TODO 15 Client-side Server-side Unity NDI-Plugin InteLLA module(python) Agora Web

    SDK Dialog modules Agora-Python -Server-SDK ndi-python 実は現行処理にあったシステム側の録画処理が入った瞬間、ガタついてダメだった... -> Agoraではなく、直接NDIからバイパスする...?