基于FunAsr实现录音文件识别接口,异步处理音频文件并返回识别结果

FunASR 语音识别服务

基于 FunASR + Paraformer-zh + FastAPI 实现的语音识别服务,支持异步处理音频文件并返回识别结果。

Github:https://github.com/friend-nicen/asr

功能特点

  • 支持本地音频文件和URL链接的音频识别
  • 异步队列处理,支持并发任务
  • RESTful API接口
  • 自动下载和管理模型
  • Redis任务队列

系统要求

  • Python 3.8+
  • Redis服务器
  • CUDA(可选,用于GPU加速)

安装

拉取项目并安装依赖,确保Redis服务器已启动:

pip install -r requirements.txt

配置

主要配置项在 api_server.pyworker.py 中:

  • Redis连接配置
  • 并发处理数量
  • 音频文件存储目录
  • 模型存储目录

使用方法

启动API服务器:

python api_server.py

首次运行worker时下载模型:

python worker.py --download

启动worker处理服务:

python worker.py

API接口

1. 提交识别任务

POST /recognize
Content-Type: application/json

{
"file": "path_to_audio_file_or_url"
}

响应:

{
   "task_id": "uuid",
   "message": "Task submitted successfully"
}

2. 查询任务状态

GET /status/{task_id}

响应:

{
   "task_id": "uuid",
   "status": "pending|processing|completed|failed",
   "result": "识别结果文本(如果完成)"
}

注意事项

  • 确保音频文件格式受支持(建议使用wav格式)
  • 保持Redis服务器正常运行
  • 首次运行时需要下载模型,可能需要一些时间
  • 调整MAX_WORKERS参数以适应服务器性能

错误处理

  • 文件不存在:返回400错误
  • URL下载失败:返回400错误
  • 任务不存在:返回404错误
  • 其他错误:相应的错误信息会记录在任务状态中

知识点

  • Paraformer 是一种基于 Transformer 的语音识别模型,paraformer-zh 是其针对中文语音识别的版本。它能够将中文语音信号直接转换为对应的文本内容,具有高效、准确的特点,并且可以处理不同长度的音频输入,无论是短语音片段还是长音频文件,都能较好地完成识别任务,为语音识别的基础任务提供有力支持。
  • FSMN-VAD 即基于 FSMN 网络的语音活动检测模型,用于检测语音信号中的语音段和非语音段,确定语音的起始和结束时间点。它能够帮助过滤掉音频中的无效部分,如静音、背景噪音等,只保留有效的语音部分,从而提高语音识别的效率和准确性,减少计算资源的浪费,通常在语音识别流程中前置使用,为后续的语音识别模型提供更精准的语音片段。
  • CT-Punc 是一个标点预测模型,可在语音识别生成的文本中添加适当的标点符号,使文本更具可读性和语义完整性。因为语音识别结果通常会缺少标点,而标点对于理解文本的语义和结构非常重要,该模型能够自动在合适的位置添加如句号、逗号、问号等标点符号,帮助用户更好地理解和使用语音识别的输出结果。