FunASR 模型的整理和集成,Docker一键启动,能够实时识别语音输入,准确度非常高

项目地址:https://github.com/harry0703/AudioNotes

FunASR开源仓库: https://github.com/modelscope/FunASR

效果展示

image

使用方法

Docker部署🐳

确保已经安装了Docker软件,没有的话,从官网下载安装 https://www.docker.com/products/docker-desktop/

复制以下代码到终端运行即可

1
2
curl -fsSL https://harryai.cc/realtime-funasr/docker-compose.yml -o docker-compose.yml
docker-compose up

注意:第一次启动过程可能会有点长,需要从魔搭下载4个模型

docker 启动后,访问 http://localhost:10096/

👉👉 如果你想了解更多,可以往下看

参数说明

① 模型模式

  • 2pass: (默认)实时语音识别,并且句尾采用离线模型进行纠错(准确度更高
  • online: 实时语音识别
  • offline: 一句话识别

② 逆文本标准化(ITN)

  • : (默认) 表示进行逆文本标准化
  • 否: 表示不进行逆文本标准化

逆文本标准化(Inverse Text Normalization, ITN) 是语音识别和自然语言处理领域的一种技术,用于将自动语音识别(ASR)系统生成的文本转化为更自然和可读的格式。这是对文本标准化(Text Normalization, TN)的逆过程。

逆文本标准化的目的

当语音被转换为文本时,ASR 系统通常会输出一种更标准化的文本形式。例如:

  • 数字 “123” 可能会被识别为 “一二三” 或 “123”。
  • 日期 “2024年7月25日” 可能会被识别为 “二零二四年七月二十五日” 或 “2024年7月25日”。

这些输出虽然标准化,但不一定是人们习惯书写或阅读的格式。 ITN 的作用是将这些标准化的文本转换回更自然、更符合书面习惯的形式。例如:

  • “一二三” 转换为 “123”
  • “二零二四年七月二十五日” 转换为 “2024年7月25日”
  • “五千七百六十三” 转换为 “5763”

👉👉如果你想使用API,请参考以下文档

系统架构图

image

注意:

  1. 10096端口为网页界面
  2. 10095端口为websocket通信端口 > image

🅰️ 从客户端往服务端发送数据

消息格式

配置参数用json,音频数据采用bytes

① 首次通信

客户端发送配置参数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "chunk_size": [
    5,
    10,
    5
  ],
  "wav_name": "h5",
  "is_speaking": true,
  "wav_format": "pcm",
  "chunk_interval": 10,
  "itn": true,
  "mode": "2pass",
  "hotwords": "{\"阿里巴巴\":20,\"hello world\":40}"
}

参数说明:

  • wav_name:表示需要推理音频文件名
  • wav_format:表示音视频文件后缀名,只支持pcm音频流
  • is_speaking:表示断句尾点,例如,vad切割点,或者一条wav结束
  • chunk_size:表示流式模型latency配置,[5,10,5],表示当前音频为600ms,并且回看300ms,又看300ms。
  • hotwords:如果使用热词,需要向服务端发送热词数据(字符串),格式为 “{“阿里巴巴”:20,“通义实验室”:30}”
  • itn: 设置是否使用itn,默认 true

② 发送音频数据

直接将音频数据移除头部信息后,使用 bytes 数据发送,支持音频采样率为8000

③ 发送结束标志

音频数据发送结束后,需要发送结束标志

1
2
3
{
  "is_speaking": false
}

🅱️ 从服务端往客户端发数据

发送识别结果

识别中

1
2
3
4
5
6
{
  "is_final": false,
  "mode": "2pass-online",
  "text": "阿里",
  "wav_name": "h5"
}

识别结束

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
{
  "is_final": false,
  "mode": "2pass-offline",
  "stamp_sents": [
    {
      "end": 4385,
      "punc": "",
      "start": 820,
      "text_seg": "阿 里 开 源 的 语 音 识 别 真 是 太 牛 了"
    }
  ],
  "text": "阿里开源的语音识别真是太牛了",
  "timestamp": "[[820,1060],[1060,1319],[1319,1480],[1480,1760],[1760,2220],[2220,2420],[2420,2659],[2659,2820],[2820,3300],[3300,3480],[3480,3659],[3659,3820],[3820,4060],[4060,4385]]",
  "wav_name": "h5"
}

参数说明:

  • mode:推理模式
    • 2pass-online:表示实时识别结果
    • 2pass-offline:表示2遍修正识别结果
  • wav_name:需要推理音频文件名
  • text:语音识别输出文本

👉👉踩坑

报错:录音open失败:浏览器禁止不安全页面录音

如果你是在其他电脑或服务器上部署的服务,而不是在本地,当你打开页面后,可能会遇到这个问题。

假设服务器IP是 192.168.1.170,打开的页面是 http://192.168.1.170:10096/

解决方法: image

Chrome浏览器

  • 在浏览器地址栏输入 chrome://flags/#unsafely-treat-insecure-origin-as-secure
  • http://192.168.1.170:10096/ 添加到输入框内
  • Insecure origins treated as secure 设置为 Enabled
  • 重启浏览器

Edge浏览器

  • 在浏览器地址栏输入 edge://flags/#unsafely-treat-insecure-origin-as-secure
  • http://192.168.1.170:10096/ 添加到输入框内
  • Insecure origins treated as secure 设置为 Enabled
  • 重启浏览器