目录
目录README.md
logo
识语

新一代本地化、专业级AI字幕解决方案


✨ 核心特性

  • 🚀 边看边生成 (流式处理):打开视频1秒内即可看到首批字幕!我们采用了先进的异步处理架构,无需等待整个音频提取完成,从根本上解决了长视频的“初始等待”痛点。
  • ⚡️ 极速本地推理:所有处理均在本地完成,10秒音频仅需70ms,比Whisper快5-15倍,实现真正的实时字幕。
  • 🔒 高保障隐私安全:音视频数据绝不离开您的设备,杜绝云端方案的数据泄露风险,适合处理任何敏感或机密内容。
  • 🎯 专业领域增强:针对计算机科学领域深度优化,专业术语识别准确率提升**30-50%**。
  • 💰 完全免费开源:项目完全开源,一次部署,永久免费使用,无任何API费用和使用限制。
  • 🌐 多语言支持:精准识别中文、英文、粤语、日语、韩语等多种语言,并支持实时翻译,在通用数据集上,识别准确率**中文>95%英文>96%**。
  • 🔧 高度可定制:提供丰富的图形化设置界面,可完全自定义字幕样式,并为用户开放VAD和ASR模型参数进行调优。

1. 项目背景

随着数字化内容的激增,高效、准确的字幕生成已成为刚需。然而,现有的云端API方案(如Whisper API)普遍存在数据隐私风险高昂的使用成本网络依赖等问题。同时,通用开源模型在计算机科学等专业领域的术语识别上表现不佳。

识语旨在解决这些痛点。我们提供一个完全本地化部署、零成本、高性能的AI字幕解决方案,通过对SenseVoice模型的深度微调,使其能够精准识别专业术语,为用户提供安全、便捷、专业的字幕生成体验。

2. 核心模型介绍

2.1 SenseVoice-Small 模型

SenseVoice-Small是一个多语言音频理解模型,经过专门的领域优化训练,具有以下技术特点:

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

2.2 FSMN-Monophone VAD 模型

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

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

3. 安装指南

环境要求:

  • Python 3.8+
  • FFmpeg(用于音视频处理)
  • CUDA 11.0+(可选,用于GPU加速)

安装步骤:

  1. 创建并激活 Conda 环境

    # 我们推荐使用 Python 3.8
    conda create -n voice2text python=3.8
    conda activate voice2text
    # 安装GPU版本的PyTorch 2.2.0(CUDA 11.8版本)
    pip install torch==2.2.0 torchvision==0.17.0 torchaudio==2.2.0 --index-url https://download.pytorch.org/whl/cu118
  2. 安装 FFmpeg FFmpeg 是核心的音视频处理依赖,可以通过 Conda 直接安装:

    conda install ffmpeg
  3. 安装 Python 依赖库 克隆本仓库到本地,然后在项目根目录下运行:

    pip install -r requirements.txt
  4. 不同操作系统的区别

    windows环境:需要下载K-Lite Codec Pack Basic,访问:https://codecguide.com/download_kl.htm。 选择”Basic”版本,运行安装程序,选择默认设置,重启计算机,重新运行程序。

    Ubuntu环境:系统代码中已经设置好了QT环境,如果执行失败,手动下载依赖:

    sudo apt install python3-pyqt5.qtmultimedia
    sudo apt install libqt5multimedia5-plugins
    sudo apt install gstreamer1.0-plugins-good
    sudo apt install gstreamer1.0-plugins-bad
    sudo apt install ffmpeg
  5. 验证安装 运行测试脚本来验证环境和模型加载(首次运行会自动下载所需模型):

    cd py
    python test_model_loading.py

    当您看到输出 “🎉 测试通过!模型可以正常加载。” 时,表示环境已准备就绪。

4. 使用

通过以下命令启动主程序:

# 确保您已激活 conda 环境 (conda activate voice2text)
cd py
python player_example.py

程序启动后,通过界面上右下角的文件图标按钮选择您想处理的视频文件,识语将自动开始工作。

4.1 模型初始化

  • 首次启动时,程序会自动加载VAD和ASR模型
  • 在状态栏可以看到模型加载进度
  • 模型加载完成后即可开始使用

4. 2 打开视频文件

  • 点击工具栏的”文件图标”按钮
  • 选择要处理的视频文件(支持常见视频格式)
  • 程序会自动开始提取音频并分段处理

4.3 字幕生成和显示

  • 自动生成:打开视频后,程序自动开始生成字幕
  • 实时显示:字幕会实时显示在视频播放区域
  • 浮动窗口:支持独立的浮动字幕窗口,可自由调整大小和位置
  • 进度显示:底部状态栏显示字幕生成进度

