使用Funasr部署语音识别websockt案例

最近在做项目时,需要在服务器端获取客户端的麦克风输入语音,然后将语音识别成文字再返回给客户端。然后体验了阿里开源的FunASR,确实让人眼前一亮,主要部署相对简单(但还是走了一些抗,不过是我自己的问题。)其核心的Paraformer模型,号称"非自回归",实际体验下来,推理速度确实可以,接近实时,对追求效率的应用非常友好。 另一个亮点是"一体化"解决方案。它将语音端点检测(VAD)、标点恢复(PUNC)和ASR无缝串联,省去了自己拼接模块的麻烦。而且在这些环节还可以自己替换想用的模型开箱即用的体验极佳。在官方仓库中,还给出了许多使用demo,可以说非常的贴心。本文就使用的它给的websockt中的例子进行讲解,只需要改一两行代码就可以完美运行。 废话不多说,现在开始。

服务器端环境搭建

初始化目录

服务器环境,我放在了腾讯云的cloud studio上,安装环境配置什么的都很方便(没广告费,就不详细介绍了)。当然如果本地有环境的话,可以使用本地环境,显存只要3G就够用了。 首先使用uv初始化目录。

shell 复制代码
uv init asr-server-learn
cd asr-client-server-learn

# 创建并激活虚拟环境
uv venv
.venv\Scripts\activate

安装依赖

使用uv初始化环境时,如果为安装python,默认会下载最新的python版本,如果想自定义下载版本比如3.12,可以使用uv python install 3.12这个命令下载,但是由于github的原因可能会下载失败,如果目前我只知道两种办法解决,如果想要了解的可以留言,就不再这篇博客详细说了。

然后克隆FunASR仓库,如果无法访问的话,可以通过gitee来克隆,不知道怎么操作的话可以留言寻求帮助。 进入websockt的例子目录FunASR\runtime\python\websocket,修改代码,关闭ssl验证功能,非常简单,操作如下:

python 复制代码
# 在`funasr_wss_server.py`文件下找到如下代码:
parser.add_argument(
    "--certfile",
    type=str,
    default="../../ssl_key/server.crt",
    required=False,
    help="certfile for ssl",
)
# 替换为
parser.add_argument(
    "--certfile",
    type=str,
    default="",
    required=False,
    help="certfile for ssl",
)

如果这样的话,在运行时会出现如下错误:

然后安装client所需的包,具体命令如下:

shell 复制代码
uv add -r .\requirements_server.txt

这样安装的依赖不全,不过不用担心uv run funasr_wss_server.py运行这个命令会提示有哪些包没装,就像下面这样 然后使用uv add omegaconf添加依赖就行了,然后继续运行funasr_wss_server.py这个文件,每缺一个依赖,就使用uv add挨个添加就行。 当然如果想一步到位安装全部的依赖的话,评论说一下,我会传到GitHub上,暂时懒得传了。 依赖安装完成后,运行funasr_wss_server.py启动websocket服务端,还是这个命令。

shell 复制代码
uv run funasr_wss_server.py

第一次运行会网上下载所需的模型,如果是本地部署,也可以提前下载模型,但是需要改下相关代码,如果不知道如何改的话,后续我会补充(想得起来的话)。 等模型下载完成后,依赖也全部安装完成的话,再运行funasr_wss_server,不出意外的话,你会得到下面这个报错no runing event_loop 不要灰心,这已经完成服务器端部署80%的工作了,胜利就在眼前。这就需要改代码了。

修改代码

首先在funasr_wss_server.py文件最下面,找到如下代码并全部注释掉。 这是已经注释过了,然后在文件最下方添加如下代码

python 复制代码
async def main():
    async with websockets.serve(
        ws_serve, args.host, args.port, subprotocols=["binary"], ping_interval=None
    ) as server:
        # 保持服务器运行
        await asyncio.Future()  # 这会让服务器一直运行
asyncio.run(main())

最后,运行命令uv run funasr_wss_server.py,如果你看到下面这样, 那么恭喜你,服务器端运行成功。

客户端环境搭建

初始化目录和安装依赖

首先在本地使用uv初始化目录,千万不要在腾讯云服务器端,不然,就算连接成功,也识别不出来语音。

shell 复制代码
uv init asr-client-learn
cd asr-client-learn

