tianyaogavin's picture
init main framework
1bf36cc
metadata
title: 伪流式音频转写 + LLM优化系统
emoji: 🎙️
colorFrom: indigo
colorTo: pink
sdk: docker
app_file: app.py
pinned: false

伪流式音频转写 + LLM优化系统

这个项目实现了一个伪流式音频转写系统,包括VAD分段、Whisper转录、语义聚合、LLM优化和翻译等功能。系统采用模块化设计,各个组件可以独立工作,也可以组合使用。

系统架构

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

使用示例

完整流程示例

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

API服务

系统也提供了REST API服务,可以通过HTTP请求进行音频转写。

API端点

  • GET / → 健康检查
  • POST /transcribe → 上传.wav/.mp3文件并接收转写文本

使用示例 (cURL)

curl -X POST https://your-space-name.hf.space/transcribe \
  -F "[email protected]"

安装与运行

环境要求

  • Python 3.8+
  • PyTorch 1.12+
  • CUDA 11.6+ (如果使用GPU)

安装依赖

pip install -r requirements.txt

运行API服务

python app.py

运行集成示例

# 设置OpenAI API密钥(用于句子完整性判断)
export OPENAI_API_KEY=your_api_key

# 运行集成示例
python -m aggregator.integration_example

许可证

MIT License