4.4 字幕设置和自定义

  • 点击”设置”按钮打开设置窗口
  • 字幕设置标签页
    • 字体选择:支持系统所有字体
    • 字体大小:可调节字体大小
    • 字幕颜色:支持颜色选择
    • 背景颜色:支持背景色和透明度调节
    • 显示模式:选择浮动窗口或嵌入式显示
  • 双语字幕:选择翻译语言(中文/英文/自动/关闭)

4.5 高级参数调节

  • VAD参数设置标签页
    • 语音噪声阈值:调节语音检测灵敏度
    • 静音检测时间:设置开始和结束静音时长
    • 窗口大小:设置检测窗口参数
  • SenseVoice参数设置标签页
    • 语言设置:自动检测或指定语言
    • 批处理大小:调节处理效率
    • 设备选择:CPU或GPU模式

4.6 系统监控

  • 启用”资源监控浮动窗口”可实时查看:
    • CPU使用率
    • 内存使用情况
    • GPU使用率(如果可用)
  • 监控窗口可独立移动和调整大小

4.7 字幕文件导出

  • 字幕自动保存为SRT格式
  • 保存位置:视频文件同目录下的 subtitles 文件夹
  • 文件名与视频文件名相同,扩展名为 .srt

5.核心代码模块说明

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

class ModelManager:
    def __init__(self, vad_model_path=None, asr_model_path=None, device="cuda", 
                 vad_params=None, sensevoice_params=None):
        # 初始化模型路径、设备和用户自定义参数
        # 默认自动检测模型路径
        
    def load_models(self) -> bool:
        # 加载VAD和ASR模型,支持用户参数配置
        # 返回是否成功加载
        
    def get_models(self) -> tuple:
        # 获取已加载的模型实例 (vad_model, asr_model)
        
    def reload_models(self, vad_params=None, sensevoice_params=None) -> bool:
        # 重新加载模型(参数更新后)

主要功能

  • 自动模型路径检测:智能检测项目内模型文件位置
  • 参数化配置管理:支持用户自定义VAD参数(噪声阈值0.6、静音检测800ms等)
  • SenseVoice参数配置:语言设置、批处理大小、设备选择等
  • 模型生命周期管理:初始化、重载、错误处理
  • 跨平台路径处理:自动处理绝对路径转换

5.2 音频处理器 (audio_processor.py)

@dataclass
class TranscribeResult:
    """字幕结果数据类"""
    text: str
    start_time: float
    end_time: float
    index: int = 0
    
    def float_to_srt_time_format(self, seconds_float):
        # 将浮点数秒转换为SRT时间格式
        
    def to_srt(self):
        # 转换为SRT格式字符串

class AudioProcessor:
    def __init__(self, vad_model, asr_model, sample_rate=16000):
        # 初始化VAD和ASR模型,设置采样率
        
    def extract_audio(self, video_path: str, output_audio_path: str = None) -> str:
        # 使用FFmpeg从视频中提取音频,支持多种格式
        
    def split_audio(self, input_file: str, first_segment_length=60, 
                   other_segment_length=180, output_dir="./temp_segments") -> list:
        # 智能分割音频:首段60s,其余180s,返回分段文件列表
        
    def process_segment(self, audio_data, segment_start_time=0) -> List[TranscribeResult]:
        # VAD检测 + ASR识别的完整流程,返回字幕结果列表
        
    def process_segment_file(self, segment_file: str, segment_start_time: float = 0) -> List[TranscribeResult]:
        # 处理单个音频段文件
        
    def save_subtitles(self, results: List[TranscribeResult], output_path: str):
        # 保存为标准SRT格式字幕文件

主要功能

  • 数据结构设计:TranscribeResult数据类,包含文本、时间戳和SRT转换方法
  • 音频提取优化:FFmpeg高效提取,支持mp4、avi、mov等多种视频格式
  • 智能分段策略:首段60秒(快速反馈),其余180秒(效率优化)
  • VAD语音检测:FSMN-VAD模型精确检测有效语音片段,过滤静音
  • ASR多语言识别:SenseVoice模型支持中文、英文、粤语、日语、韩语等
  • 时间戳校准:自动调整时间偏移(-0.25s),确保字幕同步准确
  • SRT标准输出:完整的字幕时间轴和格式化输出

5.3 播放管理器 (player_manager.py)

