VoiceStreamAI

GitHub
954 143 中等 1 次阅读 昨天MIT音频Agent开发框架图像
AI 解读 由 AI 自动生成,仅供参考

VoiceStreamAI 是一款基于 Python 和 JavaScript 构建的开源解决方案,旨在实现音频的“近实时”流式转录。它通过 WebSocket 技术,让用户能够一边说话一边看到文字生成,极大地缩短了传统录音转写所需的等待时间。

该工具主要解决了本地部署高性能语音识别系统的难题。用户无需依赖云端 API,即可在自有服务器上利用 OpenAI 的 Whisper 模型(默认集成加速版 faster-whisper)进行高精度的多语言识别,同时结合 Huggingface 的语音活动检测(VAD)技术,智能过滤静音片段,确保处理效率与隐私安全。

VoiceStreamAI 特别适合开发者、研究人员以及需要搭建私有化语音服务的企业团队使用。其架构设计灵活,采用工厂模式和策略模式,方便技术人员根据需求替换不同的语音检测或识别组件。此外,它还支持 Docker 一键部署、GPU 加速以及安全的 SSL 加密连接,为构建稳定、可扩展的实时语音应用提供了坚实的基础设施。无论是用于开发会议记录助手、实时字幕系统,还是作为语音交互研究的基座,VoiceStreamAI 都是一个高效且可控的选择。

使用场景

某跨国医疗团队正在开发一套远程问诊系统,需要医生与患者进行实时语音沟通并同步生成多语言电子病历。

没有 VoiceStreamAI 时

  • 语音转文字依赖第三方云端 API,不仅每次调用产生高昂费用,还因患者隐私数据出境面临合规风险。
  • 传统离线转录需等待录音结束后统一处理,医生无法在问诊过程中实时查看关键信息,导致记录效率低下。
  • 缺乏智能静音检测,背景噪音或长时间停顿被无效转录,后期人工清洗数据耗时耗力。
  • 系统架构耦合度高,难以灵活切换不同的语音识别模型以适应不同语种的诊疗需求。

使用 VoiceStreamAI 后

  • 通过自托管部署 Whisper 模型,所有音频数据仅在本地服务器流转,彻底解决隐私泄露隐患并大幅降低运营成本。
  • 利用 WebSocket 实现近实时音频流传输,医生说话的同时屏幕上即刻呈现精准字幕,支持问诊中即时确认病史。
  • 内置 Huggingface VAD(语音活动检测)自动过滤静音段和环境噪点,确保生成的病历文本干净、聚焦且准确。
  • 模块化设计允许团队轻松配置多语言策略,针对不同国籍患者动态切换识别模型,无缝支撑全球化医疗服务。

VoiceStreamAI 通过私有化部署与流式处理技术,将高成本的离线转录转变为安全、即时且低延迟的实时辅助诊疗能力。

运行环境要求

操作系统
  • Linux
GPU

Docker 运行需 NVIDIA GPU (--gpus all),README 提及在 Tesla T4 (16GB) 上测试,建议显存 16GB 以获得较好性能

内存

未说明 (参考测试环境 Tesla T4 为 16GB)

依赖
notes1. 必须获取 Hugging Face PyAnnote VAD 模型的认证令牌 (auth_token) 才能运行。2. 客户端仅需现代浏览器支持 JavaScript。3. Docker 部署时建议挂载卷以避免重复下载模型。4. 默认使用 faster-whisper 进行语音识别,支持多语言。5. 短音频片段可能导致转录准确性下降。
python3.8+
transformers
pyannote.core
pyannote.audio
websockets
asyncio
sentence-transformers
faster-whisper
VoiceStreamAI hero image

快速开始

VoiceStreamAI

License: MIT

VoiceStreamAI 是一个基于 Python 3 的服务器与 JavaScript 客户端解决方案,通过 WebSocket 实现近实时的音频流传输和转录。该系统采用 Hugging Face 的语音活动检测(VAD)以及 OpenAI 的 Whisper 模型(默认使用 faster-whisper)来实现精准的语音识别与处理。

功能特性

  • 通过 WebSocket 进行实时音频流传输。
  • 模块化设计,便于集成不同的 VAD 和 ASR 技术。
  • 使用工厂模式和策略模式实现灵活的组件管理。
  • 提供单元测试框架,确保开发的健壮性。
  • 可自定义的音频分块处理策略。
  • 支持多语言转录。
  • 支持安全套接字,并可选择性地指定证书和密钥文件。

演示视频

