GitHub ist nicht jeden Tag angemeldet. Wenn Sie Fragen haben, wenden Sie sich bitte an [email protected] und antworten Sie in Ihrer Freizeit. Danke schön!
Dies ist mein erstes Github -Projekt. Ich möchte der COTIN -Website "Aufbau eines einfachen intelligenten Kundendienstsystems" (i), (ii) und (ii) für die Hilfe des Bauprozesses danken. Bevor Sie dieses Tutorial lesen, können Sie diese drei Artikel zuerst lesen. Dieses Tutorial passt die Konstruktion basierend darauf an und enthält mehr Betriebsdetails, Fehlerbehandlungen und andere Konstruktionsbeschreibungen.
Verwenden Sie FreeSwitch, um Benutzer von Benutzern zu akzeptieren, verwenden Sie das Plug-In der IFlytek Open Platform (XFYUN), um das Plug-In Iflytek Open Platform (XFYUN) zu integrieren, um die Spracherkennung (ASR) durchzuführen, und rufen Sie die Voice Synthesis (TTS) an, die auf benutzerdefinierten Geschäftslogik basiert, um ein einfaches End-to-End-Voice Call Center zu erstellen.

FreeSwitch in diesem Beispiel wird in der MACOS High Sierra 10.13.4 -Systemversion kompiliert und installiert. Es wird nicht mit Softwarepaketen installiert. Die spezifischen Installationsschritte finden Sie in der offiziellen Installationseinführung der Website. Andere Plattformen wie Linux (Ubuntu, CentOS) sollten erfolgreich installiert werden.
Im Folgenden finden Sie die Schritte für die Kompilierung und Installation von Quellcode:
1. Laden Sie den FreeSwitch -Quellcode herunter:
cd /usr/local/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch2. Installieren Sie die Abhängigkeitsbibliothek
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 libsndfileHinweis: Bestätigen Sie für andere Systemplattformen den Inhalt der Abhängigkeitsbibliothek selbst. Mögliche Suchergebnisse: Ubuntu/Centos FreeSwitch -Installationsabhängigkeiten. Unter Ubuntu: Libtool nicht gefunden.
3.. Kompilieren und installieren
cd freeswitch/
# 先执行 bootstrap.sh,生成configure文件
./bootstrap.sh
./configure --prefix=/usr/local/freeswitch
make
make install
make cd-sounds-install
make cd-moh-install4. Lauf
cd /usr/local/freeswitch/bin
./freeswitchSie können die Anwendung starten.
Hinweis: Probleme, die während der Installation auftreten können. Fehler in Konfigurieren.
FreeSwitch ist standardmäßig mit 1000-1019 (20) Benutzern mit einem Standardkennwort von 1234 konfiguriert. Sie können zum Überprüfungsschritt von "Schritt 4 Test und Überprüfung" im Voraus wechseln, sich anmelden und 5000 anmelden, und Sie können das Beispiel-Voice-Menühandbuch für den Beispiel für das Standard-IVR hören.
Der UNIMRCP -Server in diesem Beispiel wird in CentOS 7 zusammengestellt und installiert. Dank des UNIMRCP -Server -Quellcodes, der geschrieben wurde, um den von GitHub User Cotinyang bereitgestellten Iflytek -SDK zu integrieren.
1. Download UNIMRCP Server -Plugin -Demo -Quellcode:
cd /opt
git clone https://github.com/cotinyang/MRCP-Plugin-Demo.git MRCP-Plugin-Demo2. Umgebungsumgebung für Kompilierungsvorbereitungen
cd MRCP-Plugin-Demo/unimrcp-deps-1.5.0
# # 编译可能出现错误, 注释掉:107 ~ 109, getopt的set,其中存在不识别的option
# # 编译生成apr, apr-util, target path: ./libs
./build-dep-libs.shHinweis: 1. Sie müssen Y während des Prozesses zweimal eingeben und bestätigen. 2. Außerdem haben wir ein Projekt aufgenommen, das wir für dieses Demo-Projekt unterhalten, wobei die Adresse https://github.com/wangkaisine/mrcp-plugin-demo ist, können Sie auch den Quellcode dieser Adresse verwenden.
3.. Kompilieren und installieren Sie 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 installSie können das installierte UNIMRCP in/usr/local/sehen.
4. Testlauf
cd /usr/local/unimrcp/bin
./unimrcpserver -o 3Sie können den Client verwenden, um dies zu überprüfen
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, exitGeben Sie die Hilfe ein, um einzugeben, die Verwendungsmethode zu geben, das Run -Recog einzugeben, um den Spracherkennungstest auszuführen, und leiten Sie den Synthesizer aus, um Sprachsynthesis -Test durchzuführen.
1. Iflytek -Entwicklungsplattform SDK Download
Da das von der Iflytek Open Platform heruntergeladene SDK-Paket mit Benutzern und Anwendungen zugeordnet ist, die von Benutzern erstellt wurden, müssen alle Dateien und Ordner in Drittanbietern/Xfyun gelöscht und Ihre eigene SDK neu heruntergeladen und entpackt. Der Verzeichnis und der Quellcode sind im Grunde gleich.
Sie müssen sich registrieren und sich bei der IFlytek Open -Plattform anmelden, die Konsolenseite eingeben und eine Anwendung erstellen.
Holen Sie sich Ihre Appid in der Schnittstelle von My Apps und "einen neuen Dienst für die App hinzufügen".
Klicken Sie rechts auf "SDK Download" und bestätigen Sie auf der Sprungseite, dass "App" die von Ihnen erstellte Anwendung ausgewählt hat "," Wählen Sie die KI -Funktionen aus, die Sie benötigen ". Wählen Sie die beiden oben genannten Dienste aus und klicken Sie auf" SDK Download ", um darauf zu warten, dass der SDK generiert und abgeschlossen wird.
Unzippieren und ersetzen Sie alle Dateien und Ordner unter MRCP-Plugin-Demo/UNIMRCP-1.5.0/Plugins/Drittanbieter/xfyun/.
HINWEIS: Wählen Sie "Linux", um die Anwendungsplattform auf der Anwendungsseite zu erstellen.
2. Schreiben und Übersetzung
In diesem Schritt werden Sie angegeben, wie Sie den Plug-in-Code für UNIMRCP schreiben, dh, wie Sie die Dateien und zugehörigen Konfigurationen der Ordner xfyun_recog und xfyun_xynth in den MRCP-Plugin-Demo/UNIMRCP-1.5.0/Plugins-Ordnern erhalten. Wenn Sie momentan nicht auf dieses Detail achten, können Sie diesen Schritt auf Schritt 4 überspringen.
Tatsächlich ist der obige MRCP-Plugin-Demo-Code der Plugin-Code, der UNIMRCP 1.5.0 und UNIMRCP-DEPS 1.5.0 auf der offiziellen Website von UNIMRCP herunterlädt und auf dieser Grundlage hinzugefügt wird.
Bearbeiten Sie zuerst die Datei configure.ac und die im folgende Makefile verwendete Makrodefinition. Das XFYUN -Erkenntnis -Plugin wird wie folgt hinzugefügt:
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_pluginHinweis: Unter ihnen sind ··· weitere Standardkonfigurationen in dieser Datei. Weitere Informationen finden Sie in den entsprechenden Standort.
Entsprechend lautet die Zugabe von Xfyun -Synthesizer -Plugin wie folgt:
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_pluginQuellcode und Verzeichnis hinzugefügt
Erstellen Sie im Plugins-Verzeichnis ein neues XFyun-Recog-Verzeichnis und erstellen Sie ein neues SRC-Verzeichnis unter diesem Verzeichnis. Sie können Demo_Recog_Engine.c in dieses Verzeichnis kopieren und in Xfyun_Recog_Engine.c ändern und die Datei xfyun_recog_engine ändern (ein geänderter Teil bekannt: Ändern Sie den Anpid -Fehlern. xfyun-synth-Verzeichnis.
Erstellen Sie eine neue Datei makefile.am-Datei im XFYUN-Recog-Ordner mit dem folgenden Inhalt:
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/includeErstellen Sie entsprechend einen neuen Ordner makeFile.am unter dem Ordner fyun-synth mit dem folgenden Inhalt:
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/includeÄndern Sie die Datei makefile.am im Plugins-Ordner und fügen Sie den Inhalt von Xfyun-Recog wie folgt hinzu:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-recog
endifEntsprechend lautet der in Xfyun-Synth hinzugefügte Inhalt wie folgt:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-synth
endifÄndern Sie die Datei conf/unimrcpServer.xml und ändern Sie standardmäßig die Demo -Engine in die Aktivierung unserer beiden Motoren.
Xfyun-Recog wird wie folgt modifiziert:
< engine id = " Demo-Recog-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Recog-1 " name = " xfyunrecog " enable = " true " />Entsprechend wird Xfyun-Synth wie folgt modifiziert:
< engine id = " Demo-Synth-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Synth-1 " name = " xfyunsynth " enable = " true " />Wenn Sie bereit sind, den UNIMRCP -Server und FreeSwitch zu verbinden, sollten Sie die IP -Adresse des Servers in conf/uniMRCpServer.xml konfigurieren, dh die Subnetzzugriffsadresse der aktuellen UNIMRCP -Installation.
Immrcp neu kompilieren und installieren (Schritt 2 3).
Wenn Sie das folgende Problem starten:
- DSO: /usr/local/unimrcp/lib/libmsc.so: Undefined Symbol: _ZTVN10__CXXABIV117__CLASS_TYPE_INFOE nicht laden.
Fix: -lstdc ++
- ./unimrcpServer: Fehler beim Laden freigegebener Bibliotheken: libofia-ssip-ua.so.0: Die freigegebene Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis
Fix:
在etc/ld.so.conf 内容增加: /usr/local/lib
ldconfig 将ld.so.conf读入cacheFreeSwitch konfigurieren
Wir müssen sowohl den FreeSwitch, der Benutzer Sprachanrufe bearbeitet, als auch den UNIMRCP -Server anschließen, der Anforderungen an Xfyun Engine sendet.
1. Konfigurieren Sie das UNIMRCP -Modul und laden Sie es automatisch.
# 编辑/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. Setzen Sie die Profildatei und die Conf -Datei;
Erstellen Sie eine neue UnIMRCPServer-MRCP-V2.xml-Konfigurationsdatei im Verzeichnis/usr/local/freeSwitch/conf/mrcp_profiles:
< 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 >Konfigurieren Sie die /usr/local/freeschitch/conf/autoload_configs/unimrcp.conf.xml Datei:
< 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 >Hinweis: 1. Das Server-IP in UniMRCpServer-MRCP-V2.xml ist die von UniMRCpServer gestartete Host-IP. 2. Die Client-IP und RTP-IP sind die von FreeSwitch gestarteten Hosts, und der Client-Port FreeSwitch-Port, der vom Mobiltelefon zugegriffen wird, da der Client standardmäßig 5060 ist, was sich von den beiden unterscheidet. 3. Der Profilname in UniMRCpServer-MRCP-V2.xml sollte mit dem Standard-TTS-Profil in uniMRCP.conf.xml und dem Standard-Ar-Ar-Profil entsprechen (einige Dokumente sagen, dass der XML-Dateiname in MRCP_Profile auch mit diesen beiden übereinstimmend sein muss, was eigentlich nicht ist).
DUTNION: Es ist wichtig, UniMRCpServer und FreeSwitch im selben Netzwerksegment bereitzustellen. Es ist am besten, den Test auf derselben physischen Maschine beim Bereitstellen durchzuführen.
3. Konfigurieren Sie IVR und Skripte.
Fügen Sie die folgende Konfiguration in /usr/local/freeschitch/conf/dialplan/default.xml hinzu:
< extension name = " unimrcp " >
< condition field = " destination_number " expression = " ^5001$ " >
< action application = " answer " />
< action application = " lua " data = " names.lua " />
</ condition >
</ extension >Fügen Sie das Skript names.lua im Verzeichnis/usr/lokal/freeSwitch/scripts hinzu:
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 ()Wir müssen eine Hello.gram -Syntaxdatei zum Verzeichnis/usr/local/freeSwitch/Grammatik hinzufügen. Es kann leer sein. Es muss die Spracherkennungssyntaxspezifikation 1.0 -Standard (kurz als SRGS1.0 bezeichnet) erfüllen. Diese Syntaxdatei -ASR -Engine kann beim Erkennen verwendet werden.
<? 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 >HINWEIS: Im Lua -Skript ruft "Play_and_detect_speech" den ASR -Dienst auf und "Speak" den TTS -Dienst. Ich habe während des Konfigurationsstarts auf Probleme gestoßen.
Laden Sie das Testwerkzeug herunter: SIP -Client verehren
Suchen Sie im App Store nach "Adore SIP -Client" (für andere Mobiltelefonsysteme gehen Sie bitte zum entsprechenden Anwendungsmarkt) und laden Sie ihn herunter.

Unter ihnen ist SIP IP der Host-IP und Port, der vom FreeSwitch-Dienst aktiviert ist (Standard ist 5060), der Benutzername kann wie oben erwähnt als 1000-1019 ausgewählt werden, und das Passwort ist standardmäßig 1234. Klicken Sie auf "Login" (Bitte stellen Sie sicher, dass sich das mit dem Telefon angeschlossene Netzwerk im selben Subnetz wie FreeSwitch befindet), und wählen Sie 5001 für die Überprüfung des Sprachtests (wenn Sie aus dem ersten Schritt gesprungen sind, wählen Sie bitte 5000).
FreeSwitch Homepage: https://freeschitch.com/
UNIMRCP -Homepage: http://www.unimrcp.org/
Apache APR: https://apr.apache.org/
Iflytek SDK -Paket -Importmethode: https://doc.xfyun.cn/msc_linux/sdk%E5%8C%85%E5%AF%BC%E5%85%A5.html