class PlayerManager:
    def __init__(self):
        # 初始化模型管理器、音频处理器和统计参数
        
    def initialize(self, vad_params: dict = None, sensevoice_params: dict = None) -> bool:
        # 使用用户参数初始化模型,返回是否成功
        
    def reload_models(self, vad_params: dict = None, sensevoice_params: dict = None) -> bool:
        # 参数更新后重新加载模型
        
    def set_subtitle_callback(self, callback):
        # 设置字幕实时更新回调函数
        
    def generate_subtitles(self, video_path: str):
        # 完整的字幕生成流程管理(带时间统计)
        
    def save_timing_stats(self, video_name: str, stats: dict):
        # 保存性能统计数据到JSON文件
        
    def cleanup_temp_files(self, temp_dir: str):
        # 清理临时音频分段文件
        
    def get_video_duration(self, video_path: str) -> float:
        # 获取视频时长(用于统计计算)

主要功能

  • 模型生命周期管理:初始化、重载、清理,支持参数动态更新
  • 字幕生成流程控制:音频提取 → 智能分段 → VAD检测 → ASR识别 → SRT保存
  • 实时回调机制:支持字幕生成进度的实时反馈,更新UI状态
  • 性能统计跟踪:详细记录各阶段处理时间,支持性能分析和优化
  • 临时文件管理:自动清理处理过程中的临时音频文件,避免磁盘空间浪费
  • 错误处理机制:完善的异常处理和日志记录,保证系统稳定性
  • 配置持久化:统计数据自动保存到benchmark_results目录

5.4. 主应用程序 (player_example.py)

核心GUI类

  • VideoPlayer:主窗口类,集成视频播放、字幕显示和控制面板
  • FloatingSubtitleWindow:美化的可拉伸浮动字幕窗口
  • SettingsWindow:多标签页设置界面(字幕、VAD参数、SenseVoice参数)
  • SubtitleManager:字幕翻译和缓存管理,支持Google Translate API
  • ResourceMonitor:独立线程的系统资源监控器
  • ResourceMonitorWindow:资源监控浮动窗口,实时显示CPU/内存/GPU状态

功能模块

  • SettingsManager:配置管理器,持久化保存用户设置
  • TranslationWorker:后台翻译线程,支持并发翻译和缓存
  • SubtitleUpdateWorker:字幕更新工作线程

主要功能

  • GUI界面:PyQt5构建的界面,支持拖拽、调整大小
  • 视频播放控制:播放/暂停、进度控制、全屏支持
  • 实时字幕显示:同步显示字幕,支持浮动窗口和嵌入式两种模式
  • 丰富的设置选项:字体、颜色、大小、背景透明度等完全自定义
  • 双语字幕支持:中英文翻译,翻译缓存机制,预翻译优化
  • 系统资源监控:独立浮动窗口显示CPU、内存、GPU使用情况
  • 高级参数配置:VAD和SenseVoice模型的详细参数调节
  • 配置持久化:自动保存用户偏好设置到JSON配置文件

6. 项目结构

voice2text/
  ├── model/                                  # 语音识别模型
  │   ├── SenseVoiceSmall/                    # 多语言语音识别模型
  │   │   ├── model.pt                        # 模型权重文件
  │   │   ├── config.yaml                     # 模型配置文件
  │   │   ├── tokens.json                     # 词表文件
  │   │   └── README.md                       # 模型说明文档
  │   └── speech_fsmn_vad_zh-cn-16k-common-pytorch/  # VAD模型
  │       ├── model.pt                        # VAD模型权重
  │       ├── config.yaml                     # VAD配置文件
  │       └── README.md                       # VAD模型文档
  ├── py/                                     # Python源代码
  │   ├── audio_processor.py                  # 音频处理核心模块
  │   ├── model_loader.py                     # 模型加载和管理模块
  │   ├── player_manager.py                   # 播放管理核心控制器
  │   ├── player_example.py                   # 主应用程序(GUI界面)
  │   └── test_model_loading.py               # 模型加载测试脚本
  ├── resource/                               # 资源文件
  │   ├── demo.mp4                            # 演示视频文件
  │   └── subtitles/                          # 字幕输出目录
  │       └── demo.srt                        # 生成的字幕文件示例
  ├── 提交文档/                               # 比赛提交文档
  ├── 软件截图/                               # 应用程序运行截图
  ├── 演示录屏.mp4                            # 软件演示视频
  ├── requirements.txt                        # Python依赖包列表
  └── README.md                               # 项目说明文档

更详细的技术细节、功能介绍和性能对比,请参阅项目说明书

7. 主要项目负责人

  • 韩奕
  • 陈民浩
  • 邹航

联系邮箱: 727467228@qq.com

8. 开源协议

本项目基于 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号