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 模塊:

<load module="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 獲取。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章