Go to file
yueliuli 1e9906ef1a 代码优化 文件精简 2026-04-30 17:16:00 +08:00
.gitignore 批量 语音+说话人识别 2026-04-30 15:06:03 +08:00
CLAUDE.md 初始可用版本 2026-04-29 09:42:51 +08:00
CLEANUP_SUMMARY.md 代码优化 文件精简 2026-04-30 17:16:00 +08:00
INSTALL.md 代码优化 文件精简 2026-04-30 17:16:00 +08:00
README.md 添加说话人分离 3D speaker 2026-04-30 10:09:18 +08:00
asr_service.py 代码优化 文件精简 2026-04-30 17:16:00 +08:00
diarization_service.py 代码优化 文件精简 2026-04-30 17:16:00 +08:00
main.py 代码优化 文件精简 2026-04-30 17:16:00 +08:00
map_speaker.py 添加说话人分离 3D speaker 2026-04-30 10:09:18 +08:00
requirements.txt 代码优化 文件精简 2026-04-30 17:16:00 +08:00
server.py 代码优化 文件精简 2026-04-30 17:16:00 +08:00

README.md

FunASR 语音识别服务

基于阿里达摩院 FunASR 的本地语音识别解决方案。

功能特性

功能 说明
句级时间戳 每句话的开始和结束时间
说话人分离 自动区分不同说话人
抗噪能力 VAD 语音活动检测,过滤噪音
本地部署 完全离线运行,数据不上传云端

项目结构

audio2/
├── funasr_env/              # 虚拟环境
├── models/                  # 模型缓存目录
├── asr_service.py           # 核心服务类
├── test_asr.py              # 测试脚本
├── example_usage.py         # 使用示例
├── run_asr.bat              # Windows 运行脚本
├── fix_path_issue.bat       # 路径修复脚本(推荐)
├── enable_long_path.ps1     # 启用长路径支持(管理员)
├── requirements.txt         # 依赖列表
└── README.md                # 本文档

快速开始

Windows 用户注意 ⚠️

如果遇到 "文件名或扩展名太长" 错误,请使用以下方法之一:

方法 1使用 fix_path_issue.bat推荐

fix_path_issue.bat your_audio.wav

方法 2启用 Windows 长路径支持(永久解决)

  1. 右键 PowerShell → 以管理员身份运行
  2. 运行:enable_long_path.ps1
  3. 重启电脑

1. 激活虚拟环境

# Windows CMD
funasr_env\Scripts\activate.bat

# Linux/Mac
source funasr_env/bin/activate

2. 安装依赖(如果未安装)

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install funasr modelscope

3. 测试识别

# 方法 1使用修复脚本推荐 Windows 用户)
fix_path_issue.bat your_audio.wav

# 方法 2直接运行
python test_asr.py -f your_audio.wav

# 批量识别目录
python test_asr.py -d ./audio_files/

# 使用 SenseVoice 模型(多语言)
python test_asr.py -f your_audio.wav -m SenseVoice

代码使用示例

基础识别

from asr_service import ASRService

# 初始化服务
service = ASRService(model_name="paraformer-zh")

# 识别音频
sentences = service.recognize("meeting.wav")

# 打印结果
for sent in sentences:
    print(f"[{sent.speaker}] {sent.text}")
    print(f"  时间: {sent.begin_time:.2f}s - {sent.end_time:.2f}s")

导出结果

# 导出为 JSON
service.export_to_json(sentences, "result.json")

# 导出为 SRT 字幕
service.export_to_srt(sentences, "result.srt")

输出格式

JSON 格式

{
  "total_sentences": 3,
  "sentences": [
    {
      "speaker": "SPEAKER_00",
      "text": "大家好,今天的会议现在开始。",
      "begin_time": 0.50,
      "end_time": 3.20,
      "duration": 2.70
    },
    {
      "speaker": "SPEAKER_01",
      "text": "好的,我先汇报一下进度。",
      "begin_time": 3.50,
      "end_time": 6.10,
      "duration": 2.60
    }
  ]
}

SRT 字幕格式

1
00:00:00,500 --> 00:00:03,200
[SPEAKER_00] 大家好,今天的会议现在开始。

2
00:00:03,500 --> 00:00:06,100
[SPEAKER_01] 好的,我先汇报一下进度。

支持的音频格式

  • WAV
  • MP3
  • M4A
  • FLAC
  • OGG
  • WMA

模型选择

模型 说明 适用场景
paraformer-zh 达摩院中文模型(默认) 中文语音识别,支持说话人分离
SenseVoice 多语言模型 多语言、方言、情感识别

硬件要求

配置 说明
CPU 支持,速度较慢
GPU 推荐RTF < 0.01
内存 4GB+
显存 2GB+ (GPU 模式)
磁盘 2GB+(模型缓存)

模型下载

首次运行会自动从魔搭社区下载模型到 models/ 目录:

  • Paraformer: ~500MB
  • VAD: ~100MB
  • 说话人模型: ~100MB

模型下载来源:

常见问题

Q: 文件名太长错误?

A: Windows 默认路径长度限制为 260 字符。解决方法:

  1. 使用 fix_path_issue.bat 运行(已配置短路径)
  2. 运行 enable_long_path.ps1 启用系统长路径支持(需管理员权限+重启)

Q: 如何准备测试音频?

A:

Q: 支持多人同时说话吗?

A: 支持。说话人分离模块会自动区分不同说话人。

Q: 对噪音环境有什么优化?

A: 集成了 FSMN-VAD 语音活动检测,能有效过滤背景噪音。

Q: 如何切换 CPU/GPU

A:

# CPU
service = ASRService(device="cpu")

# GPU
service = ASRService(device="cuda")

# 自动选择
service = ASRService(device="auto")

参考链接

许可证

本项目使用 Apache-2.0 许可证

运行

run.bat input/VID_20251031_132320_019_mono.wav run.bat input/VID_20251031_132320_019_mono_speak_only.wav