Distil-Whisper实时ASR

在快速发展的语音识别领域,实现高精度的同时保持低延迟是一项重大挑战。OpenAI 的 Whisper 模型为自动语音识别 (ASR) 树立了新的标杆。然而,其规模可能会成为资源受限设备上实时应用的障碍。

为了解决这个问题,我们可以利用 Distil-Whisper,这是 Hugging Face 提供的 Whisper 模型的精简版,它可以减小模型大小,同时保留其大部分性能。在这篇博文中,我们将探讨如何使用 Distil-Whisper 实现实时语音转文本系统,直接从麦克风获取输入。此外,我们将讨论集成 Redis 以实现高效的进程间通信,以及如何构建代码以实现模块化和易于集成。

对于此实现,我们的运行环境使用了具有以下规格的系统:

  • 处理器:Intel Core i7
  • 显卡:配备 6GB VRAM 的 NVIDIA GeForce RTX 2060
  • 内存:32GB DDR4 RAM
  • 存储:1TB SSD

系统的主要功能如下:

  • 实时语音转文本:麦克风输入的实时转录。
  • Redis Pub/Sub 通信:高效的消息传递,便于进一步处理。
  • 模块化代码库:组织结构,易于理解和修改。
  • 轻松集成:简化与大型项目的整合。

1、了解 Distil-Whisper

Distil-Whisper 是 OpenAI Whisper 的轻量级版本,经过精简,速度更快、内存效率更高,同时仍提供令人印象深刻的转录功能。这使其适用于需要实时转录且性能至关重要的用例。

在此项目中,我们将 Distil-Whisper 集成到实时语音转文本管道中。主要功能包括:

  • 麦克风实时输入,用于实时转录。
  • 使用 Redis Pub/Sub 将转录文本发送到其他服务或应用程序。
  • 模块化结构,使代码易于扩展并集成到其他项目中。

2、项目概述

该项目的目标是创建一个实时语音转文本系统,该系统可监听麦克风输入,使用 Distil-Whisper 实时转录音频,并将转录文本发布到 Redis 服务器以供下游应用程序使用。

2.1 项目结构

├── configs
│   └── config.toml
├── internal
│   ├── app.py
│   ├── core
│   │   ├── audio_src.py
│   │   ├── stt.py
│   ├── server
│   │   └── pubsub.py
│   └── utils
│       ├── config.py
│       ├── logger.py
│       ├── noise_check.py
│       └── textformat.py
├── logs
│   └── server.log
├── main.py
├── README.md
└── requirements.txt
  • configs/config.toml:用于设置麦克风详细信息和其他参数的配置文件。
  • internal/app.py:应用程序逻辑的入口点。
  • internal/core:包含音频捕获和语音转文本处理等核心功能。
  • audio_src.py:处理麦克风输入。
  • stt.py:使用 Distil-Whisper 管理语音转文本转换。
  • internal/server/pubsub.py:实现 Redis Pub/Sub 进行消息通信。
  • internal/utils:用于配置管理、日志记录、噪声检测和文本格式化的实用程序模块。
  • main.py:运行应用程序的主要脚本。
  • logs/server.log:捕获应用程序运行时日志的日志文件。
  • requirements.txt:列出所有 Python 依赖项。

2、快速入门

先决条件:

  • Python 3.10 或更高版本
  • PyTorch 2.0 或更高版本
  • Redis 服务器(用于 Pub/Sub 功能)
  • Docker(可选,用于容器化开发)

步骤 1:克隆存储库

git clone https://github.com/yourusername/distil-whisper-live.git
cd distil-whisper-live

步骤 2:安装依赖项

建议使用虚拟环境来管理依赖项。

python3 -m venv venv
source venv/bin/activate  # On Windows use `venv\Scripts\activate`
pip install -r requirements.txt

步骤 3:配置应用程序

编辑 configs/config.toml 文件以匹配您的麦克风设置:

[microphone]
name = "Your Microphone Name"
sample_rate = 16000  # Adjust as needed
chunk_size = 1024

您可能需要根据您的环境调整 config.toml 中的 noise_threshold,以有效过滤背景噪音。

步骤 4:运行 Redis 服务器

确保 Redis 服务器在本地运行。您可以使用 Docker 启动一个:

docker run -p 6379:6379 redis

步骤 5:运行应用程序

python main.py

应用程序将开始从您的麦克风捕获音频,实时执行语音到文本的转录,并将结果发布到 Redis 服务器。

3、工作原理

  • 音频捕获

audio_src.py 模块使用 pyaudio 库实时捕获来自麦克风的音频数据。它处理音频流初始化、读取音频数据块以及在应用程序停止时关闭音频流。

  • 语音转文本处理

stt.py 模块使用 Hugging Face 的 transformers 库加载 Distil-Whisper 模型。它处理音频块、执行必要的预处理并将数据提供给模型进行转录。

  • 噪音检测

noise_check.py 模块包括检测和过滤静音或背景噪音的功能,确保只处理重要的音频,从而提高效率和准确性。

  • Redis 发布/订阅通信

pubsub.py 模块负责将转录的文本发布到 Redis 频道。这允许其他应用程序或服务订阅频道并实时接收转录的文本,从而促进解耦和可扩展的架构。

  • 模块化设计

代码库被组织成模块,每个模块负责特定的功能。这种模块化使系统更容易维护、扩展和集成到更大的项目中。

4、性能考虑因素

  • GPU 利用率

如果您拥有兼容 CUDA 的 GPU,应用程序将利用它进行模型推理,从而显著提高性能。

  • 延迟

通过使用 Distil-Whisper,与完整的 Whisper 模型相比,推理时间有所减少,从而实现了适合实时应用的实时转录。

5、为什么选择 Redis Pub/Sub?

Redis Pub/Sub 允许在服务之间高效地广播消息。在此项目中,转录完成后,文本将发布到 Redis 频道。订阅此频道的任何服务都可以实时接收转录。这对于以下情况特别有用:

  • 与需要实时文本输入的后端系统集成。
  • 开发需要立即转录的聊天机器人或虚拟助手。
  • 将转录输入分析管道以进行进一步处理。

6、潜在应用

  • 虚拟助手:实时转录可以增强语音控制的 AI 助手。
  • 实时字幕:为现场活动或广播提供字幕。
  • 语音命令识别:与需要语音命令进行控制的系统集成。
  • 辅助功能工具:为有听力障碍的人提供的辅助技术。

7、挑战和未来改进

  • 噪声稳健性

背景噪声仍然会影响转录准确性。未来的改进可能包括集成更先进的噪声抑制技术。

  • 模型微调

在特定数据集上微调 Distil-Whisper 模型可以提高特定领域词汇或口音的准确性。

  • 可扩展性

为了处理多个音频流或扩展服务,请考虑使用 Kubernetes 等容器编排工具部署应用程序。

8、结束语

通过利用 Distil-Whisper 模型并构建模块化和实时处理的应用程序,我们为实时语音转文本应用程序奠定了基础。集成 Redis 进行消息传递为构建复杂的系统提供了可能性,这些系统可以使用转录数据来实现各种目的。


原文链接:Live Speech-to-Text with Distil-Whisper and PyTorch

BimAnt翻译整理,转载请标明出处