# 创建并激活虚拟环境
uv venv
.venv\Scripts\activate

进入websockt的例子目录FunASR\runtime\python\websocket,然后安装client所需的包,具体命令如下:

shell 复制代码
uv add -r .\requirements_client.txt

同样,在安装依赖时,也会出现和服务器端安装依赖一样的问题,解决方法同上。

修改代码

FunASR\runtime\python\websocket目录下找到funasr_wss_client.py文件并打开。 先修改--ssl参数为0,关闭ssl功能。 然后将--host参数中的默认地址修改为服务器的地址。先打开腾讯云服务器的页面,然后点击端口管理(红箭头的按钮)。

点击红色方框中的链接复制下来,注意要看好端口号是10095。 将链接复制到--host的默认参数中。 然后使用uv run funasr_wss_client.py运行客户端命令,如果显示connect to....表示连接成功,注意要把服务器端也运行起来哦。 接下来就可以测试了最近在做项目时,需要在服务器端获取客户端的麦克风输入语音,然后将语音识别成文字再返回给客户端。然后体验了阿里开源的FunASR,确实让人眼前一亮,主要部署相对简单(但还是走了一些抗,不过是我自己的问题。)其核心的Paraformer模型,号称"非自回归",实际体验下来,推理速度确实可以,接近实时,对追求效率的应用非常友好。 另一个亮点是"一体化"解决方案。它将语音端点检测(VAD)、标点恢复(PUNC)和ASR无缝串联,省去了自己拼接模块的麻烦。而且在这些环节还可以自己替换想用的模型开箱即用的体验极佳。在官方仓库中,还给出了许多使用demo,可以说非常的贴心。本文就使用的它给的websockt中的例子进行讲解,只需要改一两行代码就可以完美运行。 废话不多说,现在开始。

服务器端环境搭建

初始化目录

服务器环境,我放在了腾讯云的cloud studio上,安装环境配置什么的都很方便(没广告费,就不详细介绍了)。当然如果本地有环境的话,可以使用本地环境,显存只要3G就够用了。 首先使用uv初始化目录。

shell 复制代码
uv init asr-server-learn
cd asr-client-server-learn

# 创建并激活虚拟环境
uv venv
.venv\Scripts\activate

安装依赖

使用uv初始化环境时,如果为安装python,默认会下载最新的python版本,如果想自定义下载版本比如3.12,可以使用uv python install 3.12这个命令下载,但是由于github的原因可能会下载失败,如果目前我只知道两种办法解决,如果想要了解的可以留言,就不再这篇博客详细说了。

然后克隆FunASR仓库,如果无法访问的话,可以通过gitee来克隆,不知道怎么操作的话可以留言寻求帮助。 进入websockt的例子目录FunASR\runtime\python\websocket,修改代码,关闭ssl验证功能,非常简单,操作如下:

python 复制代码
# 在`funasr_wss_server.py`文件下找到如下代码:
parser.add_argument(
    "--certfile",
    type=str,
    default="../../ssl_key/server.crt",
    required=False,
    help="certfile for ssl",
)
# 替换为
parser.add_argument(
    "--certfile",
    type=str,
    default="",
    required=False,
    help="certfile for ssl",
)

如果这样的话,在运行时会出现如下错误:

然后安装client所需的包,具体命令如下:

shell 复制代码
uv add -r .\requirements_server.txt

这样安装的依赖不全,不过不用担心uv run funasr_wss_server.py运行这个命令会提示有哪些包没装,就像下面这样 然后使用uv add omegaconf添加依赖就行了,然后继续运行funasr_wss_server.py这个文件,每缺一个依赖,就使用uv add挨个添加就行。 当然如果想一步到位安装全部的依赖的话,评论说一下,我会传到GitHub上,暂时懒得传了。 依赖安装完成后,运行funasr_wss_server.py启动websocket服务端,还是这个命令。

shell 复制代码
uv run funasr_wss_server.py

第一次运行会网上下载所需的模型,如果是本地部署,也可以提前下载模型,但是需要改下相关代码,如果不知道如何改的话,后续我会补充(想得起来的话)。 等模型下载完成后,依赖也全部安装完成的话,再运行funasr_wss_server,不出意外的话,你会得到下面这个报错no runing event_loop 不要灰心,这已经完成服务器端部署80%的工作了,胜利就在眼前。这就需要改代码了。

