使用 WebRTC 与 Python 构建由 AI 驱动的实时应用程序

在这个以响应速度和互动性引导用户期望的时代,掌握实时通信技术正迅速成为一项不可或缺的技能。无论您是在设计 AI 语音界面、协作学习工具,还是在设计下一代多人游戏环境,跨设备即时且智能地发送数据的能力,都将改变您的项目内容及其体验。

WebRTC 是这一领域的核心。虽然 WebRTC 经常与基于浏览器的视频聊天联系在一起,但它的真正优势如点对点、低延迟、加密数据流等能力在进行实时 AI 处理时至关重要。当与 Python 和 OpenAI 的 Whisper 或 ChatGPT 等人工智能模型搭配使用时,就会产生一个网络感知、传感器丰富的系统,该系统会聆听、学习并做出响应。

但重要的是:WebRTC 并不强迫你只使用浏览器,这正是 Python 的用武之地。有了 aiortc(Python WebRTC 开源实现),您就可以在服务器端处理 WebRTC 会话、连接硬件、在线运行机器学习模型,并实时协调复杂的 AI 管道。

通过 aiortc 在 Python 中使用 WebRTC

aiortc 提供了所需的服务器端绑定,让我们可以通过完全控制和 Pythonic 工作流开始参与点对点会话。

步骤1:安装项目依赖项

首先需要 aiortc 和 aiohttp(异步 Web 服务器):

pip install aiortc aiohttp

步骤 2:使用 Python 构建 WebRTC 服务器

以下是 Python 中 WebRTC 处理程序的基本结构。我们将使用 aiohttp 接受来自浏览器的包含 SDP offer 的 POST 请求,建立媒体连接,并返回 SDP answer。

# server.py

import asyncio
from aiohttp import web
from aiortc import RTCPeerConnection, RTCSessionDescription

pcs = set()

async def offer(request):
    params = await request.json()
    offer = RTCSessionDescription(sdp=params["sdp"], type=params["type"])

    pc = RTCPeerConnection()
    pcs.add(pc)

    @pc.on("track")
    async def on_track(track):
        print(f"Track kind: {track.kind}")
        # 您可以在此处将音频发送到 Whisper 
        # 或保存到文件稍后处理

    await pc.setRemoteDescription(offer)
    answer = await pc.createAnswer()
    await pc.setLocalDescription(answer)

    return web.json_response({
        'sdp': pc.localDescription.sdp,
        'type': pc.localDescription.type
    })

app = web.Application()
app.router.add_post('/offer', offer)

web.run_app(app, port=8080)

步骤3:使用 HTML 和 JavaScript 采集麦克风数据

客户端 JS 创建 PeerConnection,捕捉麦克风中的音频,并向 Python 后台发送 SDP offer 。

<!-- index.html --> 
< script > 
  const pc = new RTCPeerConnection(); 

  navigator.mediaDevices.getUserMedia({ audio: true }).then(stream => { 
    stream.getTracks().forEach(track => pc.addTrack(track, stream)); 
  }); 

  pc.createOffer().then(offer => { 
    pc.setLocalDescription(offer); 
    return fetch('http://localhost:8080/offer', { 
      method: 'POST', 
      headers: { 'Content-Type': 'application/json' }, 
      body: JSON.stringify({ 
        sdp: offer.sdp, 
        type: offer.type 
      }) 
    }); 
  }).then(response => respond.json()).then(answer => { 
    pc.setRemoteDescription(new RTCSessionDescription(answer)); 
  }); 
</ script >

从现在开始,Python 将开始接收任何连接轨道的媒体数据。

连接到 AI 代理:语音输入到 OpenAI

一旦获得了传入的媒体数据(例如音频),就可以决定如何处理、转换和传输。将其输入到 AI 模型中。

以下是使用 Whisper 转录传入的 WAV 文件的方法:

import whisper

model = whisper.load_model("base")
result = model.transcribe("audio.wav")

print("User said:", result["text"])

或者将转录内容导入 OpenAI 的 GPT,创建一个完整的语音到代理系统:

import openai

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": result["text"]}]
)

print("AI Agent Responded:", response['choices'][0]['message']['content'])

将内容整合

完整的循环如下所示:

┌──────────────┐       ┌────────────┐       ┌──────────────┐       ┌────────────┐
│ Your Browser │ ────▶ │ Python Web │ ────▶ │ Whisper AI   │ ────▶ │ GPT Agent  │
│ (JavaScript) │       │ Server     │       │ (Transcribe) │       │ (Chat)     │
└──────────────┘       └────────────┘       └──────────────┘       └────────────┘
  • 使用 getUserMedia() 采集音频;
  • 通过 WebRTC 发送到 Python 后端;
  • 使用 Whisper 转录;
  • 传递给 GPT-4 等聊天代理;
  • 发送压缩想法,返回代理。

语音以外的用例

一旦解锁,该基础设施支持的就不仅仅是通话了。还可以传输实时游戏遥测数据、捕捉手势、发送白板笔画,将网络摄像头对准白板,然后询问 GPT 白板上写了什么。

使用案例:

  • 能真正听到人们说话的客服机器人
  • 能倾听、分析并提出更好问题的辅导员
  • 具有实时形态检测功能的健身应用
  • 具有零延迟命令的医疗界面

总结:WebRTC + AI 不仅仅适用于 “应用程序”

这并不是要构建类似于 Zoom 的东西。而是为了降低思维、数据、计算和响应之间的延迟,避免服务器的拖累。

WebRTC 仍在不断发展。但它已经到来。Python 凭借其简洁的语法和不断扩展的 AI 生态系统,为人机交互提供了良好的接口。尝试一些小的尝试,构建一次,看看听到了什么,然后教它更好地倾听。

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/webrtc/58819.html

(0)

相关推荐

发表回复

登录后才能评论