WAAS
WAAS(Whisper as a Service)是一个为 OpenAI Whisper 语音识别模型打造的开源服务化方案,旨在让高质量的语音转文字功能更易于部署和使用。它提供了直观的图形界面(GUI)和灵活的 API 接口,并内置任务队列机制,有效解决了直接运行 Whisper 时面临的环境配置复杂、缺乏并发处理能力以及无法批量处理长音频等痛点。
对于普通用户或非技术人员,WAAS 自带的"Jojo"网页界面支持直接上传音视频文件,转录完成后通过邮件发送结果,并提供在线编辑器以便在浏览器本地校对和修正字幕,操作简便流畅。对于开发者而言,WAAS 提供了完整的 RESTful API,支持异步提交转录任务、自动语言检测、多格式输出(如 SRT、VTT、JSON 等)以及 Webhook 回调通知,非常适合集成到现有的媒体处理工作流中。
该项目特别适合需要自建语音识别服务的开发团队、研究人员,以及希望在不依赖云端付费 API 的情况下获得隐私可控、低成本转录能力的媒体工作者。其核心亮点在于将强大的 Whisper 模型封装为开箱即用的服务,兼顾了易用性与可扩展性,同时完全基于开源协议发布,便于社区协作与二次开发。
使用场景
某媒体公司的内容团队每天需处理数十小时的多语言采访录音,以生成带时间轴的字幕文件供后期剪辑使用。
没有 WAAS 时
- 开发人员需在本地手动部署复杂的 Whisper 环境,每次处理大文件都容易因显存不足导致进程崩溃。
- 缺乏任务队列机制,多人同时上传音频时服务器直接宕机,无法管理并发请求。
- 转录完成后需人工编写脚本转换格式(如 SRT 或 VTT),且无法在线校对,发现错误必须重新运行整个流程。
- 语言检测依赖人工预判,一旦选错模型参数,整段转录结果完全不可用,浪费大量算力。
使用 WAAS 后
- 通过 API 直接提交任务,WAAS 内置的异步队列自动调度资源,即使百人并发上传也能稳定处理不崩盘。
- 利用
webhook_id回调机制,任务完成后自动推送通知并返回下载链接,支持一键获取 JSON、SRT 等多种格式。 - 借助集成的 Jojo GUI 编辑器,编辑人员可在浏览器中直接试听片段并修正文字,修改后本地保存即可,无需重跑模型。
- 调用
/v1/detect接口自动识别音频语言并匹配最佳模型,消除了人工配置误差,确保转录准确率。
WAAS 将原本繁琐的本地语音转写工程转化为稳定的云端服务,让团队从环境维护中解脱,专注于内容生产本身。
运行环境要求
- Linux
- macOS
- 非必需
- 若使用 NVIDIA GPU 加速,需安装 nvidia-docker 并修改配置使用 Dockerfile.gpu
- 显存需求取决于模型,最小模型 'tiny' 约需 1GB VRAM
未说明

