• FreeSWITCH对接vosk实现实时语音识别


    环境:CentOS 7.6_x64
    FreeSWITCH版本 :1.10.9
    Python版本:3.9.2

    一、背景描述

    vosk是一个开源语音识别工具,可识别中文,之前介绍过python使用vosk进行中文语音识别,今天记录下FreeSWITCH对接vosk实现实时语音识别。
    vosk离线语音识别可参考我之前写的文章:

    二、具体实现

    1、编译及安装vosk模块

    可直接使用github上的代码进行编译:

    https://github.com/alphacep/freeswitch.git

     这里描述下使用FreeSWITCH 1.10.9 编译 mod_vosk 的过程,大致步骤如下:

    1)将 mod_vosk 代码复制到 freeswitch-1.10.9.-release/src/mod/asr_tts 目录;

    2)modules.conf 文件中启用mod_vosk模块;

     3)生成 Makefile 文件;

    ./devel-bootstrap.sh && ./configure

    4) 编译并安装 vosk 模块;

    cd freeswitch-1.10.9.-release/src/mod/asr_tts/mod_vosk
    make 
    make install

    fs编译遇到问题,可参考这篇文章:CentOS7环境源码安装freeswitch1.10

     2、配置 vosk 模块

    1)启用 vosk 模块;

    编辑 autoload_configs/modules.conf.xml 文件,启用 vosk 模块:

    "mod_vosk"/>

    2)配置 conf 文件;

    将 mod_vosk/conf/vosk.conf.xml 配置文件复制到 如下路径:

    /usr/local/freeswitch/conf/autoload_configs/

    修改 vosk 服务器地址:

    三、运行效果

    1、启动 vosk 服务器

    目录:vosk-server\websocket

    启动命令如下:

    workon py39env
    python asr_server.py vosk-model-cn-0.15

    运行效果如下:

    具体可参考我之前写的文章:python使用vosk进行中文语音识别

     2、实时语音识别

    编写拨号方案:

    复制代码
    <condition field="destination_number" expression="^123456$">
      <action application="answer"/>
      <action application="set" data="fire_asr_events=true"/>
      <action application="detect_speech" data="vosk default default"/>
      <action application="sleep" data="10000000"/>
    condition>
    复制代码

    本地分机拨打123456进行验证,运行效果如下:

     运行效果视频获取途径:

     关注微信公众号(聊聊博文,文末可扫码)后回复 2023050401 获取。

    3、回铃音识别

    这里使用其它服务器配合来模拟回铃音。
    fs服务器 :192.168.137.32
    回铃音服务器 :192.168.137.31
    3.1 配置回铃音服务器
    核心点是使用 pre_answer 应用,设置回铃音。
    拨号方案如下:
    复制代码
    <extension name="public_extensions">
          <condition field="destination_number" expression="^(654321)$">
            <action application="pre_answer"/>
            <action application="set" data="ringback=/usr/local/freeswitch/sounds/test/tips1.wav"/>
            <action application="transfer" data="1008 XML default"/>
          condition>
    extension>
    复制代码

    需要注意的是,如果回铃音不生效,可以看下后续的拨号方案是否有替换动作。 

    3.2 配置网关

    网关配置信息: 

    复制代码
    [root@host32 conf]# cat sip_profiles/external/gw_a.xml
    <include>
        <gateway name="gw_A">
            <param name="username" value="anonymous"/>
            <param name="from-user" value=""/>
            <param name="password" value=""/>
            <param name="outbound-proxy" value="192.168.137.31:5080"/>
            <param name="register-proxy" value="192.168.137.31:5080"/>
            <param name="expire-seconds" value="120"/>
            <param name="register" value="false"/>
            <param name="register-transport" value="UDP"/>
            <param name="caller-id-in-from" value="true"/>
            <param name="extension-in-contact" value="true"/>
            <variables>
              <variable name="gateway_name" value="gw_A"/>
            variables>
        gateway>
    include>
    [root@host32 conf]#
    复制代码

    3.3 编写本地拨号方案

    本地拨号方案:

    <condition field="destination_number" expression="^9123456$">
      <action application="bridge" data="{ignore_early_media=false,bridge_early_media=true,fire_asr_events=true,execute_on_pre_answer='detect_speech vosk default default'}sofia/gateway/gw_A/654321"/>
    condition>

    本地分机拨打9123456,可听到回铃音,识别效果如下:

     运行效果视频获取途径:

     关注微信公众号(聊聊博文,文末可扫码)后回复 2023050402 获取。

    四、资源下载

    本文涉及源码及预编译模块二进制文件,可以从如下途径获取:

    关注微信公众号(聊聊博文,文末可扫码)后回复 20230504 获取。

  • 相关阅读:
    React Router,常用API有哪些?
    10个免费3D模型网站
    1531_AURIX_TriCore内核架构_任务以及函数
    【云原生之Docker实战】使用Docker部署Wizard文档管理系统
    ChatGPT原理简介
    WS-FLV直播协议分析
    VTK PolyData 重采样 数据抽取 vtkDecimatePro
    深圳国际物流详解:深圳国际物流公司有哪些
    10-SRCNN-使用CNN实现超分辨成像
    opensips开启python支持
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/fsvosk20230504.html