Project Icon

whisper_streaming

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

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

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

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号