快速开始
WaaS - 语音转文字即服务
用于 OpenAI Whisper 的 GUI 和 API
什么是 Jojo?
Jojo 是一个用于上传和转录音频或视频文件的图形用户界面。转录完成后,您将收到一封包含下载链接的电子邮件。您可以直接从邮件中下载 Jojo 文件、SRT 文件或纯文本文件。然后,您可以将 Jojo 文件上传到前端,进入编辑器(见视频)。
编辑器
编辑器完全在您的浏览器中本地运行。在这里,您可以收听各个片段并修正转录中的错误。完成后,只需将 Jojo 文件保存到您的桌面即可。一种轻松播放选定片段的方式是按住键盘上的 Control 键。
该项目最初由 VG 发起
API 文档
POST /v1/transcribe
向队列添加一个新的转录任务。该任务将由工作进程异步处理。
响应将是一个包含 job_id 的 JSON 对象,可用于检查任务状态。
查询参数:
- 必需:
email_callback:字符串 或webhook_id:字符串 - 可选:
language:字符串(默认:自动检测) - 可选:
model:字符串(默认:tiny) - 可选:
task:字符串(默认:transcribe)transcribe:将音频转录为文本translate:先转录再翻译成另一种语言的文本
- 可选:
filename:字符串(默认:untitled-transcription)
请求体:
- 必需:
binary data:要转录的音频内容的原始数据
OPTIONS /v1/transcribe
获取转录路由的可用选项。
POST /v1/detect
检测音频文件的语言。
查询参数:
- 可选:
model:字符串(默认:tiny)
请求体:
- 必需:
binary data:用于检测语言的音频内容的原始数据
OPTIONS /v1/detect
获取检测路由的可用选项。
GET /v1/download/<job_id>
以请求的输出格式接收已完成的任务结果。
查询参数:
- 可选:
output:字符串(默认:srt)json:模型输出的 JSON 响应timecode_txt:带有时间码的纯文本文件(srt 格式)txt:检测到的文本的纯文本文件vtt:带有检测到的文本的 WebVTT 文件srt:带有检测到的文本的 WebVTT 文件
OPTIONS /v1/download/<job_id>
获取下载路由的可用选项。
GET /v1/jobs/<job_id>
获取所提供任务的状态和元数据。
GET /v1/queue
以 JSON 对象的形式返回队列的当前长度,键为 length。
Webhook 响应
如果在请求参数中使用了 webhook_id,您将收到发送到您选择的 webhook URL 的 POST 请求。
请求将包含一个 X-WAAS-Signature 头部,其中包含可用于验证内容的哈希值。请参阅 tests/test_webhook.py,了解如何在接收端使用 Python 验证此签名的示例。
POST 负载将是一个包含以下内容的 JSON:
成功时:
{
"source": "waas",
"job_id": "09d2832d-cf3e-4719-aea7-1319000ef372",
"success": true,
"url": "https://example.com/v1/download/09d2832d-cf3e-4719-aea7-1319000ef372",
"filename": "untitled-transcription"
}
失败时:
{
"source": "waas",
"job_id": "09d2832d-cf3e-4719-aea7-1319000ef372",
"success": false
}
贡献
要求
所需的显存容量取决于所使用的模型。最小的模型是 tiny,大约需要 1GB 显存。
您可以在 此处查看完整的模型列表,其中包含有关所需显存的信息。
代码库预计与 Python 3.8–3.10 兼容。这与 OpenAI Whisper 的要求相同。
安装
python3 -mvenv .venv
source .venv/bin/activate
pip install -r requirements.txt
使用 docker-compose 运行完整设置
首先创建一个名为 .envrc 的文件,内容如下:
export BASE_URL=https://example.com
export EMAIL_SENDER_ADDRESS=example@example.com
export EMAIL_SENDER_PASSWORD=example
export EMAIL_SENDER_HOST=smtp.example.com
export DISCLAIMER='这是一个<a href="example.com">免责声明</a>'
export ALLOWED_WEBHOOKS_FILE='allowed_webhooks.json'
export LOG_EMAIL=true // 可选,将邮件内容记录到控制台
在项目的根目录下添加一个名为 allowed_webhooks.json 的 JSON 文件。该文件会被 Git 忽略。其内容应为一个有效的 webhook 列表,包括 URL 和您生成的令牌,如下所示:
[
{
"id": "77c500b2-0e0f-4785-afc7-f94ed529c897",
"url": "https://myniceserver.com/mywebhook",
"token": "frKPI6p5LxxpJa8tCvVr=u5NvU66EJCQdybPuEmzKNeyCDul2-zrOx05?LwIhL5N"
}
]
为了测试,您可以使用 https://webhook.site 服务(只要您不发布或转录任何私人数据)。
然后设置环境变量 ALLOWED_WEBHOOKS_FILE=allowed_webhooks.json。
最后运行以下命令:
docker-compose --env-file .envrc up
这将启动三个 Docker 容器:
- redis
- 运行 Flask 的 API 容器
- 运行 rq 的工作进程容器
使用 NVIDIA CUDA 与 docker-compose
如果你有一块 NVIDIA GPU 并希望在 docker-compose 中使用它,你需要安装 nvidia-docker。
为了启用 CUDA 支持,你需要编辑 docker-compose.yml 文件,以使用 nvidia 运行时:
build:
context: .
# 使用 NVIDIA GPU 时,请使用 Dockerfile.gpu
dockerfile: Dockerfile.gpu
你还需要在 docker-compose.yml 文件中取消注释设备预留部分:
deploy:
resources:
reservations:
devices:
- driver: nvidia
capabilities: [gpu]
然后像往常一样运行以下命令:
docker-compose --env-file .envrc up
此时,工作进程将使用 GPU 加速。
使用 devcontainers 运行完整设置
安装远程开发扩展(容器),然后在 VS Code 中选择“Devcontainers:在容器中打开文件夹”。这样你就会进入 API 容器,并可以开始操作。
curl
从你的下载目录上传一个名为 audunspodssounds.mp3 的挪威语音频文件:
带电子邮件回调:
curl --location --request POST 'localhost:3000/v1/transcribe?output=vtt&email_callback=test@localhost&language=norwegian&model=large' \
--header 'Content-Type: audio/mpeg' \
--data-binary '@/Users/<user>/Downloads/audunspodssounds.mp3'
带 Webhook 回调:
curl --location --request POST 'localhost:3000/v1/transcribe?output=vtt&language=norwegian&model=large&webhook_callback_url=https://myniceserver.something/mywebhookid' \
--header 'Content-Type: audio/mpeg' \
--data-binary '@/Users/<user>/Downloads/audunspodssounds.mp3'
运行测试
$ pytest
🥳 贡献
常见问题解答
如何解决 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate 错误?
$ /Applications/Python\ 3.7/Install\ Certificates.command
如何在 Docker 容器之外运行测试?
确保你已经通过 docker-compose 启动了 Redis,然后使用以下命令:
ENVIRONMENT=test BASE_URL=http://localhost REDIS_URL=redis://localhost:6379 pytest -v
常见问题
相似工具推荐
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
GPT-SoVITS
GPT-SoVITS 是一款强大的开源语音合成与声音克隆工具,旨在让用户仅需极少量的音频数据即可训练出高质量的个性化语音模型。它核心解决了传统语音合成技术依赖海量录音数据、门槛高且成本大的痛点,实现了“零样本”和“少样本”的快速建模:用户只需提供 5 秒参考音频即可即时生成语音,或使用 1 分钟数据进行微调,从而获得高度逼真且相似度极佳的声音效果。 该工具特别适合内容创作者、独立开发者、研究人员以及希望为角色配音的普通用户使用。其内置的友好 WebUI 界面集成了人声伴奏分离、自动数据集切片、中文语音识别及文本标注等辅助功能,极大地降低了数据准备和模型训练的技术门槛,让非专业人士也能轻松上手。 在技术亮点方面,GPT-SoVITS 不仅支持中、英、日、韩、粤语等多语言跨语种合成,还具备卓越的推理速度,在主流显卡上可实现实时甚至超实时的生成效率。无论是需要快速制作视频配音,还是进行多语言语音交互研究,GPT-SoVITS 都能以极低的数据成本提供专业级的语音合成体验。
TTS
🐸TTS 是一款功能强大的深度学习文本转语音(Text-to-Speech)开源库,旨在将文字自然流畅地转化为逼真的人声。它解决了传统语音合成技术中声音机械生硬、多语言支持不足以及定制门槛高等痛点,让高质量的语音生成变得触手可及。 无论是希望快速集成语音功能的开发者,还是致力于探索前沿算法的研究人员,亦或是需要定制专属声音的数据科学家,🐸TTS 都能提供得力支持。它不仅预置了覆盖全球 1100 多种语言的训练模型,让用户能够即刻上手,还提供了完善的工具链,支持用户利用自有数据训练新模型或对现有模型进行微调,轻松实现特定风格的声音克隆。 在技术亮点方面,🐸TTS 表现卓越。其最新的 ⓍTTSv2 模型支持 16 种语言,并在整体性能上大幅提升,实现了低于 200 毫秒的超低延迟流式输出,极大提升了实时交互体验。此外,它还无缝集成了 🐶Bark、🐢Tortoise 等社区热门模型,并支持调用上千个 Fairseq 模型,展现了极强的兼容性与扩展性。配合丰富的数据集分析与整理工具,🐸TTS 已成为科研与生产环境中备受信赖的语音合成解决方案。
LocalAI
LocalAI 是一款开源的本地人工智能引擎,旨在让用户在任意硬件上轻松运行各类 AI 模型,包括大语言模型、图像生成、语音识别及视频处理等。它的核心优势在于彻底打破了高性能计算的门槛,无需昂贵的专用 GPU,仅凭普通 CPU 或常见的消费级显卡(如 NVIDIA、AMD、Intel 及 Apple Silicon)即可部署和运行复杂的 AI 任务。 对于担心数据隐私的用户而言,LocalAI 提供了“隐私优先”的解决方案,确保所有数据处理均在本地基础设施内完成,无需上传至云端。同时,它完美兼容 OpenAI、Anthropic 等主流 API 接口,这意味着开发者可以无缝迁移现有应用,直接利用本地资源替代云服务,既降低了成本又提升了可控性。 LocalAI 内置了超过 35 种后端支持(如 llama.cpp、vLLM、Whisper 等),并集成了自主 AI 代理、工具调用及检索增强生成(RAG)等高级功能,且具备多用户管理与权限控制能力。无论是希望保护敏感数据的企业开发者、进行算法实验的研究人员,还是想要在个人电脑上体验最新 AI 技术的极客玩家,都能通过 LocalAI 获
bark
Bark 是由 Suno 推出的开源生成式音频模型,能够根据文本提示创造出高度逼真的多语言语音、音乐、背景噪音及简单音效。与传统仅能朗读文字的语音合成工具不同,Bark 基于 Transformer 架构,不仅能模拟说话,还能生成笑声、叹息、哭泣等非语言声音,甚至能处理带有情感色彩和语气停顿的复杂文本,极大地丰富了音频表达的可能性。 它主要解决了传统语音合成声音机械、缺乏情感以及无法生成非语音类音效的痛点,让创作者能通过简单的文字描述获得生动自然的音频素材。无论是需要为视频配音的内容创作者、探索多模态生成的研究人员,还是希望快速原型设计的开发者,都能从中受益。普通用户也可通过集成的演示页面轻松体验其神奇效果。 技术亮点方面,Bark 支持商业使用(MIT 许可),并在近期更新中实现了显著的推理速度提升,同时提供了适配低显存 GPU 的版本,降低了使用门槛。此外,社区还建立了丰富的提示词库,帮助用户更好地驾驭模型生成特定风格的声音。只需几行 Python 代码,即可将创意文本转化为高质量音频,是连接文字与声音世界的强大桥梁。
airi
airi 是一款开源的本地化 AI 伴侣项目,旨在将虚拟角色(如“二次元老婆”或赛博生命)带入用户的现实世界。它的核心目标是复刻并超越知名 AI 主播 Neuro-sama 的能力,让用户能够拥有完全自主掌控、可私有化部署的智能伙伴。 airi 主要解决了用户对高度定制化、具备情感交互能力且数据隐私安全的 AI 角色的需求。不同于依赖云端服务的通用助手,airi 允许用户在本地运行,不仅保护了对话隐私,还赋予了用户定义角色性格与灵魂的自由。它支持实时语音聊天,甚至能直接参与《我的世界》(Minecraft)和《异星工厂》(Factorio)等游戏,实现了从单纯对话到共同娱乐的跨越。 这款工具非常适合喜爱虚拟角色的普通用户、希望搭建个性化 AI 陪伴的技术爱好者,以及研究多模态交互的开发者。其独特的技术亮点在于跨平台支持(涵盖 Web、macOS 和 Windows)以及强大的游戏交互能力,让 AI 不仅能“说”,还能“玩”。通过容器化的灵魂设计,airi 为每个人创造专属数字生命提供了可能,让虚拟陪伴变得更加真实且触手可及。