https://github.com/alesaccoia/VoiceStreamAI/assets/1385023/9b5f2602-fe0b-4c9d-af9e-4662e42e23df

客户端演示

客户端演示

使用 Docker 运行

本指南不会详细说明如何在 Docker 中使用 CUDA,请参阅例如 这里

不过,以下是适用于 Linux 的命令:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo nvidia-ctk runtime configure --runtime=docker

sudo systemctl restart docker

您可以使用以下命令构建容器镜像:

sudo docker build -t voicestreamai .

获取 VAD 令牌后(见后续章节),运行:

sudo docker volume create huggingface_models

sudo docker run --gpus all -p 8765:8765 -v huggingface_models:/root/.cache/huggingface  -e PYANNOTE_AUTH_TOKEN='VAD_TOKEN_HERE' voicestreamai

使用卷可以避免每次重新运行容器时都重新下载 Hugging Face 模型。如果不需此功能,只需执行:

sudo docker run --gpus all -p 8765:8765 -e PYANNOTE_AUTH_TOKEN='VAD_TOKEN_HERE' voicestreamai

常规手动安装

要搭建 VoiceStreamAI 服务器,您需要 Python 3.8 或更高版本,以及以下软件包:

  1. transformers
  2. pyannote.core
  3. pyannote.audio
  4. websockets
  5. asyncio
  6. sentence-transformers
  7. faster-whisper

使用 pip 安装这些依赖:

pip install -r requirements.txt

客户端方面,您需要支持 JavaScript 的现代 Web 浏览器。

配置与使用

服务器配置

