
基于Whisper的实时语音转录和翻译开源系统
whisper_streaming是基于Whisper模型的实时语音转录和翻译系统。该项目采用本地协议和自适应延迟实现流式转录,在长篇未分段语音测试中实现高质量转录,延迟仅3.3秒。系统提供多种后端选择,支持GPU加速,适用于多语言会议实时转录。项目还提供灵活API,便于开发者集成到不同应用场景。
Whisper实时流式处理用于长语音转文本转录和翻译
将Whisper转变为实时转录系统
演示论文,作者:Dominik Macháček、Raj Dabre、Ondřej Bojar,2023年
摘要:Whisper是最近的多语言语音识别和翻译模型之一,处于最先进水平,但它并非为实时转录而设计。在本文中,我们在Whisper的基础上创建了Whisper-Streaming,这是一个Whisper类模型的实时语音转录和翻译实现。Whisper-Streaming使用具有自适应延迟的本地一致性策略来实现流式转录。我们展示了Whisper-Streaming在未分段的长形式语音转录测试集上实现了高质量和3.3秒的延迟,并证明了它作为多语言会议实时转录服务组件的稳健性和实用性。
幻灯片 -- IJCNLP-AACL 2023 15分钟口头报告
请引用我们。ACL Anthology,Bibtex引用:
@inproceedings{machacek-etal-2023-turning,
title = "Turning Whisper into Real-Time Transcription System",
author = "Mach{\'a}{\v{c}}ek, Dominik and
Dabre, Raj and
Bojar, Ond{\v{r}}ej",
editor = "Saha, Sriparna and
Sujaini, Herry",
booktitle = "Proceedings of the 13th International Joint Conference on Natural Language Processing and the 3rd Conference of the Asia-Pacific Chapter of the Association for Computational Linguistics: System Demonstrations",
month = nov,
year = "2023",
address = "Bali, Indonesia",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2023.ijcnlp-demo.3",
pages = "17--24",
}
pip install librosa soundfile -- 音频处理库
Whisper后端。
集成了几种替代后端。最推荐的是支持GPU的faster-whisper。按照他们的说明安装NVIDIA库 -- 我们成功使用了CUDNN 8.5.0和CUDA 11.7。使用pip install faster-whisper安装。
另一种限制较少但速度较慢的后端是whisper-timestamped:pip install git+https://github.com/linto-ai/whisper-timestamped
第三,也可以通过OpenAI Whisper API运行此软件。这种解决方案速度快且不需要GPU,只需一个小型虚拟机就足够了,但你需要向OpenAI支付API访问费用。另外请注意,由于每个音频片段都会被多次处理,价格会比定价页面上显示的更高,所以在使用时请密切关注成本。设置更高的chunk-size可以显著降低成本。
使用以下命令安装:pip install openai
要使用openai-api后端运行,请确保在OPENAI_API_KEY环境变量中设置了你的OpenAI API密钥。例如,在运行之前,执行:export OPENAI_API_KEY=sk-xxx,将sk-xxx替换为你的API密钥。
后端仅在被选择时加载。未使用的后端无需安装。
集成并评估了两种缓冲区修剪选项。它们对质量和延迟有影响。根据我们的测试,默认的"segment"选项表现更好,且不需要安装任何句子分割器。
另一个选项"sentence" -- 在确认的句子结尾处修剪,需要安装句子分割器。它通过 句号将带标点的文本分割成句子,避开不是句号的点。分割器是特定语言的。未使用的分割器无需安装。我们集成了以下分割器,但欢迎对更好的替代方案提出建议。
pip install opus-fast-mosestokenizer用于语言代码为as bn ca cs de el en es et fi fr ga gu hi hu is it kn lt lv ml mni mr nl or pa pl pt ro ru sk sl sv ta te yue zh的语言
pip install tokenize_uk用于乌克兰语 -- uk
对于其他语言,我们集成了wtpslit的性能良好的多语言模型。它需要pip install torch wtpsplit,以及其神经网络模型wtp-canine-s-12l-no-adapters。首次使用时会下载到默认的huggingface缓存中。
我们没有找到Whisper支持但wtpsplit不支持的语言as ba bo br bs fo haw hr ht jw lb ln lo mi nn oc sa sd sn so su sw tk tl tt的分割器。这些语言的默认备选方案是使用未指定语言的wtpsplit。欢迎提供替代建议。
如果在安装opus-fast-mosestokenizer时遇到问题,特别是在Windows和Mac上,我们建议只使用不需要它的"segment"选项。
usage: whisper_online.py [-h] [--min-chunk-size MIN_CHUNK_SIZE] [--model {tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large-v1,large-v2,large-v3,large}] [--model_cache_dir MODEL_CACHE_DIR] [--model_dir MODEL_DIR] [--lan LAN] [--task {transcribe,translate}]
[--backend {faster-whisper,whisper_timestamped,openai-api}] [--vad] [--buffer_trimming {sentence,segment}] [--buffer_trimming_sec BUFFER_TRIMMING_SEC] [--start_at START_AT] [--offline] [--comp_unaware]
audio_path
位置参数:
audio_path 用于模拟实时流的16kHz单声道wav文件名。
选项:
-h, --help 显示此帮助信息并退出
--min-chunk-size MIN_CHUNK_SIZE
最小音频块大小(秒)。它最多等待这么长时间才进行处理。如果处理时间更短,它会等待,否则会处理在此期间接收到的整个片段。
--model {tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large-v1,large-v2,large-v3,large}
要使用的Whisper模型的名称大小(默认:large-v2)。如果模型缓存目录中不存在,会自动从模型中心下载。
--model_cache_dir MODEL_CACHE_DIR
覆盖默认模型缓存目录,用于保存从模型中心下载的模型
--model_dir MODEL_DIR
保存Whisper model.bin和其他文件的目录。此选项覆盖--model和--model_cache_dir参数。
--lan LAN, --language LAN
源语言代码,例如en,de,cs,或'auto'用于语言检测。
--task {transcribe,translate}
转录或翻译。
--backend {faster-whisper,whisper_timestamped,openai-api}
仅加载此后端进行Whisper处理。
--vad 使用VAD = 语音活动检测,使用默认参数。
--buffer_trimming {sentence,segment}
缓冲区修剪策略 -- 修剪由标点符号标记并由句子分割器检测到的已完成句子,或由Whisper返回的已完成段落。"sentence"选项需要安装句子分割器。
--buffer_trimming_sec BUFFER_TRIMMING_SEC
缓冲区修剪长度阈值(秒)。如果缓冲区长度超过此值,将触发句子/段落修剪。
--start_at START_AT 在此时间开始处理音频。
--offline 离线模式。
--comp_unaware 计算不感知模拟。
示例:
它从预先录制的单声道16k wav文件模拟实时处理。
python3 whisper_online.py en-demo16.wav --language en --min-chunk-size 1 > out.txt
模拟模式:
默认模式,无特殊选项:从文件进行实时模拟,计算感知。块大小为MIN_CHUNK_SIZE或更大,如果在上次更新计算期间到达了更多音频。
--comp_unaware选项:计算不感知模拟。这意味着计算发射时间的计时器在模型计算时"停止"。块大小始终为MIN_CHUNK_SIZE。延迟仅由模型无法确认输出引起,例如由于语言歧义等,而不是由于硬件速度慢或实现不佳。我们实现此功能是为了找出延迟的下限。
--start_at START_AT:在此时间开始处理音频。第一次更新接收到START_AT之前的所有音频。这对调试很有用,例如当我们在音频文件的特定时间观察到错误,并想快速重现它,而无需长时间等待。
--offline选项:它一次性处理整个音频文件,以离线模式。我们实现它是为了找出给定音频文件上可能的最低WER。
2691.4399 300 1380 Chairman, thank you.
6914.5501 1940 4940 If the debate today had a
9019.0277 5160 7160 the subject the situation in
10065.1274 7180 7480 Gaza
11058.3558 7480 9460 Strip, I might
12224.3731 9460 9760 have
13555.1929 9760 11060 joined Mrs.
14928.5479 11140 12240 De Kaiser and all the
16588.0787 12240 12560 other
18324.9285 12560 14420 colleagues across the
简而言之:使用OnlineASRProcessor对象及其方法insert_audio_chunk和process_iter。 whisper_online.py 代码有很好的 注释,请将其作为完整文档阅读。
以下伪代码描述了我们建议您实现的接口。您可以根据应用需求实现任何功能。
from whisper_online import * src_lan = "en" # 源语言 tgt_lan = "en" # 目标语言 -- 对于ASR任务与源语言相同,如果使用翻译任务则为"en" asr = FasterWhisperASR(lan, "large-v2") # 加载并封装Whisper模型 # 设置选项: # asr.set_translate_task() # 将从lan翻译成英语 # asr.use_vad() # 设置使用VAD online = OnlineASRProcessor(asr) # 创建处理对象,使用默认缓冲区裁剪选项 while 音频未结束: # 处理循环: a = # 接收新的音频块(例如,先等待min_chunk_size秒,...) online.insert_audio_chunk(a) o = online.process_iter() print(o) # 对当前部分输出进行处理 # 在音频处理结束时 o = online.finish() print(o) # 对最后的输出进行处理 online.init() # 如果要重复使用该对象处理下一段音频,请刷新
whisper_online_server.py 具有与 whisper_online.py 相同的模型选项,另外还有 --host 和 --port 用于TCP连接,以及 --warmup-file。请查看帮助信息(-h 选项)。
客户端示例:
arecord -f S16_LE -c1 -r 16000 -t raw -D default | nc localhost 43001
arecord 以原始音频格式从声音设备(如麦克风)发送实时音频 -- 16000采样率,单声道,S16_LE -- 有符号16位整数小端序。(使用适合您的arecord替代方案)
nc 是带有服务器主机和端口的netcat
默认的Whisper适用于最长30秒且包含一个完整句子的音频块。更长的音频文件必须被分割成更短的块,并用"初始提示"合并。在低延迟同步流模式下,简单和幼稚的固定大小窗口分块效果不佳,可能会在单词中间分割。同时还需要知道转录何时稳定,应该确认("提交")并跟进,以及何时未来内容使转录更清晰。
为此,有LocalAgreement-n策略:如果n个连续更新(每个都有新可用的音频流块)在前缀转录上达成一致,则确认该转录。(参考:IWSLT 2022等的CUNI-KIT)
在本项目中,我们重用了Peter Polák的这个演示中的想法:
https://github.com/pe-trik/transformers/blob/online_decode/examples/pytorch/online-decoding/whisper-online-demo.py
然而,它不进行任何句子分割,但Whisper会产生标点符号,而faster-whisper和whisper_transcribed库会生成单词级时间戳。简而言之:我们连续处理新的音频块,输出经2次迭代确认的转录,并在确认的完整句子时间戳处滚动音频处理缓冲区。处理音频缓冲区不会太长,处理速度很快。
更详细地说:我们使用初始提示,处理不准确的时间戳,重新处理确认的句子前缀并跳过它们,确保它们不重叠,并限制处理缓冲区窗口。
欢迎贡献。我们特别感谢:
Dominik Macháček, machacek@ufal.mff.cuni.cz


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。


选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。


AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号