API MRCP

O MRCP é um protocolo frequentemente utilizado para disponibilizar recursos de áudio, síntese e reconhecimento de fala em sistemas de telecomunicações. No caso de URAs (Unidades de Resposta Audível), é um padrão para desenvolver aplicações de diálogo baseadas em síntese e reconhecimento de fala e na reprodução de prompts para os usuários.

Para informações sobre a integração usando MRCP, consulte o Manual do Servidor CPQD MRCP.

Métodos

Para a integração com os classificadores de idade, gênero e emoção foram incluídos novos parâmetros “vendor specific” nos métodos descritos a seguir.

SET PARAMETERS

Abaixo está o formato dos parâmetros “vendor specific” para acionamento dos classificadores de voz:

Vendor-Specific-Parameters: br.com.cpqd.asr.Infer-age-enabled=true; br.com.cpqd.asr.Infer-gender-enabled=true;br.com.cpqd.asr.Infer-emotion-enabled=true

GET PARAMETERS

Vale o mesmo comentário do método Set Parameters, com a exceção de que um Get Parameters vazio, não solicita parâmetros «specific vendor», será necessário solicitá-los explicitamente, ou incluí-los na solicitação com os demais parâmetros.

START RECOGNITION

Os parâmetros “vendor specific” podem ser usados no método Start Recognition e seguem o formato do Set Parameters.

RECOGNITION RESULT

Mensagem que contém o resultado do reconhecimento. Ela deve ser combinada com o resultado da classificação de gênero, idade e emoção caso estejam disponíveis. Os campos abaixo (em negrito) devem ser adicionados ao objeto do resultado do reconhecimento.

Headers:

Campo

Descrição

Tipo do campo

age_scores:

Dicionário que contém o tipo de evento, a idade estipulada e a probabilidade.

Dict: {
event:  <string>,
age:    <int>,
p:      <array[float]>,
age_50: <array[int]>,
age_80: <array[int]>,
age_99: <array[int]>,
}

gender_scores:

Dicionário que contém o tipo de evento, a probabilidade e o gênero.

Dict: {
event:  <string>,
p:      <array[float]>,
gender: <string>,
}

emotion_scores:

Dicionário que contém a probabilidade e o tipo de emoção em um formato <K,V>.

Dict: {
p: <dict>
  {
    <string>: <float>
  },
event:  <string>,
emotion: <string>,
}

Exemplo de conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
  <result>
    <interpretation grammar="builtin:slm/general" confidence="0.91">
      <instance>eu quero uma pizza vegetariano</instance>
      <input mode="speech">eu quero uma pizza vegetariano</input>
    </interpretation>
    <age-scores>
      <event>AGE RESULT</event>
      <p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000000</p>
        <p>0.000116</p>
        <p>0.000568</p>
        <p>0.001398</p>
        <p>0.002690</p>
        <p>0.002863</p>
        <p>0.003313</p>
        <p>0.006897</p>
        <p>0.021486</p>
        <p>0.031100</p>
        <p>0.039255</p>
        <p>0.052133</p>
        <p>0.068787</p>
        <p>0.096417</p>
        <p>0.121222</p>
        <p>0.147217</p>
        <p>0.178631</p>
        <p>0.198858</p>
        <p>0.224273</p>
        <p>0.254821</p>
        <p>0.284483</p>
        <p>0.311271</p>
        <p>0.337931</p>
        <p>0.367762</p>
        <p>0.393655</p>
        <p>0.427061</p>
        <p>0.456557</p>
        <p>0.482710</p>
        <p>0.500024</p>
        <p>0.525248</p>
        <p>0.552225</p>
        <p>0.577556</p>
        <p>0.608544</p>
        <p>0.627145</p>
        <p>0.646607</p>
        <p>0.663277</p>
        <p>0.684210</p>
        <p>0.710832</p>
        <p>0.727683</p>
        <p>0.748482</p>
        <p>0.764080</p>
        <p>0.780238</p>
        <p>0.798526</p>
        <p>0.816560</p>
        <p>0.836532</p>
        <p>0.851102</p>
        <p>0.863376</p>
        <p>0.878755</p>
        <p>0.897002</p>
        <p>0.904588</p>
        <p>0.913626</p>
        <p>0.923301</p>
        <p>0.931504</p>
        <p>0.939743</p>
        <p>0.944034</p>
        <p>0.948489</p>
        <p>0.953124</p>
        <p>0.955638</p>
        <p>0.965674</p>
        <p>0.975005</p>
        <p>0.981188</p>
        <p>0.984547</p>
        <p>0.984608</p>
        <p>0.987012</p>
        <p>0.987012</p>
        <p>0.991108</p>
        <p>0.991108</p>
        <p>0.994282</p>
        <p>0.994282</p>
        <p>0.994282</p>
        <p>0.996831</p>
        <p>0.996831</p>
        <p>0.996831</p>
        <p>0.996831</p>
        <p>0.998747</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
        <p>1.000000</p>
      </p>
      <age-range prob="age_50">
        <age>29</age>
        <age>49</age>
      </age-range>
      <age-range prob="age_80">
        <age>23</age>
        <age>58</age>
      </age-range>
      <age-range prob="age_99">
        <age>16</age>
        <age>77</age>
      </age-range>
      <age>40</age>
    </age-scores>
  </result>
  
<?xml version="1.0" encoding="UTF-8"?>
  <result>
    <interpretation grammar="builtin:slm/general" confidence="0.91">
      <instance>eu quero uma pizza vegetariano</instance>
      <input mode="speech">eu quero uma pizza vegetariano</input>
    </interpretation>
    <emotion-scores>
      <event>EMOTION RESULT</event>
      <p>
        <p emotion="amedrontado">0.010442</p>
        <p emotion="ansioso">0.004266</p>
        <p emotion="enojado">0.016020</p>
        <p emotion="entusiasmado">0.014407</p>
        <p emotion="feliz">0.002329</p>
        <p emotion="frustrado">0.004790</p>
        <p emotion="irritado">0.005200</p>
        <p emotion="neutro">0.873555</p>
        <p emotion="surpreso">0.001975</p>
        <p emotion="triste">0.067016</p>
      </p>
      <emotion>neutro</emotion>
    </emotion-scores>
  </result>

<?xml version="1.0" encoding="UTF-8"?>
  <result>
    <interpretation grammar="builtin:slm/general" confidence="0.91">
      <instance>eu quero uma pizza vegetariano</instance>
      <input mode="speech">eu quero uma pizza vegetariano</input>
    </interpretation>
    <gender-scores>
      <event>GENDER RESULT</event>
      <p>
        <p>0.691992</p>
        <p>0.308008</p>
      </p>
      <gender>M</gender>
  </gender-scores>
  </result>