File size: 4,273 Bytes
fe90877
1bf36cc
fe90877
 
 
 
 
 
 
c967100
1bf36cc
c967100
1bf36cc
c967100
1bf36cc
c967100
1bf36cc
 
 
 
 
fe90877
1bf36cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c967100
 
 
 
1bf36cc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
---
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)