技能备份 - 2026-04-15 (40个技能)
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
---
|
||||
name: funasr-transcribe
|
||||
description: 本地音频转录工具,使用阿里 FunASR 模型进行语音识别。支持中文、英文等多种语言,无需 API 费用,完全本地运行。适用于音频文件转写(.wav, .ogg, .mp3 等)、会议记录、语音笔记整理等场景。
|
||||
---
|
||||
|
||||
# FunASR 语音转录
|
||||
|
||||
本地、免费、高效的语音识别工具,基于阿里巴巴 FunASR 模型。
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
# 1. 安装 FunASR
|
||||
bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/install.sh
|
||||
|
||||
# 2. 转录音频
|
||||
bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/transcribe.sh /path/to/audio.ogg
|
||||
```
|
||||
|
||||
## 安装 FunASR
|
||||
|
||||
首次使用需要安装 FunASR 环境(虚拟环境 + 依赖):
|
||||
|
||||
```bash
|
||||
bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/install.sh
|
||||
```
|
||||
|
||||
安装脚本会:
|
||||
- 创建 Python 虚拟环境 `~/.openclaw/workspace/funasr_env`
|
||||
- 安装 FunASR、torch、torchaudio、modelscope 等依赖
|
||||
- 安装完成后,首次转录会自动下载模型文件
|
||||
|
||||
**安装时间**:约 5-10 分钟(取决于网络速度)
|
||||
|
||||
**系统要求**:
|
||||
- Python 3.7+
|
||||
- 约 4GB 磁盘空间(虚拟环境 + 模型)
|
||||
- 推荐 8GB+ 内存
|
||||
|
||||
## 转录音频
|
||||
|
||||
安装完成后,转录音频:
|
||||
|
||||
```bash
|
||||
bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/transcribe.sh /path/to/audio.ogg
|
||||
```
|
||||
|
||||
**支持的格式**:`.wav`, `.ogg`, `.mp3`, `.flac`, `.m4a` 等
|
||||
|
||||
**输出**:
|
||||
- 同目录下生成 `<audio_filename>.txt`
|
||||
- 包含转录文本(带标点)
|
||||
|
||||
**性能**:
|
||||
- CPU 推理:rtf 约 0.05-0.2(1 秒音频约需 0.05-0.2 秒)
|
||||
- 首次转录需下载模型(约 1-2GB),后续直接使用缓存
|
||||
|
||||
## 技术细节
|
||||
|
||||
FunASR 使用以下模型组合:
|
||||
- **ASR 模型**:`damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch`(中文优化)
|
||||
- **VAD 模型**:`damo/speech_fsmn_vad_zh-cn-16k-common-pytorch`(语音活动检测)
|
||||
- **标点模型**:`damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch`(标点恢复)
|
||||
|
||||
**语言支持**:
|
||||
- 中文(普通话 + 方言)
|
||||
- 英文
|
||||
- 中英混合
|
||||
|
||||
## 常见问题
|
||||
|
||||
**Q: 首次转录很慢?**
|
||||
A: 首次运行会自动下载模型文件(约 1-2GB),后续转录会快很多。
|
||||
|
||||
**Q: 可以用 GPU 吗?**
|
||||
A: 可以。编辑 `scripts/transcribe.py`,将 `device="cpu"` 改为 `device="cuda:0"`,并安装对应的 CUDA 版本依赖。
|
||||
|
||||
**Q: 转录准确率如何?**
|
||||
A: FunASR 在中文场景下表现优异,通常优于 OpenAI Whisper。建议测试后评估效果。
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"ownerId": "kn73y7erceybm87h6618deeva58296sk",
|
||||
"slug": "funasr-transcribe-skill",
|
||||
"version": "1.0.0",
|
||||
"publishedAt": 1772877767626
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
#!/bin/bash
|
||||
# FunASR 安装脚本
|
||||
# 用途:创建虚拟环境并安装 FunASR 及其依赖
|
||||
|
||||
set -e
|
||||
|
||||
# 配置
|
||||
VENV_DIR="$HOME/.openclaw/workspace/funasr_env"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
echo "=========================================="
|
||||
echo "FunASR 安装脚本"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# 检查 Python
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo "❌ 错误:未找到 python3"
|
||||
echo "请先安装 Python 3.7+"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
||||
echo "✓ Python 版本: $PYTHON_VERSION"
|
||||
|
||||
# 创建虚拟环境
|
||||
if [ -d "$VENV_DIR" ]; then
|
||||
echo "⚠️ 虚拟环境已存在: $VENV_DIR"
|
||||
read -p "是否重新安装?(y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
echo "安装已取消"
|
||||
exit 0
|
||||
fi
|
||||
rm -rf "$VENV_DIR"
|
||||
fi
|
||||
|
||||
echo "创建虚拟环境: $VENV_DIR"
|
||||
python3 -m venv "$VENV_DIR"
|
||||
source "$VENV_DIR/bin/activate"
|
||||
|
||||
# 升级 pip
|
||||
echo ""
|
||||
echo "升级 pip..."
|
||||
pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
# 安装依赖
|
||||
echo ""
|
||||
echo "安装 FunASR 及依赖(这需要几分钟)..."
|
||||
pip install funasr modelscope huggingface_hub torch torchaudio \
|
||||
-i https://pypi.tuna.tsinghua.edu.cn/simple
|
||||
|
||||
# 验证安装
|
||||
echo ""
|
||||
echo "验证安装..."
|
||||
python3 -c "from funasr import AutoModel; print('✓ FunASR 安装成功')" || {
|
||||
echo "❌ FunASR 安装失败"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 完成
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "✓ 安装完成!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "现在可以使用转录功能:"
|
||||
echo " bash $SCRIPT_DIR/transcribe.sh /path/to/audio.ogg"
|
||||
echo ""
|
||||
@@ -0,0 +1,85 @@
|
||||
#!/usr/bin/env python3
|
||||
"""FunASR 音频转录脚本"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
|
||||
try:
|
||||
from funasr import AutoModel
|
||||
except ImportError:
|
||||
print("❌ 错误:未找到 funasr 模块")
|
||||
print("")
|
||||
print("请先安装 FunASR:")
|
||||
print(" bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/install.sh")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def transcribe_audio(audio_path):
|
||||
"""使用 FunASR 转录音频"""
|
||||
print(f"正在处理音频: {audio_path}")
|
||||
print("首次运行会自动下载模型,可能需要几分钟...")
|
||||
|
||||
# 加载模型
|
||||
model = AutoModel(
|
||||
model="damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch",
|
||||
vad_model="damo/speech_fsmn_vad_zh-cn-16k-common-pytorch",
|
||||
punc_model="damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch",
|
||||
device="cpu" # 使用 CPU,如果有 GPU 可以改为 "cuda:0"
|
||||
)
|
||||
|
||||
# 进行语音识别
|
||||
res = model.generate(
|
||||
input=audio_path,
|
||||
batch_size_s=300
|
||||
)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("用法: python3 transcribe.py <audio_file>")
|
||||
sys.exit(1)
|
||||
|
||||
audio_path = sys.argv[1]
|
||||
|
||||
# 检查文件是否存在
|
||||
if not os.path.exists(audio_path):
|
||||
print(f"❌ 错误:文件不存在: {audio_path}")
|
||||
sys.exit(1)
|
||||
|
||||
# 转录
|
||||
try:
|
||||
result = transcribe_audio(audio_path)
|
||||
except Exception as e:
|
||||
print(f"❌ 转录失败: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# 输出结果
|
||||
text = ""
|
||||
if isinstance(result, list) and len(result) > 0:
|
||||
text = result[0].get("text", "")
|
||||
|
||||
if not text:
|
||||
print("⚠️ 未识别到文本")
|
||||
sys.exit(0)
|
||||
|
||||
print("\n" + "="*50)
|
||||
print("转录结果:")
|
||||
print("="*50)
|
||||
print(text)
|
||||
|
||||
# 保存到文件
|
||||
output_path = os.path.splitext(audio_path)[0] + ".txt"
|
||||
try:
|
||||
with open(output_path, "w", encoding="utf-8") as f:
|
||||
f.write(text)
|
||||
print("")
|
||||
print(f"✓ 已保存到: {output_path}")
|
||||
except Exception as e:
|
||||
print(f"\n⚠️ 保存文件失败: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,40 @@
|
||||
#!/bin/bash
|
||||
# FunASR 音频转录脚本
|
||||
# 用途:将音频文件转录为文本
|
||||
|
||||
set -e
|
||||
|
||||
# 配置
|
||||
VENV_DIR="$HOME/.openclaw/workspace/funasr_env"
|
||||
TRANSCRIBE_PY="$HOME/.openclaw/workspace/skills/funasr-transcribe-skill/scripts/transcribe.py"
|
||||
|
||||
# 检查参数
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "用法: $0 <audio_file>"
|
||||
echo ""
|
||||
echo "示例:"
|
||||
echo " $0 /path/to/audio.ogg"
|
||||
echo " $0 recording.wav"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
AUDIO_FILE="$1"
|
||||
|
||||
# 检查文件是否存在
|
||||
if [ ! -f "$AUDIO_FILE" ]; then
|
||||
echo "❌ 错误:文件不存在: $AUDIO_FILE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查虚拟环境
|
||||
if [ ! -d "$VENV_DIR" ]; then
|
||||
echo "❌ 错误:FunASR 未安装"
|
||||
echo ""
|
||||
echo "请先运行安装脚本:"
|
||||
echo " bash ~/.openclaw/workspace/skills/funasr-transcribe/scripts/install.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 激活虚拟环境并转录
|
||||
source "$VENV_DIR/bin/activate"
|
||||
python3 "$TRANSCRIBE_PY" "$AUDIO_FILE"
|
||||
Reference in New Issue
Block a user