修改代码

首先在funasr_wss_server.py文件最下面,找到如下代码并全部注释掉。 这是已经注释过了,然后在文件最下方添加如下代码

python 复制代码
async def main():
    async with websockets.serve(
        ws_serve, args.host, args.port, subprotocols=["binary"], ping_interval=None
    ) as server:
        # 保持服务器运行
        await asyncio.Future()  # 这会让服务器一直运行
asyncio.run(main())

最后,运行命令uv run funasr_wss_server.py,如果你看到下面这样, 那么恭喜你,服务器端运行成功。

客户端环境搭建

初始化目录和安装依赖

首先在本地使用uv初始化目录,千万不要在腾讯云服务器端,不然,就算连接成功,也识别不出来语音。

shell 复制代码
uv init asr-client-learn
cd asr-client-learn

# 创建并激活虚拟环境
uv venv
.venv\Scripts\activate

进入websockt的例子目录FunASR\runtime\python\websocket,然后安装client所需的包,具体命令如下:

shell 复制代码
uv add -r .\requirements_client.txt

同样,在安装依赖时,也会出现和服务器端安装依赖一样的问题,解决方法同上。

修改代码

FunASR\runtime\python\websocket目录下找到funasr_wss_client.py文件并打开。 先修改--ssl参数为0,关闭ssl功能。 然后将--host参数中的默认地址修改为服务器的地址。先打开腾讯云服务器的页面,然后点击端口管理(红箭头的按钮)。

点击红色方框中的链接复制下来,注意要看好端口号是10095。 将链接复制到--host的默认参数中。 然后使用uv run funasr_wss_client.py运行客户端命令,如果显示connect to....表示连接成功,注意要把服务器端也运行起来哦。 接下来就可以测试了

测试

普通话测试 河南方言测试

其他的报错解决办法

Python.h: No such file or directory`

使用uv安装pyaudio这个库的时候如何出现这个错误: src/pyaudio/device_api.h:7:10: fatal error: Python.h: No such file or directory。 那么就需要使用sudo apt-get install python3-dev安装python开发库。目前我只在linux系统发现过这个问题,windows平台下还没发现过。

我计划创建一个学习群,大家可以在群里讨论问题,也会不定期分享一些大模型学习资料。有兴趣可以添加我的微信jsmxok。添加时请备注 学习

参考

  1. github.com/modelscope/...
  2. Windows系统下python新一代三方库管理工具uv及VSCode配置_vscode uv python-CSDN博客

测试

普通话测试 河南方言测试

其他的报错解决办法

Python.h: No such file or directory`

使用uv安装pyaudio这个库的时候如何出现这个错误: src/pyaudio/device_api.h:7:10: fatal error: Python.h: No such file or directory。 那么就需要使用sudo apt-get install python3-dev安装python开发库。目前我只在linux系统发现过这个问题,windows平台下还没发现过。

我计划创建一个学习群,大家可以在群里讨论问题,也会不定期分享一些大模型学习资料。有兴趣可以添加我的微信jsmxok。添加时请备注 学习

参考

  1. github.com/modelscope/...
  2. Windows系统下python新一代三方库管理工具uv及VSCode配置_vscode uv python-CSDN博客
相关推荐
IT_陈寒6 小时前
Python的线程池居然把我坑在了垃圾回收这块
前端·人工智能·后端
zhangxingchao7 小时前
AI应用开发八:RAG相关技术总结
前端·人工智能·后端
吴佳浩7 小时前
Go史上最大“打脸”现场来了:泛型方法终于实现了
后端·go
Huyuejia7 小时前
runtime-ask
后端
Rust研习社7 小时前
90% 的 Rust 新手都不知道的 3 个实用开发技巧
后端·rust·编程语言
ZengLiangYi7 小时前
sql.js WASM 深度解析
javascript·数据库·后端
Stick_ZYZ7 小时前
从“能调用工具”到“能稳定执行任务”:Agent 工程化的下一步
java·人工智能·后端·spring·ai
千云8 小时前
使用Dubbo延迟暴露解决启动接口超时,开发人员再也不用熬夜了!
后端
JustHappy8 小时前
古法编程秘籍(三):为什么需要函数?因为程序员讨厌重复劳动
前端·javascript·后端
用户2181697049308 小时前
Gin (六) mysql的操作 gin操作mysql
后端