29dd236bb9
- 将步骤5从 OCR 改为 Whisper 语音识别
- 更新 kb-whisper 支持自动音频转换
- 默认使用中文语言 (zh) 和 base 模型
- 更新输出格式为 {platform}_{id}.txt/.srt/.json
- 添加 FunASR 作为备用方案
213 lines
4.4 KiB
Markdown
213 lines
4.4 KiB
Markdown
# KB FunASR - 本地语音识别
|
|
|
|
基于阿里 FunASR 的本地语音识别工具,支持将音视频文件转换为文本和 JSON 格式。
|
|
|
|
## 功能特性
|
|
|
|
- 🎯 **本地执行** - 完全离线运行,保护隐私
|
|
- 🚀 **多模型支持** - Paraformer、SenseVoice 等模型可选
|
|
- 📝 **多格式输出** - JSON、TXT 两种格式
|
|
- ⚡ **异步执行** - 支持后台运行,不阻塞主代理
|
|
- 🎬 **广泛兼容** - 支持常见音视频格式(MP3、MP4、WAV 等)
|
|
- 🇨🇳 **中文优化** - Paraformer 模型针对中文语音优化
|
|
|
|
## 安装前提
|
|
|
|
### 1. 安装依赖
|
|
|
|
```bash
|
|
pip install funasr modelscope
|
|
```
|
|
|
|
### 2. 配置环境变量(可选)
|
|
|
|
在 `~/.clawdbot/clawdbot.json` 中添加:
|
|
|
|
```json5
|
|
{
|
|
skills: {
|
|
entries: {
|
|
"kb-funasr": {
|
|
env: {
|
|
FUNASR_CACHE_DIR: "~/.cache/modelscope/hub"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
或通过命令行配置:
|
|
|
|
```bash
|
|
clawdbot skills config kb-funasr FUNASR_CACHE_DIR "~/.cache/modelscope/hub"
|
|
```
|
|
|
|
## 使用方法
|
|
|
|
### 基本用法
|
|
|
|
```bash
|
|
# 使用默认 Paraformer 中文模型处理
|
|
python funasr.py --input video.mp4
|
|
|
|
# 后台异步执行
|
|
python funasr.py --input video.mp4 --background
|
|
```
|
|
|
|
### 指定模型
|
|
|
|
```bash
|
|
# Paraformer 中文模型(推荐)
|
|
python funasr.py --input video.mp4 --model paraformer-zh
|
|
|
|
# Paraformer 多语言模型
|
|
python funasr.py --input video.mp4 --model paraformer
|
|
|
|
# SenseVoice 多语言模型
|
|
python funasr.py --input video.mp4 --model sensevoice
|
|
```
|
|
|
|
### 指定输出目录
|
|
|
|
```bash
|
|
python funasr.py --input video.mp4 --output ./transcripts
|
|
```
|
|
|
|
## 输出文件
|
|
|
|
对于输入 `video.mp4`,将生成以下文件:
|
|
|
|
```
|
|
output/
|
|
├── video.json # 详细结果(含时间戳)
|
|
└── video.txt # 纯文本
|
|
```
|
|
|
|
### JSON 格式
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"input_file": "video.mp4",
|
|
"model": "paraformer-zh",
|
|
"output_files": {
|
|
"json": "video.json",
|
|
"txt": "video.txt"
|
|
},
|
|
"duration_seconds": 120.5,
|
|
"segments": [
|
|
{
|
|
"id": 0,
|
|
"start": 0.0,
|
|
"end": 3.2,
|
|
"text": "这是第一段识别结果"
|
|
},
|
|
{
|
|
"id": 1,
|
|
"start": 3.2,
|
|
"end": 6.8,
|
|
"text": "这是第二段识别结果"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
## 模型对比
|
|
|
|
| 模型 | 速度 | 精度 | 适用场景 |
|
|
|------|------|------|----------|
|
|
| paraformer-zh | ⚡⚡⚡ | ⭐⭐⭐⭐ | 中文语音(推荐) |
|
|
| paraformer | ⚡⚡ | ⭐⭐⭐⭐ | 多语言识别 |
|
|
| sensevoice | ⚡ | ⭐⭐⭐⭐⭐ | 高精度多语言 |
|
|
|
|
## 完整示例
|
|
|
|
### 示例 1: 转录播客
|
|
|
|
```bash
|
|
python funasr.py --input podcast.mp3 --model paraformer-zh --background
|
|
```
|
|
|
|
### 示例 2: 生成视频识别结果
|
|
|
|
```bash
|
|
python funasr.py --input tutorial.mp4 --model paraformer
|
|
```
|
|
|
|
### 示例 3: 批量处理(配合脚本)
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
for video in videos/*.mp4; do
|
|
python funasr.py --input "$video" --model paraformer-zh
|
|
done
|
|
```
|
|
|
|
## 在 Workflow 中使用
|
|
|
|
在知识库处理流程中,如果视频没有识别结果:
|
|
|
|
```bash
|
|
# 步骤4: 下载视频后
|
|
# 步骤5: 使用 FunASR 生成识别结果
|
|
python funasr.py --input ${video_path} --model paraformer-zh --background
|
|
|
|
# 等待 FunASR 完成,然后继续后续步骤
|
|
```
|
|
|
|
## 技术细节
|
|
|
|
- **引擎**: 阿里 FunASR
|
|
- **模型框架**: ModelScope
|
|
- **音频采样率**: 自动转换为 16kHz
|
|
- **语言**: 根据模型支持不同语言
|
|
|
|
## 故障排查
|
|
|
|
### 问题: 模型下载失败
|
|
|
|
```bash
|
|
# 首次运行会自动下载,确保网络稳定
|
|
python funasr.py --input test.mp4
|
|
|
|
# 手动检查缓存目录
|
|
ls ~/.cache/modelscope/hub/
|
|
```
|
|
|
|
### 问题: 音频格式不支持
|
|
|
|
```bash
|
|
# 转换音频格式
|
|
ffmpeg -i input.avi -acodec libmp3lame output.mp3
|
|
python funasr.py --input output.mp3
|
|
```
|
|
|
|
### 问题: 依赖安装失败
|
|
|
|
```bash
|
|
# 使用清华镜像源
|
|
pip install funasr modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|
```
|
|
|
|
## 性能参考
|
|
|
|
在 CPU 环境下(Intel i7):
|
|
|
|
- **paraformer-zh 模型**: ~2x 实时速度(1分钟音频 ~30秒处理)
|
|
- **paraformer 模型**: ~1.5x 实时速度(1分钟音频 ~40秒处理)
|
|
- **sensevoice 模型**: ~1x 实时速度(1分钟音频 ~1分钟处理)
|
|
|
|
## 与 Whisper 对比
|
|
|
|
| 特性 | FunASR | Whisper |
|
|
|------|--------|---------|
|
|
| 中文识别 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
|
|
| 速度 | ⚡⚡⚡ | ⚡⚡ |
|
|
| 模型大小 | 较小 | 较大 |
|
|
| 多语言支持 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
|
|
|
|
## 许可证
|
|
|
|
本技能使用 MIT 许可证,FunASR 使用 Apache 2.0 许可证。
|