FreeSWITCH 語音識別 ASR 介面介紹 科大訊飛 百度 阿里雲 等介面實現
阿新 • • 發佈:2019-02-19
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編碼不支援。
- 如果你覺得自己編譯太麻煩,可以直接下載我編譯好的,放在bin 目錄裡面。路徑請根據自己情況修改。注意只支援x64系統
編譯
- 下載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
- 下載mod_asr程式碼
使用
- fs_cli 執行 originate user/1001 ‘start_asr:id secret,park’ inline,如
bgapi originate user/1001 'start_asr:LTAIRLpr2pJFjQbY oxrJhiBZB5zLX7LKYqETC8PC8ulwh0,park' inline
,分機接起來開始說話,就可以看到識別結果輸出了。 輸出結果的日誌等級是 notifyconsole 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 執行 originate user/1001 ‘start_asr:id secret,park’ inline,如
開發
- 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,獲取商業服務和支援。
- fs_cli 測試方式 ,執行