GitHub tidak masuk setiap hari. Jika Anda memiliki pertanyaan, silakan hubungi [email protected] dan balas di waktu luang Anda. Terima kasih!
Ini adalah proyek GitHub pertama saya. Saya ingin mengucapkan terima kasih kepada situs web Cotin "Membangun Sistem Layanan Pelanggan Cerdas yang sederhana" (I), (ii), dan (ii) atas bantuan proses konstruksi. Sebelum membaca tutorial ini, Anda dapat membaca tiga artikel ini terlebih dahulu. Tutorial ini menyesuaikan pesanan konstruksi berdasarkan ini dan memberikan lebih banyak detail operasi, penanganan kesalahan, dan deskripsi konstruksi lainnya.
Gunakan Freeswitch untuk menerima panggilan telepon seluler pengguna, gunakan plug-in iFlytek Open Platform (XFYUN) untuk mengintegrasikan plug-in IFLYTEK OPEN PLATFER OPEN (XFYUN) untuk melakukan pengenalan suara (ASR), dan panggilan sintesis suara (TTS) berdasarkan logika bisnis khusus untuk membangun pusat panggilan suara end-to-end sederhana.

Freeswitch dalam contoh ini dikompilasi dan dipasang di MacOS High Sierra 10.13.4 System Version. Itu tidak diinstal menggunakan paket perangkat lunak. Untuk langkah -langkah instalasi tertentu, silakan lihat Pendahuluan Instalasi Situs Web Resmi. Platform lain seperti Linux (Ubuntu, CentOS) harus berhasil diinstal.
Berikut ini adalah langkah -langkah untuk kompilasi dan instalasi kode sumber:
1. Unduh Kode Sumber Freeswitch:
cd /usr/local/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch2. Instal Perpustakaan Ketergantungan
brew install autoconf
brew install automake
brew install libtool
brew install pkg-config
brew install speexdsp
brew install speex
brew install libldns-dev
brew install OpenSSL
brew install pcre
brew install pkgconfig sqlite3
brew install lua
brew install opus
brew install libsndfileCatatan: Untuk platform sistem lainnya, harap konfirmasi konten perpustakaan dependensi sendiri. Kemungkinan Hasil Pencarian: Ubuntu/Centos Freeswitch Instalasi Dependensi. Di bawah Ubuntu: libtool tidak ditemukan.
3. Kompilasi dan instal
cd freeswitch/
# 先执行 bootstrap.sh,生成configure文件
./bootstrap.sh
./configure --prefix=/usr/local/freeswitch
make
make install
make cd-sounds-install
make cd-moh-install4. Jalankan
cd /usr/local/freeswitch/bin
./freeswitchAnda dapat memulai aplikasi.
Catatan: Masalah yang mungkin terjadi selama pemasangan. Kesalahan dalam konfigurasi.
Freeswitch dikonfigurasi dengan 1000-1019 (20) pengguna secara default, dengan kata sandi default 1234. Anda dapat melompat ke langkah verifikasi "Langkah 4 Tes dan Verifikasi" di muka, Masuk dan Tekan 5000, dan Anda dapat mendengar Panduan Menu Suara Sampel untuk IVR default.
Server UNIMRCP dalam contoh ini dikompilasi dan diinstal di CentOS 7. Berkat kode sumber server UNIMRCP yang telah ditulis untuk mengintegrasikan IFLYTEK SDK yang disediakan oleh pengguna GitHub Cotinyang.
1. Unduh Kode Sumber Demo Plugin UNIMRCP Plugin:
cd /opt
git clone https://github.com/cotinyang/MRCP-Plugin-Demo.git MRCP-Plugin-Demo2. Lingkungan Persiapan Kompilasi
cd MRCP-Plugin-Demo/unimrcp-deps-1.5.0
# # 编译可能出现错误, 注释掉:107 ~ 109, getopt的set,其中存在不识别的option
# # 编译生成apr, apr-util, target path: ./libs
./build-dep-libs.shCatatan: 1. Anda harus memasukkan Y dua kali selama proses dan mengonfirmasi; 2. Selain itu, kami telah membayar proyek yang kami pertahankan untuk proyek demo ini, dengan alamatnya https://github.com/wangkaisine/mrcp-plugin-demo Anda juga dapat menggunakan kode sumber alamat ini.
3. Kompilasi dan instal UNIMRCP
cd unimrcp-1.5.0
./bootstrap
# # 如果不能自动检测apr,apr-util,请在configure中增加 option:--with-apr=/path/apr --with-apr-util=/path/apr-util/
# # apr, apr-util由./build-dep-libs.sh 生成
./configure
make
make installAnda dapat melihat UNIMRCP yang terpasang di/usr/lokal/.
4. Test Run
cd /usr/local/unimrcp/bin
./unimrcpserver -o 3Anda dapat menggunakan klien untuk memverifikasi
cd /usr/local/unimrcp/bin
./unimrcpclient
> help
usage:
- run [app_name] [profile_name] (run demo application)
app_name is one of ' synth ' , ' recog ' , ' bypass ' , ' discover '
profile_name is one of ' uni2 ' , ' uni1 ' , ...
examples:
run synth
run recog
run synth uni1
run recog uni1
- loglevel [level] (set loglevel, one of 0,1...7)
- quit, exitMasukkan bantuan untuk masuk, berikan metode penggunaan, masukkan run recog untuk menjalankan tes pengenalan ucapan, dan menjalankan synth untuk melakukan tes sintesis ucapan.
1. Platform Pengembangan Iflytek Unduh SDK
Karena paket SDK yang diunduh dari platform IFLYTEK Open dikaitkan dengan pengguna dan aplikasi yang dibuat oleh pengguna, perlu untuk menghapus semua file dan folder di pihak ketiga/xfyun, dan mengunduh ulang dan membuka ritsleting SDK Anda sendiri. Direktori dan kode sumber pada dasarnya sama.
Anda perlu mendaftar dan masuk ke platform Open IFLYTEK, masukkan halaman konsol, dan membuat aplikasi;
Dapatkan appid Anda di antarmuka aplikasi saya dan "tambahkan layanan baru" untuk aplikasi, pilih layanan “Dikte Suara” dan “Sintesis Suara Online” (diperlukan dalam contoh ini);
Klik "SDK Download" di sebelah kanan, dan konfirmasi di halaman lompat yang "Pilih Aplikasi" telah memilih aplikasi yang Anda buat, "Pilih kemampuan AI yang Anda butuhkan" Pilih dua layanan di atas, dan klik "Unduh SDK" untuk menunggu SDK dihasilkan dan diselesaikan unduh.
Buka zip dan ganti semua file dan folder di bawah MRCP-PLUGIN-DEMO/UNIMRCP-1.5.0/Plugins/Pihak Ketiga/Xfyun/.
Catatan: Pilih "Linux" untuk membuat platform aplikasi di halaman aplikasi.
2. Penulisan dan Terjemahan
Langkah ini akan memberi tahu Anda cara menulis kode plug-in untuk UNIMRCP, yaitu cara mendapatkan file dan konfigurasi terkait folder XFYUN_RECOG dan XFYUN_XYNTH di folder MRCP-PLUGIN-DEMO/UNIMRCP-1.5.0/Plugins. Jika Anda tidak memperhatikan detail ini saat ini, Anda dapat melewatkan langkah ini ke langkah 4.
Faktanya, kode MRCP-plugin-demo di atas adalah kode plugin yang mengunduh UNIMRCP 1.5.0 dan UNIMRCP Deps 1.5.0 di situs web resmi UNIMRCP dan menambahkan atas dasar ini.
Pertama edit file configure.ac dan definisi makro yang digunakan di Makefile sebagai berikut. Plugin Xfyun Recognizer ditambahkan sebagai berikut:
dnl XFyun recognizer plugin.
UNI_PLUGIN_ENABLED(xfyunrecog)
AM_CONDITIONAL([XFYUNRECOG_PLUGIN],[test " ${enable_xfyunrecog_plugin} " = " yes " ])
...
plugins/xfyun-recog/Makefile
...
echo XFyun recognizer plugin....... : $enable_xfyunrecog_pluginCatatan: Di antaranya, ··· adalah konfigurasi default lainnya dalam file ini. Silakan temukan lokasi yang sesuai untuk diisi.
Sejalan dengan itu, penambahan plugin Xfyun synthesizer adalah sebagai berikut:
dnl XFyun synthesizer plugin.
UNI_PLUGIN_ENABLED(xfyunsynth)
AM_CONDITIONAL([XFYUNSYNTH_PLUGIN],[test " ${enable_xfyunsynth_plugin} " = " yes " ])
···
plugins/xfyun-synth/Makefile
···
echo XFyun synthesizer plugin...... : $enable_xfyunsynth_pluginMenambahkan kode sumber dan direktori
Di direktori plugin, buat direktori Xfyun-Recog baru dan buat direktori SRC baru di bawah direktori ini. Anda dapat menyalin demo_recog_engine.c ke direktori ini dan mengubahnya menjadi xfyun_recog_engine.c, dan memodifikasi file xfyun_recog_engine. Direktori Xfyun-Synth.
Buat file Makefile.am baru di folder Xfyun-Recog, dengan konten berikut:
AM_CPPFLAGS = $( UNIMRCP_PLUGIN_INCLUDES )
plugin_LTLIBRARIES = xfyunrecog.la
xfyunrecog_la_SOURCES = src/xfyun_recog_engine.c
xfyunrecog_la_LDFLAGS = $( UNIMRCP_PLUGIN_OPTS )
-L $( top_srcdir ) /plugins/third-party/xfyun/libs/x64
-lmsc -ldl -lpthread -lrt -lstdc++
xfyunrecog_ladir = $( libdir )
xfyunrecog_la_DATA = $( top_srcdir ) /plugins/third-party/xfyun/libs/x64/libmsc.so
include $( top_srcdir ) /build/rules/uniplugin.am
UNIMRCP_PLUGIN_INCLUDES += -I $( top_srcdir ) /plugins/third-party/xfyun/includeSejalan dengan itu, buat folder Makefile.am baru di bawah folder Fyun-Synth, dengan konten berikut:
AM_CPPFLAGS = $( UNIMRCP_PLUGIN_INCLUDES )
plugin_LTLIBRARIES = xfyunsynth.la
xfyunsynth_la_SOURCES = src/xfyun_synth_engine.c
xfyunsynth_la_LDFLAGS = $( UNIMRCP_PLUGIN_OPTS )
-L $( top_srcdir ) /plugins/third-party/xfyun/libs/x64
-lmsc -ldl -lpthread -lrt
xfyunsynth_ladir = $( libdir )
include $( top_srcdir ) /build/rules/uniplugin.am
UNIMRCP_PLUGIN_INCLUDES += -I $( top_srcdir ) /plugins/third-party/xfyun/includeUbah file Makefile.am di folder plugin, dan tambahkan isi xfyun-recog sebagai berikut:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-recog
endifSejalan dengan itu, konten yang ditambahkan ke Xfyun-Synth adalah sebagai berikut:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-synth
endifUbah file conf/uniMrcpserver.xml, dan ubah dari mengaktifkan mesin demo secara default hingga mengaktifkan dua mesin kami.
Xfyun-Recog dimodifikasi sebagai berikut:
< engine id = " Demo-Recog-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Recog-1 " name = " xfyunrecog " enable = " true " />Sejalan dengan itu, Xfyun-Synth dimodifikasi sebagai berikut:
< engine id = " Demo-Synth-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Synth-1 " name = " xfyunsynth " enable = " true " />Pada saat yang sama, jika Anda siap untuk menghubungkan server UNIMRCP dan Freeswitch, Anda harus mengkonfigurasi alamat IP server di conf/uniMrcpserver.xml, yaitu, alamat akses subnet dari instalasi UNIMRCP saat ini.
Komponkan ulang dan instal UNIMRCP (Langkah 2 3).
Saat Anda memulai masalah berikut:
- Gagal memuat dso: /usr/local/unimrcp/lib/libmsc.so: simbol yang tidak ditentukan: _ztvn10__cxxabiv117__class_type_infoe
Perbaiki: -lstdc ++
- ./unimrcpserver: Kesalahan saat memuat perpustakaan bersama: libsofia-sip-ua.so.0: tidak dapat membuka file objek bersama: tidak ada file atau direktori tersebut
memperbaiki:
在etc/ld.so.conf 内容增加: /usr/local/lib
ldconfig 将ld.so.conf读入cacheMengkonfigurasi Freeswitch
Kita perlu menghubungkan kedua FreeSwitch yang menangani panggilan suara pengguna dan server UNIMRCP yang mengirimkan permintaan ke mesin xfyun.
1. Mengkonfigurasi modul UNIMRCP dan memuatnya secara otomatis;
# 编辑/usr/local/src/freeswitch/modules.conf文件,找到要安装的模块,去掉前面的注释符号#
cd /usr/local/src/freeswitch
vim modules.conf
# asr_tts/mod_unimrcp
asr_tts/mod_unimrcp
# 执行make mod_xxx-install命令,这样就编译相应模块,并把编译后的动态库安装的/usr/local/freeswitch/mod目录下
make mod_unimrcp-install
# 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,去掉注释符号,如果没有发现对应模块,则添加
< load module= " mod_unimrcp " / >2. Atur file profil dan file conf;
Buat file konfigurasi UNIMRCPSERVER-MRCP-V2.XML baru di/usr/local/freeswitch/conf/mrcp_profiles direktori:
< include >
<!-- UniMRCP Server MRCPv2 -->
<!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
< profile name = " unimrcpserver-mrcp2 " version = " 2 " >
<!-- MRCP 服务器地址 -->
< param name = " server-ip " value = " 192.168.1.23 " />
<!-- MRCP SIP 端口号 -->
< param name = " server-port " value = " 8060 " />
< param name = " resource-location " value = " " />
<!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
< param name = " client-ip " value = " 192.168.1.24 " />
< param name = " client-port " value = " 5069 " />
< param name = " sip-transport " value = " udp " />
< param name = " speechsynth " value = " speechsynthesizer " />
< param name = " speechrecog " value = " speechrecognizer " />
<!-- param name="rtp-ext-ip" value="auto"/ -->
< param name = " rtp-ip " value = " 192.168.1.24 " />
< param name = " rtp-port-min " value = " 4000 " />
< param name = " rtp-port-max " value = " 5000 " />
< param name = " codecs " value = " PCMU PCMA L16/96/8000 " />
<!-- Add any default MRCP params for SPEAK requests here -->
< synthparams >
</ synthparams >
<!-- Add any default MRCP params for RECOGNIZE requests here -->
< recogparams >
<!-- param name="start-input-timers" value="false"/ -->
</ recogparams >
</ profile >
</ include >Konfigurasikan /usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml file:
< configuration name = " unimrcp.conf " description = " UniMRCP Client " >
< settings >
<!-- UniMRCP profile to use for TTS -->
< param name = " default-tts-profile " value = " unimrcpserver-mrcp2 " />
<!-- UniMRCP profile to use for ASR -->
< param name = " default-asr-profile " value = " unimrcpserver-mrcp2 " />
<!-- UniMRCP logging level to appear in freeswitch.log. Options are:
EMERGENCY|ALERT|CRITICAL|ERROR|WARNING|NOTICE|INFO|DEBUG -->
< param name = " log-level " value = " DEBUG " />
<!-- Enable events for profile creation, open, and close -->
< param name = " enable-profile-events " value = " false " />
< param name = " max-connection-count " value = " 100 " />
< param name = " offer-new-connection " value = " 1 " />
< param name = " request-timeout " value = " 3000 " />
</ settings >
< profiles >
< X-PRE-PROCESS cmd = " include " data = " ../mrcp_profiles/*.xml " />
</ profiles >
</ configuration >Catatan: 1. Server-IP di UniMrcpserver-Mrcp-V2.xml adalah IP host yang dimulai oleh UniMrcpserver; 2. Klien-IP dan RTP-IP adalah host yang dimulai oleh Freeswitch, dan port free-port klien yang diakses oleh ponsel karena kliennya 5060 secara default, yang berbeda dari keduanya; 3. Nama profil di uniMrcpserver-mrcp-v2.xml harus sama dengan profil default-tts di unimrcp.conf.xml dan profil default (beberapa dokumen mengatakan bahwa nama file XML di MRCP_PROFILE juga harus konsisten dengan dua ini, yang sebenarnya tidak penting).
Attenion: Penting untuk menggunakan UniMrcpserver dan Freeswitch di segmen jaringan yang sama. Yang terbaik adalah melakukan tes pada mesin fisik yang sama saat menggunakannya.
3. Konfigurasikan IVR dan skrip.
Tambahkan konfigurasi berikut di /usr/local/freeswitch/conf/dialplan/default.xml:
< extension name = " unimrcp " >
< condition field = " destination_number " expression = " ^5001$ " >
< action application = " answer " />
< action application = " lua " data = " names.lua " />
</ condition >
</ extension >Tambahkan Names.lua Script di Direktori/Usr/Lokal/Freeswitch/Scripts:
session : answer ()
-- freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'n")
welcome = " ivr/ivr-welcome_to_freeswitch.wav "
menu = " ivr/ivr-this_ivr_will_let_you_test_features.wav "
--
grammar = " hello "
no_input_timeout = 80000
recognition_timeout = 80000
confidence_threshold = 0.2
--
session : streamFile ( welcome )
-- freeswitch.consoleLog("INFO", "Prompt file is n")
tryagain = 1
while ( tryagain == 1 ) do
--
session : execute ( " play_and_detect_speech " , menu .. " detect:unimrcp {start-input-timers=false,no-input-timeout= " .. no_input_timeout .. " ,recognition-timeout= " .. recognition_timeout .. " } " .. grammar )
xml = session : getVariable ( ' detect_speech_result ' )
--
if ( xml == nil ) then
freeswitch . consoleLog ( " CRIT " , " Result is 'nil' n " )
tryagain = 0
else
freeswitch . consoleLog ( " CRIT " , " Result is ' " .. xml .. " ' n " )
tryagain = 0
end
end
--
-- put logic to forward call here
--
session : sleep ( 250 )
session : set_tts_params ( " unimrcp " , " xiaofang " );
session : speak ( "今天天气不错啊" );
session : hangup ()Kita perlu menambahkan file sintaks Hello.gram ke direktori/usr/local/freeswitch/tata bahasa. Itu bisa kosong. Ini harus memenuhi standar Sintaks Pengenalan Pidato 1.0 Standar (disebut sebagai SRGS1.0 singkatnya). File sintaks ini mesin ASR dapat digunakan saat mengenalinya.
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< grammar version = " 1.0 " xml : lang = " zh-cn " root = " Menu " tag-format = " semantics/1.0 "
xmlns=http://www.w3.org/2001/06/grammar
xmlns:sapi= " http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions " ><!- 这些都是必不可少的-->
< rule id = " city " scope = " public " >
< one-of > <!-- 匹配其中一个短语-->
< item >北京</ item >
< item >上海</ item >
</ one-of >
</ rule >
< rule id = " cross " scope = " public " >
< one-of >
< item >到</ item >
< item >至</ item >
< item >飞往</ item >
</ one-of >
</ rule >
< rule id = " Menu " scope = " public " >
< item >
< ruleref uri = " #date " /> <!--指定关联的其他规则的节点-->
< tag >out.date = reles.latest();</ tag >
</ item >
< item repeat = " 0-1 " >从</ item > <!--显示1次或0次-->
< item >
< ruleref uri = " #city " />
< tag >out.city = rulels.latest();</ tag >
</ item >
< item >
< ruleref uri = " #cross " />
< tag >out.cross = rulels.latest();</ tag >
</ item >
< item >
< ruleref uri = " #city " />
< tag >out.city = rulels.latest();</ tag >
</ item >
</ rule >
</ grammar >Catatan: Dalam skrip LUA, "play_and_detect_speech" memanggil layanan ASR, dan "berbicara" memanggil layanan TTS. Saya mengalami masalah selama startup konfigurasi.
Unduh Alat Uji: Adore SIP Client
Cari "Adore SIP Client" di App Store (untuk sistem ponsel lainnya, silakan kunjungi pasar aplikasi yang sesuai) dan unduh.

Di antara mereka, IP SIP adalah IP host dan port yang diaktifkan oleh FreeSwitch Service (default adalah 5060), nama pengguna dapat dipilih sebagai 1000-1019 seperti yang disebutkan di atas, dan kata sandi 1234 secara default. Klik "Login" (pastikan jaringan yang terhubung ke telepon berada di subnet yang sama dengan Freeswitch), dan tekan 5001 untuk verifikasi tes bahasa (jika Anda melompat dari langkah pertama, silakan tekan 5000).
Halaman Beranda Freeswitch: https://freeswitch.com/
Beranda UNIMRCP: http://www.unimrcp.org/
Apache APR: https://apr.apache.org/
IFLYTEK SDK Paket Impor Metode: https://doc.xfyun.cn/msc_linux/sdk%E5%8c%85%E5%AF%BC%E5%85%A5.html