Métodos¶
Esta seção detalha os métodos da API REST do Speech Server para o recurso de reconhecimento de fala (ASR), que sofreram alterações com a adição de parâmetros para uso de novas funcionalidades. Para verificar todos os detalhes da API, consulte a documentação do CPQD Reconhecimento de Fala.
RECOGNIZE
POST /v2/recognize
HTTP Headers (adicionais)
Infer-age-enabled |
(Opcional) Habilita a classificação da idade do usuário. Valores válidos:
|
Infer-gender-enabled |
(Opcional) Habilita a classificação do gênero do usuário. Valores válidos:
|
Infer-emotion-enabled |
(Opcional) Habilita a classificação do tom emocional do usuário. Valores válidos:
|
Content-Type |
Indica o formato da mídia (áudio) a ser enviado. Valores: application/octet-stream – arquivo codificado num formato suportado audio/wav audio/raw – áudio PCM Linear sem cabeçalho |
loggingTag |
(Opcional) quando presente deve ser inserido nos logs para facilitar o rastreio de requisições. |
license.manager.accountTag |
(Opcional) define uma tag para geração de bilhetes multiusuário |
Se os headers acima estiverem setados, os respectivos serviços serão acionados durante o reconhecimento de fala. A resposta dos serviços será combinada à resposta do ASR.
Resultado (HTTP status = 200)
Se a requisição HTTP retorna status code “200”, o corpo da resposta possui o resultado do reconhecimento com campos adicionais. Os campos adicionais são:
Campo
Descrição
Tipo do campo
Dicionário que contém o tipo de evento, a idade estipulada, a probabilidade por faixa etária e um índice de confiança.
{ event: <string>, age: <int>, p: <dict> { <0-10>: <float>, <10-20>: <float>, <20-30>: <float>, <30-40>: <float>, <40-50>: <float>, <50-60>: <float>, <60-70>: <float>, <70-80>: <float>, <80-90>: <float>, <90-100>: <float> }, confidence: <string> }Dicionário que contém o tipo de evento, a probabilidade e o gênero.
{ event: <string>, p: <array[float]>, gender: <string> }Dicionário que contém a probabilidade e o tipo de emoção em um formato <K,V>.
{ event: <string>, emotion: <string>, group: <string>, p: <dict> { <enojado>: <float>, <frustrado>: <float>, <triste>: <float>, <ansioso>: <float>, <entusiasmado>: <float>, <feliz>: <float>, <surpreso>: <float>, <amedrontado>: <float>, <neutro>: <float>, <irritado>: <float> }, p_groups: <dict> { <negativo_desativado>: <float>, <positivo>: <float>, <neutro>: <float>, <negativo_ativado>: <float> } }
Exemplos
Chamada REST passando o modelo da língua via parameters de query:
curl --request POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'Content-Type: application/octet-stream' \
--header 'Infer-age-enabled: true' \
--header 'Infer-emotion-enabled: true' \
--header 'Infer-gender-enabled: true' \
--header 'license.manager.accountTag: <valorA>' \
--header 'loggingTag: <valorA>' \
--data 'audio=@<path-to-file>/audio1.wav
Chamada REST passando o modelo da língua e audio via multipart:
curl -X POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'accept: application/json' \
--header 'infer-age-enabled: true' \
--header 'infer-gender-enabled: true' \
--header 'infer-emotion-enabled: true' \
--header "decoder.maxSentences: 2" \
--header 'decoder.continuousMode: true' \
--form 'audio=@"/pizza-veg-8k.wav"' \
--form 'lm=@"/pizza.gram"'
Resultado:
[
{
"alternatives": [
{
"text": "boa noite",
"words": [
{
"text": "boa",
"score": 100,
"start_time": 1.31,
"end_time": 1.64
},
{
"text": "noite",
"score": 100,
"start_time": 1.64,
"end_time": 2.1499999
}
],
"score": 100,
"lm": "builtin:slm/general"
}
],
"segment_index": 0,
"last_segment": true,
"final_result": true,
"start_time": 1.16,
"end_time": 2.23,
"result_status": "RECOGNIZED"
},
{
"age_scores": {
"event": "AGE RESULT",
"age": 46,
"p": {
"0-10": 6.418202899121052e-07,
"10-20": 0.015974009871477613,
"20-30": 0.04174115835109025,
"30-40": 0.07696848183742766,
"40-50": 0.10564251137743308,
"50-60": 0.7548041620187447,
"60-70": 0.004869034450940512,
"70-80": 2.113791160785148e-10,
"80-90": 5.957488708518843e-11,
"90-100": 1.6421073156355875e-12
},
"confidence": "mid"
}
},
{
"gender_scores": {
"event": "GENDER RESULT",
"p": [
0.034807813443786806,
0.9651921865562132
],
"gender": "F"
}
},
{
"emotion_scores": {
"event": "EMOTION RESULT",
"emotion": "irritado",
"p": {
"enojado": 0.04954051971435547,
"frustrado": 0.015936316922307014,
"triste": 0.011620878241956234,
"ansioso": 0.05386947840452194,
"entusiasmado": 0.18894456326961517,
"feliz": 0.019370414316654205,
"surpreso": 0.02057667449116707,
"amedrontado": 0.016010118648409843,
"neutro": 0.10917621850967407,
"irritado": 0.5149547457695007
},
"p_groups": {
"negativo_desativado": 0.07709771487861872,
"positivo": 0.2827611304819584,
"neutro": 0.12518633715808392,
"negativo_ativado": 0.5149547457695007
}
}
}
]
Chamada REST com resultado XML:
curl --request POST \
--url https://speechd.cpqd.com.br/asr/rest/v2/recognize \
--header 'Authorization: <token>
--header 'Content-Type: application/octet-stream' \
--header 'Infer-age-enabled: true' \
--header 'Infer-emotion-enabled: true' \
--header 'Infer-gender-enabled: true' \
--header 'license.manager.accountTag: <valorA>' \
--header 'loggingTag: <valorA>' \
--data 'audio=@<path-to-file>/audio1.wav
Resultado:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<row>
<alternatives>
<text>boa noite</text>
<words>
<text>boa</text>
<score>100</score>
<start_time>1.31</start_time>
<end_time>1.64</end_time>
</words>
<words>
<text>noite</text>
<score>100</score>
<start_time>1.64</start_time>
<end_time>2.1499999</end_time>
</words>
<score>100</score>
<lm>builtin:slm/general</lm>
</alternatives>
<segment_index>0</segment_index>
<last_segment>true</last_segment>
<final_result>true</final_result>
<start_time>1.16</start_time>
<end_time>2.23</end_time>
<result_status>RECOGNIZED</result_status>
</row>
<row>
<age_scores>
<event>AGE RESULT</event>
<age>46</age>
<p>
<0-10>6.418034716483139e-7</0-10>
<10-20>0.01597406112128007</10-20>
<20-30>0.04174127593512805</20-30>
<30-40>0.07696772756802672</30-40>
<40-50>0.10564146609203325</40-50>
<50-60>0.7548058434682504</50-60>
<60-70>0.004868983739218365</60-70>
<70-80>2.1137580010615486e-10</70-80>
<80-90>5.957360086676001e-11</80-90>
<90-100>1.6421091518404713e-12</90-100>
</p>
<confidence>mid</confidence>
</age_scores>
</row>
<row>
<gender_scores>
<event>GENDER RESULT</event>
<p>0.03480776210803915</p>
<p>0.9651922378919608</p>
<gender>F</gender>
</gender_scores>
</row>
<row>
<emotion_scores>
<event>EMOTION RESULT</event>
<emotion>irritado</emotion>
<group>negativo_ativado</group>
<p>
<enojado>0.04954055696725845</enojado>
<frustrado>0.01593632809817791</frustrado>
<triste>0.011620882898569107</triste>
<ansioso>0.05386950448155403</ansioso>
<entusiasmado>0.18894460797309875</entusiasmado>
<feliz>0.0193704254925251</feliz>
<surpreso>0.02057669498026371</surpreso>
<amedrontado>0.01601012982428074</amedrontado>
<neutro>0.10917627066373825</neutro>
<irritado>0.5149546265602112</irritado>
</p>
<p_groups>
<negativo_desativado>0.07709776796400547</negativo_desativado>
<positivo>0.2827612329274416</positivo>
<neutro>0.125186400488019</neutro>
<negativo_ativado>0.5149546265602112</negativo_ativado>
</p_groups>
</emotion_scores>
</row>
</root>