使用Distil-Whisper和PyTorch进行实时语音转文本

2024年10月15日 由 alex 发表 23 0

在快速发展的语音识别领域,实现高准确度的同时保持低延迟是一项重大挑战。OpenAI 的 Whisper 模型为自动语音识别(ASR)设定了新的基准。然而,对于资源有限的设备上的实时应用来说,其规模可能是一个障碍。


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


系统规格

在实施过程中,我们使用了具有以下规格的系统:

  • 处理器:英特尔酷睿 i7
  • 显卡:NVIDIA GeForce RTX 2060,6GB VRAM
  • 内存:32GB DDR4 内存
  • 存储空间:1TB 固态硬盘


主要功能

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


了解 Distil-Whisper

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


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

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


项目概述

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


项目结构


├── configs
│   └── config.tomlconfig.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 依赖项。


入门


前提条件

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


第 1 步:克隆版本库


git clone https://github.com/yourusername/distil-whisper-live.gitclone 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 redisp 6379:6379 redis


第 5 步:运行应用程序


python main.pymain.py


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


工作原理


音频捕获

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


语音到文本处理

stt.py 模块使用 Hugging Face 的转换器库加载 Distil-Whisper 模型。它处理音频块,执行必要的预处理,并将数据输入模型进行转录。


噪音检测

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


Redis Pub/Sub 通信

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


模块化设计

代码库分为多个模块,每个模块负责特定的功能。这种模块化设计使系统更易于维护、扩展和集成到更大的项目中。


性能考虑因素


GPU 利用率

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


2


延迟

与完整的 Whisper 模型相比,使用 Distil-Whisper 可以缩短推理时间,从而实现适合实时应用的实时转录。


结论

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


文章来源:https://medium.com/@ec.santuh/live-speech-to-text-with-distil-whisper-and-pytorch-4f5c1e494667
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消