1. 程式人生 > >FreeSWITCH 語音識別 ASR 介面介紹 科大訊飛 百度 阿里雲 等介面實現

FreeSWITCH 語音識別 ASR 介面介紹 科大訊飛 百度 阿里雲 等介面實現

FreeSWITCH 語音識別 ASR 模組

最近很多人都對FreeSWITCH和ASR對接比較感謝興趣,我之前已經做了一個商業模組(商業模組請點選這裡http://www.dingdingtong.cn/smartivr/),考慮到大部分人,只是研究一下,並不準確購買商業模組,特意做一個開源專案給大家提供一個參考。

第一個版本實現 阿里雲ASR和FreeSWITCH的直接對接,把識別結果通過ESL輸出。

想了開發進度,和本專案的技術交流歡迎加QQ群:340129771

2017-12-10 第一版本程式碼提交

  • 安裝

    • 如果你覺得自己編譯太麻煩,可以直接下載我編譯好的,放在bin 目錄裡面。路徑請根據自己情況修改。注意只支援x64系統
    • mod_asr.so 複製到到 FreeSWITCH mod 目錄。 cp mod_asr.so /usr/local/freeswitch/mod/,如果是fs1.2,請用fs1.2_mod_asr.so的那個。
    • librealTimeUnity.so FreeSWITCH lib 目錄,或者系統lib目錄。cp librealTimeUnity.so /usr/local/freeswitch/lib/
    • libopus.so FreeSWITCH lib 目錄,或者系統lib目錄。cp libopus.so.0 /usr/local/freeswitch/lib/
    • config-realtime.txt 複製到 /etc/目錄。cp config-realtime.txt /etc/
    • /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml 加入 <load module="mod_asr"/>
    • 重啟FreeSWITCH,或者fs_cli 裡面執行 reload mod_asr
    • 注意預設只支援單聲道8000hz的編碼,opus或者g722編碼不支援。
  • 編譯

    • 下載mod_asr程式碼 git clone https://github.com/cdevelop/FreeSWITCH-ASR.git
    • 編譯 g++ -shared -fPIC -o mod_asr.so mod_asr.cpp -pthread -I ./nlsSpeech-release/include -I /usr/local/freeswitch/include -L./nlsSpeech-release/lib/linux -L /usr/local/freeswitch/lib -ldl -lopus -lrealTimeUnity -lfreeswitch
      ,nlsSpeech-release和FreeSWITCH路徑請根據自己情況修改。
  • 使用

    • fs_cli 執行 originate user/1001 ‘start_asr:id secret,park’ inline,如 bgapi originate user/1001 'start_asr:LTAIRLpr2pJFjQbY oxrJhiBZB5zLX7LKYqETC8PC8ulwh0,park' inline,分機接起來開始說話,就可以看到識別結果輸出了。 輸出結果的日誌等級是 notify console loglevel 5
    • dialplan中使用 測試的時候如果不執行其他APP,park超時會自動結束通話,可以加入<action application="set" data="park_timeout=60"/>修改park超時時間。

      <extension name="asr">
          <condition field="destination_number" expression="^(888)$">
              <action application="answer"/>
              <action application="start_asr" data="LTAIRLpr2pJFjQbY oxrJhiBZB5zLX7LKYqETC8PC8ulwh0"/>
              <action application="park"/>
          </condition>
      </extension> 
      
  • 開發

    • fs_cli 測試方式 ,執行 /event custom asr 訂閱事件。
    • 識別結果會通過esl輸出(需要訂閱 custom asr 事件)(阿里雲返回的原始json資料)例子如下:

      RECV EVENT
      Event-Subclass: asr
      Event-Name: CUSTOM
      Core-UUID: 48a08a69-7858-407a-be69-679150d34193
      FreeSWITCH-Hostname: MiWiFi-R3D-srv
      FreeSWITCH-Switchname: MiWiFi-R3D-srv
      FreeSWITCH-IPv4: 192.168.31.164
      FreeSWITCH-IPv6: ::1
      Event-Date-Local: 2017-12-10 11:30:32
      Event-Date-GMT: Sun, 10 Dec 2017 03:30:32 GMT
      Event-Date-Timestamp: 1512876632835590
      Event-Calling-File: mod_asr.cpp
      Event-Calling-Function: OnResultDataRecved
      Event-Calling-Line-Number: 55
      Event-Sequence: 914
      ASR-Response: {"finish":0,"request_id":"ee87d7fd5e304bdaa9343d9262f34125","result":{"sentence_id":2,"begin_time":4200,"end_time":6525,"status_code":0,"text":"美國拜拜"},"status_code":200,"version":"2.0"}
      Channel: sofia/external/[email protected]
      

      ASR-Response:asr返回結果。
      Channel:當前通道。主要使用這2個通道變數。

    • 如果你需要使用者說完一整句話,再一次性返回結果。請把config-realtime.txt檔案ResponseMode:streaming修改為ResponseMode:normal
    • 如果你覺得自己開發太麻煩了,可以聯絡QQ:1280791187 或者微信:cdevelop,獲取商業服務和支援。