目录
目录README.md

Voice2Text 实时字幕生成系统

Voice2Text 是一个高效、准确的音视频字幕自动生成解决方案,通过集成先进的语音识别技术,实现对视频和音频内容的实时字幕生成和显示。系统支持多语言识别、情感识别和声学事件检测等功能,为用户提供全面的字幕生成服务。

系统设计图

参赛说明

1.本项目对应赛题:视频字幕AI自动识别显示工具。

2.本项目的初赛文档在本仓库的voice2text\提交文档文件夹中。

3.本项目的APP运行截图和视频分别放在:voice2text\软件截图和voice2text\演示录屏.mp4内。

4.本项目APP的模型和代码分别放在:voice2text\model和voice2text\py。

功能特点

  • 多语言支持:支持中文、英文、粤语、日语、韩语等50多种语言的识别,识别效果优于Whisper模型
  • 实时处理:边播放边生成字幕,无需等待处理完成,10秒音频处理仅需70ms
  • 高效准确:采用SenseVoice-Small模型,推理速度比Whisper-Small快7倍,比Whisper-Large快17倍
  • 情感识别:能够识别语音中的情感,提供更丰富的字幕内容,支持多种情感类型的检测
  • 声学事件检测:支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件的检测
  • 字幕翻译:支持字幕实时翻译功能,可在中英文等多种语言间切换
  • 用户友好:提供直观的用户界面和丰富的字幕样式设置,支持字体、颜色、大小等自定义
  • 系统资源监控:实时显示CPU、内存和GPU使用情况,优化系统性能

系统架构

系统采用模块化设计,主要包括以下几个核心组件:

  1. 模型管理模块 (ModelManager):负责加载和管理VAD和ASR模型,提供统一的模型接口
  2. 音频处理模块 (AudioProcessor):负责音频提取、分段和处理,将长音频分割成适当大小的片段
  3. 播放管理模块 (PlayerManager):协调视频播放和字幕生成,管理模型初始化和字幕回调
  4. 字幕管理模块 (SubtitleManager):管理字幕的生成、翻译和显示,支持字幕预翻译和样式设置
  5. 用户界面模块 (VideoPlayer):提供视频播放和字幕显示界面,支持用户交互和设置调整

系统工作流程

系统设计时序图

  1. 音频提取:从视频文件中提取音频轨道
  2. 音频分段:将长音频分割成短片段(首段60秒,其余180秒)
  3. VAD处理:使用FSMN-VAD模型检测每个片段中的有效语音
  4. ASR识别:使用SenseVoice-Small模型将检测到的语音转换为文字
  5. 字幕生成:将识别结果转换为SRT格式字幕
  6. 字幕显示:在视频播放界面实时显示对应时间点的字幕
  7. 字幕翻译(可选):通过翻译API将字幕翻译为目标语言

技术栈

  • 编程语言:Python 3.8+
  • GUI框架:PyQt5,用于构建用户界面和视频播放器
  • 音视频处理
    • FFmpeg:用于音频提取和格式转换
    • librosa:用于音频分析和处理
    • pydub:用于音频分段和操作
  • 语音识别
    • FunASR框架:提供语音识别的基础架构
    • SenseVoice-Small模型:多语言音频理解模型,支持语音识别、语种识别、情感识别和声学事件检测
    • FSMN-VAD模型:高效语音端点检测模型,用于检测有效语音片段
  • 系统监控
    • psutil:监控CPU和内存使用情况
    • GPUtil:监控GPU使用情况
  • 翻译服务:Google Translate API,用于字幕翻译

核心模型详情

SenseVoice-Small 模型

SenseVoice-Small是一个多语言音频理解模型,具有以下技术特点:

  • 模型架构:基于非自回归端到端框架,采用Transformer编码器-解码器架构
  • 训练数据:采用工业级数十万小时的标注音频进行训练
  • 支持语言:中文、粤语、英语、日语、韩语等50多种语言
  • 特殊功能
    • 语种识别(LID):自动识别音频语言类型
    • 情感识别(SER):识别语音中的情感类型
    • 事件检测(AED):检测音频中的特殊声音事件
    • 逆文本正则化(ITN):将数字、日期等转换为标准文本格式
  • 性能指标
    • 10秒音频处理时间:约70ms
    • 相比Whisper-Small快7倍,相比Whisper-Large快17倍
    • 在中文和粤语识别效果上优于Whisper模型
  • 模型大小:参数量与Whisper-Small相当

FSMN-Monophone VAD 模型

FSMN-Monophone VAD是达摩院语音团队提出的高效语音端点检测模型:

  • 模型架构:基于FSMN(前馈序列记忆网络)结构,可考虑上下文信息
  • 特点
    • 训练和推理速度快,时延可控
    • 根据VAD模型size和低时延要求,对网络结构和右看帧数进行了适配
    • 建模单元从单一speech类升级为Monophone,提升抽象学习能力
  • 主要功能:检测输入音频中有效语音的起止时间点
  • 应用场景:将检测出的有效音频片段输入识别引擎,减少无效语音带来的识别错误
  • 可调参数
    • max_end_silence_time:尾部静音判停时间(500ms~6000ms)
    • speech_noise_thres:语音噪声阈值(-1到1之间)

