Servidor CPQD MRCP com o Asterisk¶
Para integrar o Servidor CPQD MRCP com o Asterisk utilizamos o protocolo MRCP. O cliente Asterisk-UniMRCP implementa esse protocolo. Siga os passo abaixo para instalação e configuração:
Instalação¶
Para que o Asterisk funcione corretamente com o Servidor MRCP do CPQD, é preciso instalar os seguintes softwares no ambiente que servirá como Cliente MRCP. São estes:
- Asterisk
- UniMRCP 1.7 e UniMRCP Deps 1.6: <https://www.unimrcp.org/index.php/solutions/client>
- Asterisk-UniMRCP (documentation): https://www.unimrcp.org/asterisk
- Asterisk-UniMRCP (code): https://github.com/CPQD/asterisk-unimrcp
Pacotes de instalação¶
Os seguintes pacotes estão disponíveis para a instalação dos plugins Asterisk/UniMRCP (reconhecimento e verificação) :
Centos 7.8¶
- Asterisk 16.8:
- asterisk-16.8-0.x86_64.rpm
- Asterisk-UniMRCP:
- asterisk-unimrcp-centos7_8_asterisk16.8.0_unimrcp1.7-vX.Y.Z.run
- asterisk-unimrcp-centos7.8-asterisk13.18.1_unimrcp1.7-vX.Y.Z.run
Requisitos de instalação
Instalar os pacotes com o comando abaixo:
yum install -y \ libedit \ gsm \ unixODBC \ libogg \ speex \ libsrtp \ unbound \ uriparser \ libvorbis \ libxslt
Instalação
Instalar o Asterisk e o plugin UniMRCP com os comandos:
rpm -ivh asterisk-16.8-0.x86_64.rpm ./asterisk-unimrcp-centos7_8_asterisk16.8.0_unimrcp1.7-vX.Y.Z.run
Ubuntu 18.04¶
- Asterisk 18.7.1
- core: asterisk_18.7.1-0cpqd1+ubu18.04_amd64.deb
- modules: asterisk-modules_18.7.1-0cpqd1+ubu18.04_amd64.deb
- config files): asterisk-config_18.7.1-0cpqd1+ubu18.04_all.deb
- sounds: asterisk-extra-sounds_18.7.1-0cpqd1+ubu18.04_all.deb
- Asterisk-UniMRCP:
- asterisk-unimrcp-ubuntu18.04_asterisk18.7.1_unimrcp1.7-vX.Y.Z.run
- asterisk-unimrcp-ubuntu18.04_asterisk13.18.3_unimrcp1.7-X.Y.Z.run
Requisitos de instalação
Instalar os pacotes com o comando abaixo:
apt-get install -y \ libgsm1 \ libasound2 \ libgmime-3.0-0\ libical3 \ libiksemel3 \ libjack-jackd2-0 \ liblua5.1-0 \ libneon27-gnutls \ libodbc1 libogg0 \ libportaudio2 \ libpq5 \ libradcli4 \ libresample1 \ libsnmp30 \ libspandsp2 \ libspeex1 \ libspeexdsp1 \ libsrtp2-1 \ libsybdb5 \ libunbound2 \ libvorbis0a \ libvorbisenc2 \ libvorbisfile3 \ libcap2 \ liburiparser1 \ libxslt1.1 \ asterisk-core-sounds-en
Instalação Asterisk 18.7.1 em Ubuntu 18.04
Instalar os pacotes debian e plugin MRCP com os comandos:
dpkg -i asterisk_18.7.1-0cpqd1+ubu18.04_amd64.deb dpkg -i asterisk-modules_18.7.1-0cpqd1+ubu18.04_amd64.deb dpkg -i asterisk-config_18.7.1-0cpqd1+ubu18.04_all.deb dpkg -i asterisk-extra-sounds_18.7.1-0cpqd1+ubu18.04_all.deb ./asterisk-unimrcp-ubuntu18.04_asterisk18.7.1_unimrcp1.7-vX.Y.Z.run
Instalação Asterisk 13 em Ubuntu 18.04
Esta versão do Asterisk é nativa no Ubuntu 18.04 e pode ser instalada pelo sistema de pacotes. Instalar os pacotes debian e plugin MRCP com os comandos:
sudo apt install asterisk ./asterisk-unimrcp-ubuntu18.04_asterisk13.18.3_unimrcp1.7-vX.Y.Z.runNota
- As versões de Asterisk que foram homologadas para o Ubuntu 18.04 e o plugin UniMRCP são: 13.18.3 e 18.7.1
- As versões de Asterisk que foram homologadas para o Centos 7.8 e o plugin UniMRCP são: 13.18.1 e 16.8.0
- Para informações sobre plugin de sntese contacte o suporte.
Instalação a partir do código fonte¶
Para instalação do plugin em outras versões do Asterisk, além das listadas acima, será necessário instalar a partir do código fonte. Para isso clonar o repositório:
git clone https://github.com/CPqD/asterisk-unimrcp
Seguir procedimento disponível em asterisk-unimrcp/docker
Validação da instalação¶
Para testar se o cliente UniMRCP está instalado corretamente, reinicie o asterisk e na interface de comando (CLI) digite:
*CLI> module show like res_speech_unimrcp.so Module Description Use Count res_speech_unimrcp.so UniMRCP Speech Engine 0 1 modules loaded *CLI> module show like app_unimrcp.so Module Description Use Count app_unimrcp.so MRCP suite of applications 0 1 modules loadedNota
É preciso exportar a variável LD_LIBRARY_PATH indicando os caminhos para as bibliotecas Unimrcp e dependências, antes de reiniciar o Asterik, para permitir a carga do módulo de aplicações MRCP.
export LD_LIBRARY_PATH=/usr/local/unimrcp/lib:/usr/local/apr/lib:/usr/local/lib
Configuração do Asterisk¶
O Asterisk-UniMRCP possui dois módulos para comunicação com o MRCP Server:
- res_speech_unimrcp: Integração através da Generic Speech Recognition API do Asterisk.
- app_unimrcp: Uma aplicação para ser usada no dialplan do Asterisk.
Nota
Não é necessário a configuração e instalação dos dois modulos para comunicação com MRCP Server.
Segue o procedimento de configuração de cada modulo:
res_speech_unimrcp.so¶
Adicione as seguintes informações no arquivo: /etc/asterisk/res-speech-unimrcp.conf
unimrcp-profile = cpqd-mrcp-v2 ; CPQD MRCPv2 Server unimrcp-profile = cpqd-mrcp-v1 ; CPQD MRCPv1 Server
Crie o arquivo /usr/local/unimrcp/conf/client-profiles/cpqd.xml com o seguinte conteúdo:
<?xml version="1.0" encoding="UTF-8"?> <!-- UniMRCP client document --> <unimrcpclient xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <settings> <!-- SIP MRCPv2 settings --> <sip-settings id="UniMRCP-SIP-Settings"> <server-ip>_SEVER_IP_</server-ip> <server-port>8060</server-port> </sip-settings> <!-- RTSP MRCPv1 settings --> <rtsp-settings id="UniMRCP-RTSP-Settings"> <server-ip>_SEVER_IP_</server-ip> <server-port>1554</server-port> <resource-location>media</resource-location> <resource-map> <param name="speechrecog" value="speechrecognizer"/> <param name="speechsynth" value="speechsynthesizer"/> <param name="speakverify" value="speechsverifier"/> </resource-map> </rtsp-settings> </settings> <profiles> <!-- CPQD MRCPv2 profile --> <mrcpv2-profile id="cpqd-mrcp-v2"> <sip-uac>SIP-Agent-1</sip-uac> <mrcpv2-uac>MRCPv2-Agent-1</mrcpv2-uac> <media-engine>Media-Engine-1</media-engine> <rtp-factory>RTP-Factory-1</rtp-factory> <sip-settings>UniMRCP-SIP-Settings</sip-settings> <rtp-settings>RTP-Settings-1</rtp-settings> </mrcpv2-profile> <!-- CPQD MRCPv1 profile --> <mrcpv1-profile id="cpqd-mrcp-v1"> <rtsp-uac>RTSP-Agent-1</rtsp-uac> <media-engine>Media-Engine-1</media-engine> <rtp-factory>RTP-Factory-1</rtp-factory> <rtsp-settings>UniMRCP-RTSP-Settings</rtsp-settings> <rtp-settings>RTP-Settings-1</rtp-settings> </mrcpv1-profile> </profiles> </unimrcpclient>
app_unimrcp.so¶
Edite o arquivo /etc/asterisk/mrcp.conf conforme o exemplo abaixo:
[general] ; Default ASR and TTS profiles. default-asr-profile = speech-cpqd-mrcp-v2 default-tts-profile = speech-cpqd-mrcp-v2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Profile for CPQD Speech Server MRCPv2 ; [speech-cpqd-mrcp-v2] ; MRCP settings version = 2 ; ; SIP settings server-ip = <CPQD MRCP Server IP> server-port = 8060 ; ; SIP user agent client-ip = <MRCP Client IP> client-port = 8093 ; SIP transport either UDP or TCP. sip-transport = udp ; ; RTP factory rtp-ip = <MRCP Client IP> rtp-port-min = 4000 rtp-port-max = 5000 ; ; Jitter buffer settings playout-delay = 50 max-playout-delay = 200 ; ; RTP settings ptime = 20 codecs = PCMU PCMA L16/96/8000 telephone-event/101/8000 ; ; RTCP settings rtcp = 0 ;rtcp = 1 ;rtcp-bye = 2 ;rtcp-tx-interval = 5000 ;rtcp-rx-resolution = 1000 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Profile for CPQD Speech Server MRCPv1 ; [speech-cpqd-mrcp-v1] ; MRCP settings version = 1 ; ; RTSP settings server-ip = <CPQD MRCP Server IP> server-port = 1554 resource-location = media speechsynth = speechsynthesizer speechrecog = speechrecognizer ; ; RTP factory rtp-ip = <MRCP Client IP> rtp-port-min = 4000 rtp-port-max = 5000 ; ; Jitter buffer settings playout-delay = 50 max-playout-delay = 200 ; ; RTP settings ptime = 20 codecs = PCMU PCMA L16/96/8000 telephone-event/101/8000 ; ; RTCP settings rtcp = 0 ;rtcp = 1 ;rtcp-bye = 2 ;rtcp-tx-interval = 5000 ;rtcp-rx-resolution = 1000
Aplicação Dialplan¶
MRCPSynthAndRecog¶
Essa aplicação sintetiza uma frase e aguarda por um reconhecimento de fala. Estabelece duas sessões com o servidor MRCP. Uma para reconhecimento de fala e outra sessão para Sintese de fala.
Sintaxe:
MRCPSynthAndRecog (prompt, gramática, paramêtros)
prompt: Texto ou SSML a ser sintetizado.
gramática: Gramatica inline, builtin ou uma URI para gramática externa.
- parâmetros suportados:
- p: especificação do perfil
- presente no arquivo mrcp.conf, indica qual perfil (profile) será usado para execução da aplicação.
- t: recognition timeout
- Tempo máximo de espera pelo resultado do reconhecimento em milisegundos.
- b: bargein
- Se habilitado (=1) interrompe a síntese quando detecta inicio de fala.
- gd: grammar delimiters
- Delimitador de gramática. Valor padrão é “,”.
- ct: confidence threshold
- Valor mínimo da pontuação (score) de confiança do reconhecimento, para que ele seja considerado válido. Valores entre 0.0 e 1.0.
- nb: n-best list length
- Número de resultados que serão retornados.
- nit: no input timeout
- Tempo máximo de espera pelo início da fala em milisegundos.
- sct: speech complete timeout
- Duração do silêncio dentro do áudio para a detecção do fim da fala (em milisegundos).
- dit: DTMF interdigit timeout
- Tempo para aguardar o próximo dígito DTMF.
- dtt:DTMF terminate timout (msec)
- Não implementado.
- dttc: DTMF terminate character
- Caractere esperado para finalizar a detecção do DTMF.
- pv: prosody volume
- Altera o volume da fala para o texto em questão.
- pr: prosody rate
- Altera a velocidade da fala para o texto em questão.
- vn: voice name
- Seleciona a voz a qual o texto será sintetizada.
- uer: URI-encoded results
- Resultados serão codificados. Use o valor 1 para codificar os resultados, e 0 para desabilitar.
- od: Output delimiters
- Delimitador do resultado, Valor padão “^”.
- sit: Start input timers value
- Controla o comportamento do “start-input-timers”. Use 0 para desabilitar, 1 para iniciar no RECOGNIZE, 2 para iniciar no fim do prompt.
- parâmetros não implementados:
- sint: speech incomplete timeout
- sl: sensitivity level
- sva: speed versus accuracy
- sw: save waveform (true/false)
- nac: new audio channel
- spl: speech language
- rm: recognition mode
- hmaxd: hotword max duration
- hmind: hotword min duration
- cdb: clear DTMF buffer
- enm: early no match
- iwu: input waveform URI
- mt: media type
- vg: voice gender
- vv: voice variant
- a: voice age
retorno/resultados:
- ${RECOG_STATUS}
- OK: Se reconhecimento finalizou.
- ERROR: Se o reconhecimento não pode ser iniciado.
- INTERRUPTED: Se a ligação caiu enquanto o reconhecimento estava em andamento.
- ${RECOG_COMPLETION_CAUSE}
- «000»: success
- «001»: nomatch
- «002»: noinput
- ${RECOG_RESULT}
- resultado do reconhecimento em formato NLSML. Apenas se o resultado do reconhecimento foi concluído com sucesso.
- ${RECOG_CONFIDENCE}
- valor do indice de confiaça para o reconhecimento.
- ${RECOG_GRAMMAR}
- gramatica que foi ativada no reconhecimento.
- ${RECOG_INPUT}
- retorna o texto reconhecido.
- ${RECOG_INSTANCE}
- retorna a instância interpretada.
MRCPRecogVerif¶
Essa aplicação estabelece uma sessão para reconhecimento de fala, armazenando o áudio no buffer, e realiza a verificação de biometria de voz como método verify-from-bufffer do áudio armazenado.
MRCPRecogVerif (prompt, gramática, paramêtros)
- grammar:
- gramática para ser usada para reconhecimento.
- p: especificação do perfil
- presente no arquivo mrcp.conf, indica qual perfil (profile) será usado para execução da aplicação.
- f: nome do arquivo
- arquivo de áudio para ser utilizado como prompt.
- t: recognition timeout
- Tempo máximo de espera pelo resultado do reconhecimento em milisegundos.
- b: bargein
- Se habilitado (=1) interrompe a síntese quando detecta inicio de fala.
- gd: grammar delimiters
- Delimitador de gramática. Valor padrão é “,”.
- ct: confidence threshold
- Valor mínimo da pontuação (score) de confiança do reconhecimento, para que ele seja considerado válido. Valores entre 0.0 e 1.0.
- nb: n-best list length
- Número de resultados que serão retornados.
- vc: verificarion score:
- score de verificação: -1.0 até 1.0
- minph: minimum verification phrases:
- número mínimo de frases de verificação.
- maxph: maximum verification phrases:
- número máximo de frases de verificação.
- nit: no input timeout:
- tempo de espera sem áudio de entrada em milisegundos.
- sct: speech complete timeout
- Duração do silêncio dentro do áudio para a detecção do fim da fala (em milisegundos).
- dit: DTMF interdigit timeout
- Tempo para aguardar o próximo dígito DTMF.
- dtt:DTMF terminate timout (msec)
- Não implementado.
- dttc: DTMF terminate character
- Caractere esperado para finalizar a detecção do DTMF.
- vm: verification mode
- Modo de verificação: verify/enroll.
- rpuri: repository URI
- URL para o repositório de voiceprints
- vpid: voiceprint identifier
- Identificador de voz
- uer: URI-encoded results
- Resultados de reconhecimento serão codificados. Use o valor 1 para codificar os resultados, e 0 para desabilitar.
- od: Output delimiters
- Delimitador do resultado, Valor padão “^”.
- sit: Start input timers value
- Controla o comportamento do “start-input-timers”. Use 0 para desabilitar, 1 para iniciar no RECOGNIZE, 2 para iniciar no fim do prompt.
- parâmetros não implementados:
- sint: speech incomplete timeout
- sl: sensitivity level
- sva: speed versus accuracy
- sw: save waveform (true/false)
- nac: new audio channel
- spl: speech language
- rm: recognition mode
- hmaxd: hotword max duration
- hmind: hotword min duration
- cdb: clear DTMF buffer
- enm: early no match
- iwu: input waveform URI
- mt: media type
- vg: voice gender
- vv: voice variant
- a: voice age
- retorno/resultados:
O retorno de resultado de reconhecimento é similar aos outros métodos de reconhecimento, possuindo as seguintes variáves de retorno:
- ${RECOG_STATUS}
- ${RECOG_COMPLETION_CAUSE}
- ${RECOG_RESULT}
- ${RECOG_CONFIDENCE}
- ${RECOG_GRAMMAR}
- ${RECOG_INPUT}
- ${RECOG_INSTANCE}
Os resultados da verificação de voz estão disponíveis nas variáveis a seguir:
- ${VERIF_COMPLETION_CAUSE}:
- «000»: success
- «001»: error
- «002»: no-input
- «003»: too-much-speech-timeout
- «004»: speech-too-early
- «005»: buffer-empty
- «007»: repository-uri-failure
- «008»: repository-uri-missing
- «009»: voiceprint-id-missing
- «010»: voiceprint-id-not-exist
- «011»: speech-not-usable
- ${VERIF_RESULT}:
- Resultado de verificação formatado em XML.
- ${VERIF_SID}:
- Identificador da sessão de verificação.
Nota
Existem aplicações exclusivas de síntese (MRCPSynth), reconhecimento (MRCPRecog) e verificação (MRCPVerif), que utilizam parâmetros equivalentes para cada tipo de aplicação, assim como as variáveis de retorno. A documentação completa está em: https://github.com/CPqD/asterisk-unimrcp/blob/master/doc/MAIN.md
DTMF¶
Para usar o reconhecedor DTMF do MRCP, é necessário inserir no campo de gramática (corpo da mensagem RECOGNIZE), a URI
builtin:dtmf/digitsNota
A gramática «dtmf/digits» é nativa do plugin MRCP ASR e não é necessário criá-la no Servidor ASR.
São permitidos dois parâmetros no reconhecedor DTMF:
- dit: DTMF interdigit timeout (msec)
- dttc: DTMF terminate characters
Para especificar a quantidade máxima de dígitos, utiliza-se a sintaxe: ?length=N.
Exemplos de dialplan do Asterisk¶
Nota
Para utilizar os exemplos que seguem, o modulo app_unimrcp.so deve estar instalado e configurado.
Este exemplo demonstra como usar a aplicação SynthAndRecog() com uma síntese de voz em texto plano e uma gramática builtin.
[mrcp-synth-recog-app1] exten => s,1,Answer exten => s,n,SynthAndRecog("Bem vindo ao CPQD!", "builtin:slm/general", t=5000) exten => s,n,Verbose(1, ${RECOG_STATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT}) exten => s,n,Hangup
Este exemplo demonstra como usar a aplicação MRCPRecog() com uma gramática builtin de códigos (CPF, CNPJ, …) para fala.
[mrcp-recog-app1] exten => s,1,Answer exten => s,n,MRCPRecog(builtin:grammar/code, p=default) exten => s,n,Verbose(1, ${RECOGSTATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT}) exten => s,n,Hangup
Este exemplo demonstra como usar a aplicação MRCPSynth com texto plano e MRCP profile padrão.
[mrcp-synth-app1] exten => s,1,Answer exten => s,n,MRCPSynth("Bem vindo ao CPQD!", p=default) exten => s,n,Verbose(1, ${SYNTHSTATUS}) exten => s,n,Hangup
Recochecimento de fala ou DTMF limitando em 11 dígitios, e com o Barge-in desabilitado
exten => s,n,SynthAndRecog("Digite ou fale o seu CPF.", "builtin:grammar/code,builtin:dtmf/digits?length=11", t=5000&b=0&sit=1&nit=3000&dit=3500&dttc=#)
Os paramêtros utilizados nesse exemplo são:
- length=11: Aguarda até 11 dígitos DTMF.
- t=5000: Aguarda até 5 segundos pelo reconhecimento de fala.
- b=0: barge-in desabilitado.
- sit=1: Inicia os timers no fim do prompt.
- nit=3000: Aguarda até 3 segundos para detectar inicio de fala.
- dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.
- dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.
Reconhecimento de fala ou DTMF limitando em 11 dígitios, com o Barge-in habilitado
exten => s,n,SynthAndRecog("Digite ou fale o seu CPF.", "builtin:grammar/code,builtin:dtmf/digits?length=11", t=5000&b=1&sit=2&nit=3000&dit=3500&dttc=#)
Os paramêtros utilizados nesse exemplo são:
- length=11: Aguarda até 11 dígitos DTMF.
- t=5000: Aguarda 5 segundos pelo reconhecimento de fala.
- b=1: barge-in habilitado.
- sit=2: Inicia os timers ao enviar o RECOGNIZE.
- nit=3000: Aguarda 3 segundos para detectar inicio de fala.
- dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.
- dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.
Reconhecimento de fala ou DTMF limitando em 2 dígitios, e Barge-in habilitado
exten => s,n,SynthAndRecog("Digite ou fale sua idade.", "builtin:grammar/number,builtin:dtmf/digits?length=2", t=5000&b=1&sit=2&nit=3000&dit=3500&dttc=#)
Os paramêtros utilizados nesse exemplo são:
- length=11: Aguarda até 2 dígitos DTMF.
- t=5000: Aguarda 5 segundos pelo reconhecimento de fala.
- b=1: barge-in habilitado.
- sit=2: Inicia os timers ao enviar o RECOGNIZE.
- nit=3000: Aguarda 3 segundos para detectar inicio de fala.
- dit=3500: Aguarda 3.5 segundos entre dígitos DTMF.
- dttc=#: Utiliza o caractere “#” para indicar fim da entrada de DTMF.
Treinamento de identidade de voz
exten => 2022,1,Answer same => n,MRCPVerif(vm=enroll&rpuri=https://SERVER_HOST:PORT&vpid=marysmith&p=default&f=please-try-again&sct=2000&sit=1) same => n,Verbose(1, Status: ${VERIFSTATUS}) same => n,Verbose(1, Cause: ${VERIF_COMPLETION_CAUSE}) same => n,Verbose(1, Result: ${VERIF_RESULT}) same => n,Verbose(1, SID: ${VERIF_SID}) same => n,Hangup
Os paramêtros utilizados nesse exemplo são:
- vm=enroll: modo de treinamento
- rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria
- vpid=marysmith: voiceprint Id para treinamento
- p=default: profile default
- f=please-try-again: arquivo de áudio usado como prompt
- sct=2000: speech complete timeout em ms
- sit=1: Inicia os timers no fim do prompt.
Verificação de identidade de voz
exten => 2023,1,Answer same => n,MRCPVerif(vm=verify&rpuri=https://SERVER_HOST:PORT&vpid=johnsmith,marysmith&p=default&f=please-try-again&sct=2000&sit=1) same => n,Verbose(1, Status: ${VERIFSTATUS}) same => n,Verbose(1, Cause: ${VERIF_COMPLETION_CAUSE}) same => n,Verbose(1, Result: ${VERIF_RESULT}) same => n,Verbose(1, SID: ${VERIF_SID}) same => n,Hangup
Os paramêtros utilizados nesse exemplo são:
- vm=verify: modo de verificação
- rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria
- vpid=jonhsmith,marysmith: lista de voiceprint Ids para verificação
- p=default: profile default
- f=please-try-again: arquivo de áudio usado como prompt
- sct=2000: speech complete timeout em ms
- sit=1: Inicia os timers no fim do prompt.
Reconhecimento e Verificação de identidade de voz
exten => 203,1,Answer same => n,MRCPRecogVerif(builtin:slm/general, p=default&f=hello-world&vm=verify&rpuri=https://SERVER_HOST:PORT&vpid=johnsmith&p=default&f=hello-world&sct=2000&sit=0) same => n,Verbose(1, Recog Verif Status: ${RECOG_VERIF_STATUS}) same => n,Verbose(1, Recog Cause: ${RECOG_COMPLETION_CAUSE}) same => n,Verbose(1, Recog result: ${RECOG_RESULT}) same => n,Verbose(1, Recog SID: ${RECOG_SID}) same => n,Verbose(1, Verif Cause: ${VERIF_COMPLETION_CAUSE}) same => n,Verbose(1, Verif result: ${VERIF_RESULT}) same => n,Verbose(1, Verif SID: ${VERIF_SID}) same => n,Hangup
Os paramêtros utilizados nesse exemplo são:
- builtin:slm/general: gramática, parâmentro mandatório
- vm=verify: modo de verificação
- rpuri=https://SERVER_HOST:PORT: URL de repositório de biometria
- vpid=jonhsmith: voiceprint Id para verificação
- p=default: profile default
- f=hello-world: arquivo de áudio usado como prompt
- sct=2000: speech complete timeout em ms
- sit=1: Inicia os timers no fim do prompt.
Reconhecimento e Verificação de identidade de voz com persistência entre aplicações
A utilização de persitência entre aplicações é útil quando se pretende implementar cenários com diálogos mais complexos, como no caso de verificação de locutor com senha falada. Mais detalhes em: Session Persistence
exten => 301,1,Answer same => n,MRCPRecog(builtin:slm/general, p=default&f=hello-world&sct=2000&vbu=true&plt=1) same => n,Verbose(1, ${RECOGSTATUS}, ${RECOG_COMPLETION_CAUSE}, ${RECOG_RESULT}) same => n,MRCPVerif(vm=verify&rpuri=https://ocibio2.aquarius.cpqd.com.br:8665&vpid=johnsmith,marysmith&p=default&f=please-try-again&sct=2000&sit=1&plt=1&bufh=verify-from-buffer) same => n,Verbose(2, ${VERIFSTATUS}, ${VERIF_COMPLETION_CAUSE}, ${VERIF_RESULT}), ${VERIF_SID}) same => n,HangupNota
- Observar o uso da opção plt para realizar a persistência, garantindo o mesmo Ch-Id entre as aplicações de reconhecimento e verificação.
- A opção vbu realiza a preservação do buffer de áudio do reconhecimento.
- A opção bufh realiza a manipulação do buffer podendo assumir os valores: verify-from-buffer, clear e rollback.
- É possível inserir vários reconhecimentos antes da verificação final, para acrescentar áudio no buffer para uso na verificação de locutor.
- O encerramento da sessão é feito somente após o Hangup.
Nota
As linhas com Verbose mostram os valores retornados como resultado da operação.
Monitoramento¶
- Para fazer o «rastreamento» das ligações entre Asterisk (URA) -> MRCP -> ASR:
- Habilitar o tuning log do ASR.
- Utilizar no log do Asterisk o channel-identifier.
- No log do MRCP usar o channel-identifier e session-id (cruzar as informações).
- Procurar no tuning-log o session-id correspondente.
- O tuning log contém o áudio no formato pcm (RAW) e o resultado do reconhecimento.