VoiceStreamAI 服务器可通过命令行参数进行自定义,允许您根据需求指定组件、主机和端口设置。

  • --vad-type:指定要使用的语音活动检测(VAD)管道类型(默认为 pyannote)。
  • --vad-args:包含 VAD 管道附加参数的 JSON 字符串。(对于 pyannote 必须提供:'{"auth_token": "VAD_AUTH_HERE"}'
  • --asr-type:指定要使用的自动语音识别(ASR)管道类型(默认为 faster_whisper)。
  • --asr-args:包含 ASR 管道附加参数的 JSON 字符串(例如,可以更改 Whisper 的 model_name)。
  • --host:设置 WebSocket 服务器的主机地址(默认为 127.0.0.1)。
  • --port:设置服务器监听的端口(默认为 8765)。
  • --certfile:如果使用安全 WebSocket,则指定 SSL 证书文件路径(默认为 None)。
  • --keyfile:如果使用安全 WebSocket,则指定 SSL 密钥文件路径(默认为 None)。

以标准配置运行服务器:

  1. https://huggingface.co/pyannote/segmentation 获取语音活动检测模型的密钥。
  2. 使用 Python 3.x 运行服务器,并在命令行中添加 VAD 密钥:
python3 -m src.main --vad-args '{"auth_token": "vad token here"}'

您可以通过以下命令查看所有命令行选项:

python3 -m src.main --help

客户端使用

  1. 在 Web 浏览器中打开 client/index.html 文件。
  2. 输入 WebSocket 地址(默认为 ws://localhost:8765)。
  3. 配置音频分块长度和偏移量,详见下文。
  4. 选择转录的语言。
  5. 点击“连接”以建立 WebSocket 连接。
  6. 使用“开始流”和“停止流”控制音频采集。

技术概览

  • Python 服务器:管理 WebSocket 连接,处理音频流,并负责语音活动检测和转录。
  • WebSockets:用于服务器与客户端之间的实时通信。
  • 语音活动检测(VAD):检测音频流中的语音活动,以优化处理效率。
  • 语音转文本: 使用 Faster Whisper 或 OpenAI 的 Whisper 模型(openai/whisper-large-v3)实现精准转录。默认使用 Faster Whisper,因为它速度更快。

技术概述

设置

工厂模式与策略模式

无论是 VAD 还是 ASR 组件,都可以轻松扩展以集成新技术,并使用与 Hugging Face 管道接口不同的模型。新的处理/分块策略可以在 server.py 中添加,并由特定客户端通过在配置中设置 “processing_strategy” 键来使用。

语音活动检测(VAD)

VoiceStreamAI 中的语音活动检测(VAD)使系统能够区分音频流中的语音段和非语音段。实施 VAD 的主要目的是提高语音转文本过程的效率和准确性:

  • 降低计算负载:通过仅识别并处理包含语音的片段,VAD 显著减少了转录所需的计算资源。考虑到在 Tesla T4(16Gb)上,语音识别管道需要 7 秒钟才能完成一次处理,在设置分块长度时应充分考虑这一点。
  • 提高转录准确性:只处理语音片段可以最大限度地减少非语音噪声被误认为语音的可能性,从而提升整体转录的准确性。
  • 优化网络利用率:在流式传输场景中,仅发送语音片段而非整个音频流,可以更有效地利用带宽。

VoiceStreamAI 使用 Hugging Face 的 VAD 模型,以确保在各种音频条件下都能可靠地检测到语音。

处理策略“SilenceAtEndOfChunk”

缓冲策略旨在在近实时处理与确保语音片段完整、准确捕获之间取得平衡。以下是缓冲的管理方式:

  • 基于分块的处理:音频流被分割成每个客户端可自定义长度的分块(默认为5秒)。
  • 静音处理:定义了一个最小静音偏移量,允许在单个分块结束之后继续监听和捕获音频。这样可以确保分块边界处的词语不会被截断,从而保持语音的上下文和完整性。不过,对于语速非常快的部分,这会引入额外的延迟,因为转录要等到检测到停顿时才会进行。
  • 动态缓冲管理:系统会为每个客户端动态管理缓冲区。当新的音频数据到达时,会被追加到该客户端的临时缓冲区中。一旦缓冲区达到分块长度,就会被处理,并清空缓冲区以准备接收新数据。

缓冲机制

客户端特定配置的消息传递

在VoiceStreamAI中,每个客户端都可以拥有独特的配置,以根据其具体需求定制转录流程。这种个性化设置通过消息传递系统实现,即JavaScript客户端将配置信息发送到Python服务器。本节将说明这些配置是如何构建和传输的。

客户端配置可以包括多种参数,例如语言偏好、分块长度和分块偏移量。例如:

  • language:指定转录的语言。如果设置为“multilanguage”以外的值,则会强制Whisper推理使用该语言。
  • processing_strategy:指定该客户端的处理类型,类似于策略模式。目前这些策略并未采用面向对象编程,而是通过server.py中的if/else语句实现。
  • chunk_length_seconds:定义每个待处理音频分块的长度。
  • chunk_offset_seconds:决定每个分块末尾用于处理音频所需的静音时间(由处理策略1使用)。

配置的传输

  1. 初始化:当客户端与服务器建立连接时,可以选择性地发送一条配置消息。该消息是一个JSON对象,包含代表客户端首选设置的键值对。

  2. JavaScript客户端设置:在演示客户端中,配置信息是从用户界面元素(如下拉菜单和输入框)收集的。一旦音频开始流动,就会创建一个JSON对象并通过WebSocket发送到服务器。例如:

function sendAudioConfig() {
    const audioConfig = {
        type: "config",
        data: {
            chunk_length_seconds: 5,
            chunk_offset_seconds: 1,
            processing_strategy: 1,
            language: language,
        },
    };
    websocket.send(JSON.stringify(audioConfig));
}

测试

在实现新的ASR、VAD或缓冲策略时,可以使用以下命令进行测试:

pip install -r requirements-dev.txt
export PYANNOTE_AUTH_TOKEN=<VAD_TOKEN_HERE>
ASR_TYPE=faster_whisper python -m unittest test.server.test_server

请确保相关环境变量已正确设置,例如VAD认证令牌。此外,还有其他针对独立ASR等模块的测试用例。

改进方向

Whisper处理小音频分块的挑战

  • 上下文丢失:较短的音频片段可能缺乏足够的上下文,导致Whisper误解语音内容或无法捕捉对话中的细微差别。
  • 准确性波动:转录的准确性会随音频分块长度的变化而变化。相比较长的分块,较小的分块可能导致转录结果不够可靠。

对音频文件的依赖

目前,VoiceStreamAI通过将分块保存为文件,再将这些文件输入模型来进行音频处理。

开发

请先fork并克隆本仓库,然后安装依赖及相关工具。

pip install -r requirements.txt
pip install -r requirements-dev.txt
npm install -g jshint@2.13.6 eslint@8.57.0

将您的修改添加到仓库中,并手动运行代码风格检查,或者将其集成到您的IDE/编辑器中。

# 对于Python
flake8 src/ test/
black --line-length 79 src/ test/
isort src/ test/

# 对于JavaScript
jshint client/*.js
eslint client/*.js

最后,提交更改并创建一个pull request。

贡献者

本项目欢迎贡献。您可以随意fork仓库并提交pull request。

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

156.8k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|5天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|5天前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架