安装指南

环境要求

  • Python 3.8+
  • FFmpeg(用于音视频处理)
  • CUDA 11.0+(可选,用于GPU加速)
  • 至少8GB RAM(推荐16GB以上)
  • 至少10GB磁盘空间(用于模型存储)

安装步骤

1.安装依赖:

pip install -r requirements.txt

2.下载模型(如果尚未包含在仓库中):

# 模型将自动下载或从指定位置加载
# 首次运行程序时会自动下载模型

可能的问题和解决方案

  • FFmpeg未安装:请按照官方指南安装FFmpeg
  • CUDA兼容性问题:确保安装的CUDA版本与PyTorch兼容
  • 内存不足:减小处理的音频片段大小或使用CPU模式运行

使用方法

  1. 启动应用程序:
cd py
python player_example.py
  1. 通过界面打开视频文件:

    • 点击”打开文件”按钮
    • 选择要处理的视频文件
  2. 开始处理:

    • 点击播放按钮,系统将自动生成字幕
    • 字幕将实时显示在视频下方
  3. 字幕设置:

    • 点击”字幕设置”按钮
    • 调整字体、大小、颜色和背景色
    • 设置字幕位置和透明度
  4. 翻译功能:

    • 勾选”启用翻译”选项
    • 选择目标语言
    • 系统将自动翻译字幕

项目结构

voice2text/
  ├── model/                    # 语音识别模型
  │   ├── SenseVoiceSmall/      # 多语言语音识别模型
  │   │   ├── model.pt          # 模型权重文件
  │   │   ├── config.yaml       # 模型配置文件
  │   │   ├── tokens.json       # 词表文件
  │   │   └── ...               # 其他模型文件
  │   └── speech_fsmn_vad.../   # 语音活动检测模型
  │       ├── model.pt          # 模型权重文件
  │       ├── config.yaml       # 模型配置文件
  │       └── ...               # 其他模型文件
  ├── py/                       # Python源代码
  │   ├── audio_processor.py    # 音频处理模块
  │   ├── model_loader.py       # 模型加载模块
  │   ├── player_manager.py     # 播放管理模块
  │   ├── player_example.py     # 主应用程序
  │   └── output/               # 临时输出目录
  ├── resource/                 # 资源文件
  │   ├── subtitles/            # 生成的字幕文件
  │   └── *.mp4, *.wav          # 示例媒体文件
  └── requirements.txt          # 项目依赖
  │  
  └── README.md

核心代码模块说明

1. 模型加载器 (model_loader.py)

class ModelManager:
    def __init__(self, vad_model_path, asr_model_path, device):
        # 初始化模型路径和设备
        
    def load_models(self):
        # 加载VAD和ASR模型
        
    def get_models(self):
        # 获取已加载的模型

负责加载和管理语音识别相关的模型,提供统一的模型接口。

2. 音频处理器 (audio_processor.py)

class AudioProcessor:
    def extract_audio(self, video_path, output_audio_path=None):
        # 从视频中提取音频
        
    def split_audio(self, input_file, first_segment_length=60, 
                   other_segment_length=180, output_dir="./temp_segments"):
        # 分割音频为多个片段
        
    def process_segment(self, audio_data, segment_start_time=0):
        # 处理单个音频片段

负责音频的提取、分段和处理,将视频中的音频提取出来并进行识别。

3. 播放管理器 (player_manager.py)

class PlayerManager:
    def initialize(self):
        # 初始化模型
        
    def generate_subtitles(self, video_path):
        # 为视频生成字幕文件

协调视频播放和字幕生成过程,管理模型初始化和字幕生成。

应用场景

  • 视频内容创作:为视频创作者提供自动字幕生成工具,提高内容可访问性
  • 教育培训:为在线课程、讲座等教育内容生成字幕,增强学习体验
  • 会议记录:自动将会议音频转换为文字记录,提高会议效率
  • 无障碍服务:为听障人士提供实时字幕服务,增强内容可访问性
  • 多语言内容理解:通过字幕翻译功能,帮助用户理解不同语言的内容
  • 媒体内容分析:通过情感识别和事件检测,分析媒体内容的情感倾向和关键时刻

性能优化

系统针对性能进行了多方面优化:

  1. 分段处理:将长音频分割成短片段,减少内存占用
  2. 并行处理:使用多线程处理不同的音频片段
  3. GPU加速:支持GPU加速模型推理,提高处理速度
  4. 资源监控:实时监控系统资源使用情况,避免资源过度占用
  5. 预翻译机制:在后台预先翻译字幕,提高显示速度

未来计划

  • 支持更多语言和方言的识别
  • 增强情感识别的准确性
  • 添加更多声学事件的检测能力
  • 优化字幕时间轴对齐算法
  • 增加对直播流的支持
  • 开发更轻量级的模型版本

许可证

本项目使用 Apache License 2.0 许可证。

鸣谢

  • FunASR - 阿里巴巴达摩院开源的语音识别框架
  • SenseVoice - 多语言音频理解模型
  • PyQt5 - Python的Qt绑定
  • FFmpeg - 音视频处理工具
  • librosa - 音频分析库
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号