OddASR:基于FunASR的API封装,支持离线转写+流式转写

由于我在做的小落同学(https://x.oddmeta.net)项目需要用到ASR功能,之前针对 FunASR、FireRedAsr、Vosk等ASR项目也做了一些评测,但是总体跑下来发现还是FunASR的整体表现最好,所以我就将FunASR给封装了一下,做了一个OddAsr的项目。

而考虑到ASR功能的用途广泛,之前也有一些朋友私下问过我相关的一些使用和封装的问题,尤其是流式ASR的支持(github上有好多FunASR的API封装,但是全是离线文件转写的,没有一个同时支持离线文件转写和流式转写的API封装项目),想了一下干脆直接把它开源出来吧。希望对有ASR需求的同学有帮助。

项目地址: https://github.com/oddmeta/oddasr

之前关于ASR相关的一些测试

ASR引擎测试:FireRedASR只能说小红书的诚意不够,https://www.oddmeta.net/archives/144
ASR引擎测试:FunASR,必须给阿里点一个赞,https://www.oddmeta.net/archives/165
可能是最紧凑、最轻量级的ASR模型:Vosk实战解析,https://www.oddmeta.net/archives/201

项目简介

OddASR是一个简单的ASR API服务器,基于强大的开源语音识别库FunASR构建。FunASR由ModelScope开发,提供了丰富的预训练模型和工具,可用于各种语音识别任务。
OddASR的目标是简化FunASR的部署,满足非实时音频处理的需求,同时也为实时流式转写提供了支持。

项目具有以下特点:

  • 简化部署:提供易于使用的REST API,方便进行ASR转录。
  • 本地参考:有独立的Python实现,可在本地进行ASR转录。
  • Docker支持:提供GPU和CPU部署的Dockerfile,简化服务器部署。
  • 易于使用:通过简单的API请求即可实现音频文件转录。

安装步骤

1. 克隆仓库

git clone https://github.com/oddmeta/oddasr.git
cd oddasr

2. 安装依赖

pip install -r requirements.txt

使用方法

1. 启动REST API服务器

python main_server.py

服务器将在http://127.0.0.1:12340上启动。

2. 测试文件ASR API

使用testAPI.py脚本测试API:

python testAPI.py test_en_steve_jobs_10s.wav txt

也可以使用curl命令发送音频文件到REST API:

curl -X POST -F "audio=@path/to/audio.wav" http://127.0.0.1:12340/v1/v1/asr

3. 测试流ASR API

使用testStreamAPI.py脚本测试API:

python testStreamAPI.py 111.pcm

4. 示例输出

  • text模式
是开始这个呃实时的一个转写。 
对, 然后是转写的一个效果, 大概大概就是这个样子。 
然后的话那个在这里边你也可以去给他那个加一个人。 
比如说是嗯我随便给他取一个名字, 
就是连云端的还是自己算的连云端的吧。 
  • spk模式
发言人 0: 是开始这个呃实时的一个转写。
发言人 0: 对,
发言人 0: 然后是转写的一个效果,
发言人 0: 大概大概就是这个样子。
发言人 0: 然后的话那个在这里边你也可以去给他那个加一个人。
发言人 0: 比如说是嗯我随便给他取一个名字,
发言人 1: 就是连云端的还是自己算的连云端的吧。
发言人 0: 呃本地的本地的本地的对,
发言人 0: 不用连看能调吧。
发言人 2: 这个还有对呀,
发言人 0: 然后这里边可以给他加格。
  • srt模式
0 00:00:01,010 --> 00:00:04,865 发言人 0: 是开始这个呃实时的一个转写。 
1 00:00:06,040 --> 00:00:06,280 发言人 0: 对, 
2 00:00:06,640 --> 00:00:08,660 发言人 0: 然后是转写的一个效果, 
3 00:00:08,680 --> 00:00:10,280 发言人 0: 大概大概就是这个样子。 
4 00:00:10,280 --> 00:00:14,500 发言人 0: 然后的话那个在这里边你也可以去给他那个加一个人。 
5 00:00:14,660 --> 00:00:19,665 发言人 0: 比如说是嗯我随便给他取一个名字, 
6 00:00:20,440 --> 00:00:23,200 发言人 1: 就是连云端的还是自己算的连云端的吧。 
7 00:00:23,240 --> 00:00:25,340 发言人 0: 呃本地的本地的本地的对, 
8 00:00:25,340 --> 00:00:27,275 发言人 0: 不用连看能调吧。 
9 00:00:29,120 --> 00:00:31,480 发言人 2: 这个还有对呀, 
10 00:00:32,130 --> 00:00:33,885 发言人 0: 然后这里边可以给他加格。 

5. Docker部署

  • GPU部署
docker build -t asr-service-gpu:v0.1.0.
docker run --gpus all -d -p 12340:12340 --name asr-service asr-service-gpu:v0.1.0
  • CPU部署
docker build -f Dockerfile_CPU -t asr-service-cpu:v0.1.0.
docker run -d -p 12340:12340 --name asr-service asr-service-cpu:v0.1.0

项目待办事项

  • 添加更多模型和功能:不断丰富模型库,提供更多实用功能。
  • 支持实时ASR:进一步优化实时流式转写的性能。
  • 添加更多自定义选项:如--mode--output_format--hotword等。
  • 简单UI展示:开发简单的用户界面,方便用户使用。
  • 支持声纹识别:满足特定场景下的声纹识别需求。
  • 其他增强功能:如设置并发发送线程数、支持不同格式的音频输入等。

参考资料

如果你对语音识别技术感兴趣,不妨试试OddASR。它简单易用,功能强大,能为你的语音转文字工作带来极大的便利。快来体验吧!