|
--- |
|
title: 伪流式音频转写 + LLM优化系统 |
|
emoji: 🎙️ |
|
colorFrom: indigo |
|
colorTo: pink |
|
sdk: docker |
|
app_file: app.py |
|
pinned: false |
|
--- |
|
|
|
# 伪流式音频转写 + LLM优化系统 |
|
|
|
这个项目实现了一个伪流式音频转写系统,包括VAD分段、Whisper转录、语义聚合、LLM优化和翻译等功能。系统采用模块化设计,各个组件可以独立工作,也可以组合使用。 |
|
|
|
## 系统架构 |
|
|
|
```mermaid |
|
graph TD |
|
A[音频流输入] --> B[VAD] |
|
B --> C[Transcribe] |
|
C --> D[语义聚合控制器] |
|
|
|
D --> E[即时输出模块] |
|
D --> F[LLM 优化调度器] |
|
|
|
F --> G[优化后回填模块] |
|
G --> E |
|
E --> H[翻译模块] |
|
``` |
|
|
|
## 主要模块 |
|
|
|
- **VAD分段器**: 根据能量、静音、说话边界等信号判断语音段落 |
|
- **Whisper转录模块**: 对每段VAD输出进行whisper转写,输出文本+时间戳 |
|
- **语义聚合控制器**: 维护segment缓冲池,判断是否组成完整语义单元,推送到下游 |
|
- **即时输出模块**: 将聚合后的转写结果立即显示给用户 |
|
- **LLM优化调度器**: 接收待优化句子,加入优化任务队列 |
|
- **优化后回填模块**: 对照原句编号,将LLM优化结果回填替换 |
|
- **翻译模块**: 接收所有来自即时输出模块的句子,将其翻译为目标语言 |
|
|
|
## 语义聚合控制器 |
|
|
|
语义聚合控制器是系统的核心模块,负责将多个音频片段的转录结果聚合成完整的语义单元(句子),并推送到下游模块(显示和翻译)。 |
|
|
|
### 主要功能 |
|
|
|
1. **维护转录片段缓冲池**:收集来自转录模块的片段,直到形成完整语义单元 |
|
2. **判断语义完整性**:使用ChatGPT进行few-shot学习,判断多个片段是否组成完整句子 |
|
3. **重新转录**:将多个片段的音频合并,进行整体重新转录,提高准确性 |
|
4. **推送到下游**:将聚合结果发送到显示模块和翻译模块 |
|
|
|
详细信息请参考 [aggregator/README.md](aggregator/README.md)。 |
|
|
|
## 使用示例 |
|
|
|
### 完整流程示例 |
|
|
|
```python |
|
from vad.vad import VoiceActivityDetector |
|
from transcribe.transcribe import AudioTranscriber |
|
from display.display import OutputRenderer |
|
from translator.translator import NLLBTranslator |
|
from aggregator.semantic_aggregator import SemanticAggregator |
|
|
|
# 初始化各个模块 |
|
vad = VoiceActivityDetector() |
|
transcriber = AudioTranscriber(model="small", device="cuda") |
|
renderer = OutputRenderer() |
|
translator = NLLBTranslator() |
|
|
|
# 回调函数 |
|
def display_callback(sentence_id, text, state): |
|
renderer.display(sentence_id, text, state) |
|
|
|
def translate_callback(sentence_id, text): |
|
translation = translator.translate(text) |
|
print(f"[翻译] 句子 {sentence_id}: {translation}") |
|
|
|
# 初始化聚合器 |
|
aggregator = SemanticAggregator( |
|
on_display=display_callback, |
|
on_translate=translate_callback, |
|
transcriber=transcriber |
|
) |
|
|
|
# 处理音频 |
|
audio_data, sample_rate = sf.read("audio.wav") |
|
segments = vad.detect_voice_segments(audio_data, sample_rate) |
|
|
|
for i, (start, end) in enumerate(segments): |
|
segment_audio = audio_data[int(start * sample_rate):int(end * sample_rate)] |
|
results = transcriber.transcribe_segment(segment_audio, start_time=start) |
|
|
|
for result in results: |
|
result.segment_index = i + 1 |
|
aggregator.add_segment(result) |
|
|
|
# 最后强制刷新缓冲区 |
|
aggregator.flush(force=True) |
|
``` |
|
|
|
更详细的示例请参考 [aggregator/integration_example.py](aggregator/integration_example.py)。 |
|
|
|
## API服务 |
|
|
|
系统也提供了REST API服务,可以通过HTTP请求进行音频转写。 |
|
|
|
### API端点 |
|
|
|
- `GET /` → 健康检查 |
|
- `POST /transcribe` → 上传`.wav/.mp3`文件并接收转写文本 |
|
|
|
### 使用示例 (cURL) |
|
|
|
```bash |
|
curl -X POST https://your-space-name.hf.space/transcribe \ |
|
-F "[email protected]" |
|
``` |
|
|
|
## 安装与运行 |
|
|
|
### 环境要求 |
|
|
|
- Python 3.8+ |
|
- PyTorch 1.12+ |
|
- CUDA 11.6+ (如果使用GPU) |
|
|
|
### 安装依赖 |
|
|
|
```bash |
|
pip install -r requirements.txt |
|
``` |
|
|
|
### 运行API服务 |
|
|
|
```bash |
|
python app.py |
|
``` |
|
|
|
### 运行集成示例 |
|
|
|
```bash |
|
# 设置OpenAI API密钥(用于句子完整性判断) |
|
export OPENAI_API_KEY=your_api_key |
|
|
|
# 运行集成示例 |
|
python -m aggregator.integration_example |
|
``` |
|
|
|
## 许可证 |
|
|
|
[MIT License](LICENSE) |
|
|