Github n'est pas connecté tous les jours. Si vous avez des questions, veuillez contacter [email protected] et répondre pendant votre temps libre. Merci!
Ceci est mon premier projet GitHub. Je tiens à remercier le site Web de COTIN "créant un simple système de service client intelligent" (i), (ii) et (ii) pour l'aide du processus de construction. Avant de lire ce tutoriel, vous pouvez d'abord lire ces trois articles. Ce tutoriel ajuste l'ordre de construction en fonction de cela et donne plus de détails sur l'opération, de gestion des erreurs et d'autres descriptions de construction.
Utilisez Freeswitch pour accepter les appels téléphoniques mobiles utilisateur, utilisez le plug-in de plate-forme IFLyTek Open (XFYUN) pour intégrer le plug-in de plate-forme IFLyTek Open (XFYUN) pour effectuer la reconnaissance vocale (ASR) et les appels de synthèse vocale (TTS) basés sur une logique métier personnalisée pour créer un simple centre d'appels vocal de bout en bout.

Freeswitch dans cet exemple est compilé et installé dans la version système MacOS High Sierra 10.13.4. Il n'est pas installé à l'aide de packages logiciels. Pour les étapes d'installation spécifiques, veuillez consulter l'installation officielle de l'installation du site Web. D'autres plates-formes telles que Linux (Ubuntu, CentOS) doivent être installées avec succès.
Voici les étapes de la compilation et de l'installation du code source:
1. Téléchargez le code source Freeswitch:
cd /usr/local/src
git clone -b v1.6 https://freeswitch.org/stash/scm/fs/freeswitch.git freeswitch2. Installez la bibliothèque de dépendances
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 libsndfileRemarque: Pour les autres plates-formes système, veuillez confirmer le contenu de la bibliothèque de dépendances par vous-même. Résultats de la recherche possibles: dépendances d'installation Ubuntu / Centos Freeswitch. Sous Ubuntu: Libtool introuvable.
3. Compiler et installer
cd freeswitch/
# 先执行 bootstrap.sh,生成configure文件
./bootstrap.sh
./configure --prefix=/usr/local/freeswitch
make
make install
make cd-sounds-install
make cd-moh-install4. Run
cd /usr/local/freeswitch/bin
./freeswitchVous pouvez démarrer l'application.
Remarque: des problèmes qui peuvent survenir lors de l'installation. Erreurs de configuration.
Freeswitch est configuré avec les utilisateurs de 1000-1019 (20) par défaut, avec un mot de passe par défaut de 1234. Vous pouvez passer à l'étape de vérification de "Étape 4 Test and Verification" à l'avance, vous connecter et composer le 5000, et vous pouvez entendre le guide de menu vocal pour le IVR par défaut.
Le serveur UNIMRCP de cet exemple est compilé et installé dans CentOS 7. Grâce au code source du serveur UNIMRCP qui a été écrit pour intégrer le SDK Iflytek fourni par GitHub User Cotinyang.
1. Télécharger le code source de démonstration du plugin de serveur UNIMRCP:
cd /opt
git clone https://github.com/cotinyang/MRCP-Plugin-Demo.git MRCP-Plugin-Demo2. Environnement de préparation de compilation
cd MRCP-Plugin-Demo/unimrcp-deps-1.5.0
# # 编译可能出现错误, 注释掉:107 ~ 109, getopt的set,其中存在不识别的option
# # 编译生成apr, apr-util, target path: ./libs
./build-dep-libs.shRemarque: 1. Vous devez saisir Y deux fois pendant le processus et le confirmer; 2. En outre, nous avons fourni un projet que nous nous maintenons pour ce projet de démonstration, l'adresse étant https://github.com/wangkaisine/mrcp-plugin-demo, vous pouvez également utiliser le code source de cette adresse.
3. Compiler et installer 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 installVous pouvez voir l'UNIMRCP installé dans / usr / local /.
4. Test Running
cd /usr/local/unimrcp/bin
./unimrcpserver -o 3Vous pouvez utiliser le client pour vérifier
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, exitEntrez l'aide pour entrer, donnez la méthode d'utilisation, entrez Run Recog pour exécuter le test de reconnaissance vocale et exécutez le synthé pour effectuer le test de synthèse de la parole.
1. Plateforme de développement Iflytek Téléchargement du SDK
Étant donné que le package SDK téléchargé à partir de la plate-forme IFLYTEK Open est associé aux utilisateurs et applications créés par les utilisateurs, il est nécessaire de supprimer tous les fichiers et dossiers dans un tiers / xfyun, et de redémarrer et de décompresser votre propre SDK. Le répertoire et le code source sont fondamentalement les mêmes.
Vous devez vous inscrire et vous connecter à la plate-forme IFLYTEK Open, entrez la page de console et créer une application;
Obtenez votre appid dans l'interface Mes applications et «Ajoutez un nouveau service» pour l'application, sélectionnez les services requis «Dictation vocale» et «synthèse vocale en ligne» (requis dans cet exemple);
Cliquez sur "Télécharger SDK" à droite et confirmez dans la page Jump que "Sélectionner l'application" a sélectionné l'application que vous avez créée, "Sélectionnez les capacités de l'IA dont vous avez besoin" Sélectionnez les deux services ci-dessus, et cliquez sur "Télécharger SDK" pour attendre que le SDK soit généré et terminé le téléchargement.
Unzip et remplacez tous les fichiers et dossiers sous MRCP-Plugin-Demo / unimrcp-1.5.0 / plugins / tiers / xfyun /.
Remarque: sélectionnez "Linux" pour créer la plate-forme d'application dans la page d'application.
2. Écriture et traduction de Plugin
Cette étape vous indiquera comment rédiger le code de plug-in pour UNIMRCP, c'est-à-dire comment obtenir les fichiers et les configurations connexes des dossiers xfyun_recog et xfyun_xynth dans les dossiers MRCP-Plugin-Demo / UNIMRCP-1.5.0 / plugins. Si vous ne faites pas attention à ce détail pour le moment, vous pouvez ignorer cette étape à l'étape 4.
En fait, le code MRCP-Plugin-Demo ci-dessus est le code de plugin qui télécharge unimrcp 1.5.0 et UNIMRCP Deps 1.5.0 sur le site officiel de UNIMRCP et ajoute sur cette base.
Modifiez d'abord le fichier configure.ac et la définition macro utilisée dans le makefile dans ce qui suit. Le plugin de reconnaissance XFYUN est ajouté comme suit:
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_pluginRemarque: Parmi eux, ··· sont d'autres configurations par défaut dans ce fichier. Veuillez trouver l'emplacement correspondant à remplir.
En conséquence, l'ajout du plugin de synthétiseur XFYUN est le suivant:
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_pluginAjout du code source et du répertoire
Dans le répertoire des plugins, créez un nouveau répertoire XFyun-Recog et créez un nouveau répertoire SRC sous ce répertoire. Vous pouvez copier Demo_recog_Engine.c dans ce répertoire et le modifier en xfyun_recog_engine.c, et modifier le fichier xfyun_recog_engine.c (une partie modifiée connue: modifiez l'apprid à l'approïde que vous téléchargez le SDK vous-même, sinon une erreur sera signalée: la création de la Qisraudrite a échoué! Répertoire xfyun-synth.
Créez un nouveau fichier makefile.am dans le dossier xfyun-reccog, avec le contenu suivant:
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/includeEn conséquence, créez un nouveau dossier MakeFile.am dans le dossier FYUN-SYNTH, avec le contenu suivant:
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/includeModifiez le fichier makefile.am dans le dossier des plugins et ajoutez le contenu de xfyun-recog comme suit:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-recog
endifEn conséquence, le contenu ajouté à xfyun-synth est le suivant:
if XFYUNRECOG_PLUGIN
SUBDIRS += xfyun-synth
endifModifiez le fichier conf / unimrcpSserver.xml et passez à partir de l'activation du moteur de démonstration par défaut pour activer nos deux moteurs.
XFYUN-Reccog est modifié comme suit:
< engine id = " Demo-Recog-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Recog-1 " name = " xfyunrecog " enable = " true " />De même, XFyun-Synth est modifié comme suit:
< engine id = " Demo-Synth-1 " name = " demorecog " enable = " false " />
< engine id = " XFyun-Synth-1 " name = " xfyunsynth " enable = " true " />Dans le même temps, si vous êtes prêt à connecter un serveur UNIMRCP et Freeswitch, vous devez configurer l'adresse IP du serveur dans conf / unimrcpServer.xml, c'est-à-dire l'adresse d'accès du sous-réseau de l'installation actuelle unimrcp.
Recompiler et installer UNIMRCP (Étape 2 3).
Lorsque vous commencez le problème suivant:
- Échec du chargement dso: /usr/local/unimrcp/lib/libmsc.so: symbole indéfini: _ztvn10__cxxabiv117__class_type_infoe
Correction: -lstdc ++
- ./UnimrCPServer: Erreur lors du chargement des bibliothèques partagées: libsofia-sip-ua.so.0: Impossible d'ouvrir le fichier d'objet partagé: aucun fichier ou répertoire de ce type
réparer:
在etc/ld.so.conf 内容增加: /usr/local/lib
ldconfig 将ld.so.conf读入cacheConfigurer Freeswitch
Nous devons connecter à la fois le Freeswitch qui gère les appels vocaux utilisateur et le serveur UNIMRCP qui envoie des demandes au moteur XFYUN.
1. Configurez le module unimrcp et chargez-le automatiquement;
# 编辑/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. Définissez le fichier de profil et le fichier Conf;
Créez un nouveau fichier de configuration unimrcpsserver-mrcp-v2.xml dans le répertoire / 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 >Configurez le fichier /autoload_configs/unimrcp.conf.xml:
< 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 >Remarque: 1. Le serveur-IP dans UniMrcPSserver-Mrcp-V2.xml est l'IP hôte démarré par UniMrCPSserver; 2. Le client-IP et RTP-IP sont les hôtes lancés par Freeswitch, et le port Freeswitch Client-Port accessible par le téléphone mobile car le client est 5060 par défaut, ce qui est différent des deux; 3. Le nom de profil dans unimrcpServer-MRCP-V2.xml doit être le même que le par défaut-TTS-Profile dans unimrcp.conf.xml et le par défaut-AR-Profile (certains documents disent que le nom de fichier XML dans MRCP_Profiles doit également être cohérent avec ces deux, qui n'est en fait pas essentiel).
Atténion: il est important de déployer unimrcpServer et Freeswitch sur le même segment de réseau. Il est préférable d'effectuer le test sur la même machine physique lors du déploiement.
3. Configurez IVR et les scripts.
Ajoutez la configuration suivante dans /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 >Ajoutez le script names.lua dans le répertoire / usr / local / 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 ()Nous devons ajouter un fichier de syntaxe hello.gram au répertoire / usr / local / freeswitch / grammar. Il peut être vide. Il doit respecter la norme Spécification de syntaxe de reconnaissance vocale 1.0 (appelé SRGS1.0 pour faire court). Ce moteur ASR de fichier de syntaxe peut être utilisé lors de la reconnaissance.
<? 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 >Remarque: Dans le script LUA, "play_and_detect_speech" appelle le service ASR, et "Speak" appelle le service TTS. J'ai rencontré des problèmes lors du démarrage de la configuration.
Télécharger l'outil de test: Adore SIP Client
Recherchez "Adore SIP Client" dans l'App Store (pour d'autres systèmes de téléphonie mobile, veuillez vous rendre sur le marché des applications correspondant) et le télécharger.

Parmi eux, SIP IP est l'hôte IP et le port activés par Freeswitch Service (par défaut est 5060), le nom d'utilisateur peut être sélectionné comme 1000-1019 comme mentionné ci-dessus, et le mot de passe est 1234 par défaut. Cliquez sur "Connexion" (veuillez vous assurer que le réseau connecté au téléphone est dans le même sous-réseau que Freeswitch) et composez le 5001 pour la vérification du test de la langue (si vous avez sauté de la première étape, veuillez composer le 5000).
Page d'accueil de Freeswitch: https://freeswitch.com/
Page d'accueil unimrcp: http://www.unimrcp.org/
Apache Apr: https://apr.apache.org/
IFLYTEK SDK Package Import Méthode: https://doc.xfyun.cn/msc_linux/sdk%E5%8C%85%E5%AF%BC%E5%85%A5.html