AI

FunASR实时语音识别部署和使用

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

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

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

效果展示

image

使用方法

Docker部署🐳

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

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

1 2curl -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
  • 重启浏览器

AI相关的一切

留言

您的邮箱地址不会被公开。 必填项已用 * 标注