whisper_streaming

whisper_streaming

基于Whisper的实时语音转录和翻译开源系统

whisper_streaming是基于Whisper模型的实时语音转录和翻译系统。该项目采用本地协议和自适应延迟实现流式转录,在长篇未分段语音测试中实现高质量转录,延迟仅3.3秒。系统提供多种后端选择,支持GPU加速,适用于多语言会议实时转录。项目还提供灵活API,便于开发者集成到不同应用场景。

Whisper实时转录语音识别多语言流式处理Github开源项目

whisper_streaming

Whisper实时流式处理用于长语音转文本转录和翻译

将Whisper转变为实时转录系统

演示论文,作者:Dominik MacháčekRaj DabreOndřej Bojar,2023年

摘要:Whisper是最近的多语言语音识别和翻译模型之一,处于最先进水平,但它并非为实时转录而设计。在本文中,我们在Whisper的基础上创建了Whisper-Streaming,这是一个Whisper类模型的实时语音转录和翻译实现。Whisper-Streaming使用具有自适应延迟的本地一致性策略来实现流式转录。我们展示了Whisper-Streaming在未分段的长形式语音转录测试集上实现了高质量和3.3秒的延迟,并证明了它作为多语言会议实时转录服务组件的稳健性和实用性。

论文PDF演示视频

幻灯片 -- IJCNLP-AACL 2023 15分钟口头报告

请引用我们。ACL AnthologyBibtex引用

@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",
}

安装

  1. pip install librosa soundfile -- 音频处理库

  2. Whisper后端。

集成了几种替代后端。最推荐的是支持GPU的faster-whisper。按照他们的说明安装NVIDIA库 -- 我们成功使用了CUDNN 8.5.0和CUDA 11.7。使用pip install faster-whisper安装。

另一种限制较少但速度较慢的后端是whisper-timestampedpip 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密钥。

后端仅在被选择时加载。未使用的后端无需安装。

  1. 可选,不推荐:句子分割器(又称句子标记器)

集成并评估了两种缓冲区修剪选项。它们对质量和延迟有影响。根据我们的测试,默认的"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-whisperwhisper_transcribed库会生成单词级时间戳。简而言之:我们连续处理新的音频块,输出经2次迭代确认的转录,并在确认的完整句子时间戳处滚动音频处理缓冲区。处理音频缓冲区不会太长,处理速度很快。

更详细地说:我们使用初始提示,处理不准确的时间戳,重新处理确认的句子前缀并跳过它们,确保它们不重叠,并限制处理缓冲区窗口。

性能评估

请参阅论文。

贡献

欢迎贡献。我们特别感谢:

联系方式

Dominik Macháček, machacek@ufal.mff.cuni.cz

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

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

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

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

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

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

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多