Parâmetros e detalhes da API RESTful para reconhecimento de arquivos de áudio Paraformer.
ImportanteO Alibaba Cloud Model Studio lançou um domínio específico por workspace para a região China (Pequim). O novo domínio dedicado oferece desempenho superior e maior estabilidade para solicitações de inferência. Recomendamos migrar de dashscope.aliyuncs.com para {WorkspaceId}.cn-beijing.maas.aliyuncs.com.
Substitua {WorkspaceId} pelo seu ID do Workspace real. O domínio existente permanece totalmente funcional.
ImportanteEste documento aplica-se apenas à região China (Pequim). Para usar o modelo, utilize uma chave de API da região China (Pequim).
Guia do usuário:Reconhecimento de fala não em tempo real
O serviço fornece uma interface de envio de tarefas e uma interface de consulta de tarefas. Normalmente, chame a interface de envio para carregar uma tarefa de reconhecimento e, em seguida, consulte repetidamente a interface de consulta até a conclusão da tarefa.
Pré-requisitos
Ative o serviço e Obtenha uma chave de API. Configure a chave de API como variável de ambiente em vez de codificá-la diretamente no código para evitar riscos de segurança causados por vazamento de código.
ObservaçãoPara fornecer acesso temporário a aplicativos ou usuários terceiros, ou para controlar estritamente operações de alto risco, como acessar ou excluir dados confidenciais, recomendamos o uso de tokens de autenticação temporários.
Em comparação com chaves de API de longo prazo, os tokens de autenticação temporários possuem validade curta (60 segundos) e maior segurança. Eles são adequados para cenários de chamada temporária e reduzem efetivamente o risco de vazamento da chave de API.
Uso: No seu código, substitua a chave de API usada originalmente para autenticação pelo token de autenticação temporário obtido.
Interface de envio de tarefas
Informações básicas
| Descrição do endpoint da API | Envia uma tarefa de reconhecimento de fala. |
| URL | |
| Método de solicitação | POST |
| Cabeçalhos da solicitação | |
| Corpo da mensagem | O código a seguir mostra um corpo de mensagem contendo todos os parâmetros de solicitação. Omita campos opcionais conforme necessário. |
Parâmetros de solicitação
Clique para visualizar um exemplo de solicitação
Exemplo curl para a interface de envio de tarefas:
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-Async: enable" \
--data '{"model":"paraformer-v2","input":{"file_urls":["https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav"]},"parameters":{"channel_id":[0]}}'
| Parâmetro | Tipo | Valor padrão | Obrigatório | Descrição |
|---|---|---|---|---|
model | string | Sim | Nome do modelo Paraformer usado para transcrição de arquivos de áudio e vídeo. Para mais informações, consulte modelos. | |
file_urls | array[string] | Sim | Lista de URLs para transcrição de arquivos de áudio e vídeo (HTTP/HTTPS). Uma única solicitação suporta apenas 1 URL. ImportanteSe uma URL contiver espaços, caracteres chineses ou outros caracteres especiais, codifique-a em URL antes de usar (por exemplo, substitua espaços por Se seus arquivos de áudio estiverem armazenados no OSS, a API RESTful suporta URLs temporárias que começam com o prefixo oss://. Importante
| |
vocabulary_id | string | Não | ID do vocabulário personalizado. Suportado por modelos v2+ com configurações de idioma. As palavras-chave deste ID aplicam-se ao reconhecimento de fala atual. Desativado por padrão. Para uso, consulte Palavras-chave personalizadas. | |
channel_id | array[integer] | [0] | Não | Especifica os índices das faixas de áudio a serem reconhecidas em um arquivo multifaixa. Os índices começam em 0. Por exemplo, [0] significa reconhecer a primeira faixa, e [0, 1] significa reconhecer simultaneamente a primeira e a segunda faixas. Se este parâmetro for omitido, apenas a primeira faixa será processada por padrão. ImportanteCada faixa especificada é faturada independentemente. Por exemplo, solicitar [0, 1] para um único arquivo incorre em duas cobranças separadas. |
disfluency_removal_enabled | boolean | false | Não | Filtra palavras de preenchimento. Desativado por padrão. |
timestamp_alignment_enabled | boolean | false | Não | Ativa o recurso de alinhamento de timestamp. Desativado por padrão. |
special_word_filter | string | Não | Especifica palavras sensíveis a serem processadas durante o reconhecimento de fala e permite definir diferentes métodos de processamento para cada palavra. Se este parâmetro não for fornecido, o sistema utiliza a lógica interna de filtragem de palavras sensíveis, e as palavras correspondentes à lista de palavras sensíveis do Alibaba Cloud Model Studio nos resultados de reconhecimento serão substituídas por Se este parâmetro for fornecido, as seguintes estratégias de processamento de palavras sensíveis podem ser implementadas:
O valor deste parâmetro deve ser uma string JSON com a seguinte estrutura: Descrições dos campos JSON:
| |
language_hints | array[string] | ["zh", "en"] | Não | Especifica os códigos de idioma da fala a ser reconhecida. Este parâmetro aplica-se apenas ao modelo paraformer-v2. Códigos de idioma suportados:
|
diarization_enabled | boolean | false | Não | Diarização automática de falantes. Desativada por padrão. Aplicável apenas a áudio mono. Áudio multicanal não suporta diarização de falantes. Quando este recurso está ativado, os resultados de reconhecimento incluirão um campo ObservaçãoSe a diarização de falantes estiver ativada, recomenda-se que a duração do áudio não exceda 2 horas, caso contrário o reconhecimento pode falhar ou atingir timeout. Para um exemplo de |
speaker_count | integer | Não | Valor de referência para contagem de falantes (inteiro de 2 a 100, inclusive). Entra em vigor quando diarization_enabled é true. A contagem de falantes é determinada automaticamente por padrão. Configurar este parâmetro auxilia o algoritmo a focar na contagem especificada, mas não garante uma saída exata. |
Parâmetros de resposta
Clique para visualizar um exemplo de resposta
{
"output": {
"task_status": "PENDING",
"task_id": "c2e5d63b-96e1-4607-bb91-************"
},
"request_id": "77ae55ae-be17-97b8-9942--************"
}
Parâmetro | Tipo | Descrição |
|---|---|---|
task_status | string | O status da tarefa. |
task_id | string | O ID da tarefa. Este ID é passado como um parâmetro de solicitação na interface de consulta de tarefas. |
Interface de consulta de tarefas
Informações básicas
| Descrição do endpoint da API | Consulta o status e o resultado de uma tarefa de reconhecimento de fala. |
| URL | |
| Método de solicitação | GET |
| Cabeçalhos da solicitação | |
| Corpo da mensagem | Nenhum. |
Parâmetros de solicitação
Clique para visualizar um exemplo de solicitação
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}' --header "Authorization: Bearer $DASHSCOPE_API_KEY"
Parâmetro | Tipo | Valor padrão | Obrigatório | Descrição |
|---|---|---|---|---|
task_id | string | - | Sim | ID da tarefa necessário para consulta. Retornado pela interface de envio de tarefas. |
Parâmetros de resposta
Clique para visualizar um exemplo de resposta
Se uma tarefa contiver múltiplas subtarefas, o status geral da tarefa será marcado como SUCCEEDED se qualquer subtarefa for bem-sucedida. Verifique o campo subtask_status para determinar o resultado de cada subtarefa.
Exemplo normal
{
"request_id": "f9e1afad-94d3-997e-a83b-************",
"output": {
"task_id": "f86ec806-4d73-485f-a24f-************",
"task_status": "SUCCEEDED",
"submit_time": "2024-09-12 15:11:40.041",
"scheduled_time": "2024-09-12 15:11:40.071",
"end_time": "2024-09-12 15:11:40.903",
"results": [
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/409a4b92-445b-4dd8-8c1d-f110954d82d8-1.json?Expires=1726211500&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
"subtask_status": "SUCCEEDED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"duration": 9
}
}
Exemplo de exceção
O parâmetro code indica o código de erro, e o parâmetro message indica a mensagem de erro. Estes dois campos aparecem apenas em casos de exceção. Utilize-os para solucionar problemas consultando os códigos de erro.
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_exaple_1.wav",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
Parâmetro | Tipo | Descrição |
|---|---|---|
task_id | string | O ID da tarefa consultada. |
task_status | string | O status da tarefa consultada. Para tarefas com múltiplas subtarefas, task_status mostra |
subtask_status | string | O status da subtarefa. |
file_url | string | A URL do arquivo processado na tarefa de transcrição de arquivos. |
transcription_url | string | Link para obter o resultado de reconhecimento (válido por 24 horas). Após a expiração, consultas de tarefas e downloads de resultados falharão. O resultado de reconhecimento é salvo como JSON. Baixe-o através deste link ou leia diretamente via solicitação HTTP. Para detalhes sobre os campos JSON, consulte Descrição do resultado de reconhecimento. |
Descrição do resultado de reconhecimento
O resultado de reconhecimento é salvo como um arquivo JSON.
Clique para visualizar exemplo de resultado de reconhecimento
{
"file_url":"https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"properties":{
"audio_format":"pcm_s16le",
"channels":[
0
],
"original_sampling_rate":16000,
"original_duration_in_milliseconds":3834
},
"transcripts":[
{
"channel_id":0,
"content_duration_in_milliseconds":3720,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentences":[
{
"begin_time":100,
"end_time":3820,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentence_id":1,
"speaker_id":0, //This field is only displayed when automatic speaker diarization is enabled
"words":[
{
"begin_time":100,
"end_time":596,
"text":"Hello ",
"punctuation":""
},
{
"begin_time":596,
"end_time":844,
"text":"world",
"punctuation":", "
}
// Other content omitted here
]
}
]
}
]
}
Os principais parâmetros são os seguintes:
Parâmetro | Tipo | Descrição |
|---|---|---|
audio_format | string | O formato de áudio do arquivo de source. |
channels | array[integer] | As informações de índice de faixa de áudio do arquivo de source. Retorna [0] para áudio mono, [0, 1] para áudio de duas faixas, e assim por diante. |
original_sampling_rate | integer | A taxa de amostragem (Hz) do áudio no arquivo de source. |
original_duration | integer | A duração original do áudio (ms) do arquivo de source. |
channel_id | integer | O índice da faixa de áudio do resultado de transcrição, começando em 0. |
content_duration | integer | A duração (ms) do conteúdo identificado como fala na faixa de áudio. O serviço de modelo de reconhecimento de fala Paraformer transcreve e mede apenas o conteúdo identificado como fala na faixa de áudio, faturando de acordo. Conteúdo sem fala não é medido nem faturado. Geralmente, a duração do conteúdo de fala é menor que a duração original do áudio. Como a determinação da existência de conteúdo de fala é feita por um modelo de IA, pode haver algum desvio em relação à situação real. |
transcript | string | O resultado de transcrição de fala no nível de parágrafo. |
sentences | array | O resultado de transcrição de fala no nível de sentença. |
words | array | O resultado de transcrição de fala no nível de palavra. |
begin_time | integer | O timestamp inicial (ms). |
end_time | integer | O timestamp final (ms). |
text | string | O resultado da transcrição de fala. |
speaker_id | integer | O índice do falante atual, começando em 0, usado para distinguir diferentes falantes. Este campo só é exibido nos resultados de reconhecimento quando a diarização de falantes está ativada. |
punctuation | string | A pontuação prevista após a palavra (se houver). |
Exemplo completo
Utilize bibliotecas HTTP integradas para implementar solicitações de envio e consulta de tarefas. Primeiro envie a tarefa de reconhecimento e depois consulte repetidamente até a conclusão.
O código a seguir fornece um exemplo em Python:
import requests
import json
import time
api_key = "your-dashscope-api-key" # Replace this with your API key.
file_urls = [
"https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
]
language_hints = ["zh", "en"]
# Submit file transcription task with list of file URLs to transcribe.
def submit_task(apikey, file_urls) -> str:
headers = {
"Authorization": f"Bearer {apikey}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
data = {
"model": "paraformer-v2",
"input": {"file_urls": file_urls},
"parameters": {
"channel_id": [0],
"language_hints": language_hints
},
}
# The URL of the recorded file transcription service.
service_url = (
"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription"
)
response = requests.post(
service_url, headers=headers, data=json.dumps(data)
)
# Print the response content.
if response.status_code == 200:
return response.json()["output"]["task_id"]
else:
print("task failed!")
print(response.json())
return None
# Recursively query the task status until the task is successful.
def wait_for_complete(task_id):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
pending = True
while pending:
# The URL of the task status query service.
service_url = f"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}"
response = requests.get(
service_url, headers=headers
)
if response.status_code == 200:
status = response.json()['output']['task_status']
if status == 'SUCCEEDED':
print("task succeeded!")
pending = False
return response.json()['output']['results']
elif status == 'RUNNING' or status == 'PENDING':
pass
else:
print("task failed!")
pending = False
else:
print("query failed!")
pending = False
print(response.json())
time.sleep(0.1)
task_id = submit_task(apikey=api_key, file_urls=file_urls)
print("task_id: ", task_id)
result = wait_for_complete(task_id)
print("transcription result: ", result)
Códigos de erro
Se encontrar erros, consulte Códigos de erro para solução de problemas.
Se o problema persistir, junte-se à comunidade de desenvolvedores para relatar o problema e forneça o Request ID para investigação adicional.
Quando uma tarefa contém múltiplas subtarefas, desde que qualquer subtarefa tenha sucesso, o status geral da tarefa é marcado como SUCCEEDED. Verifique o campo subtask_status para determinar o resultado de cada subtarefa.
Exemplo de resposta de erro:
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/sensevoice/rich_text_exaple_1.wav",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
Mais exemplos
Para mais exemplos, consulte nosso repositório no GitHub.
FAQ
Recursos
P: Suporta áudio codificado em Base64?
Não. Áudio codificado em Base64 não é suportado. Apenas áudio acessível via URLs publicamente acessíveis é suportado. Fluxos binários e reconhecimento direto de arquivos locais não são suportados.
P: Como fornecer arquivos de áudio como URLs publicamente acessíveis?
Geralmente, siga estas etapas (esta é uma abordagem geral; os detalhes variam conforme o produto de armazenamento. Recomendamos fazer upload do áudio para o Alibaba Cloud OSS):
1. Escolha um método de armazenamento e hospedagem
Por exemplo:
-
Object Storage Service (recomendado):
- Use o serviço de armazenamento de objetos de um provedor de nuvem (como o Alibaba Cloud OSS) para enviar arquivos de áudio para um bucket e configurá-los para acesso público.
- Vantagens: Alta disponibilidade, suporte a aceleração CDN, gerenciamento fácil.
-
Servidor web:
- Coloque arquivos de áudio em um servidor web que suporte acesso HTTP/HTTPS (como Nginx ou Apache).
- Vantagens: Adequado para pequenos projetos ou testes locais.
-
Content Delivery Network (CDN):
- Hospede arquivos de áudio em uma CDN e acesse-os através da URL fornecida pela CDN.
- Vantagens: Entrega acelerada de arquivos, adequado para cenários de alta concorrência.
2. Faça upload dos arquivos de áudio
Faça upload dos arquivos de áudio com base no método de armazenamento/hospedagem escolhido, por exemplo:
-
Object Storage Service:
- Faça login no console do provedor de nuvem e crie um bucket.
- Faça upload dos arquivos de áudio e defina as permissões do arquivo como "leitura pública" ou gere links de acesso temporário.
-
Servidor web:
- Coloque os arquivos de áudio no diretório designado do servidor (como
/var/www/html/audio/). - Garanta que os arquivos sejam acessíveis via HTTP/HTTPS.
- Coloque os arquivos de áudio no diretório designado do servidor (como
3. Gere uma URL publicamente acessível
Por exemplo:
-
Object Storage Service:
- Após o upload, o sistema gera automaticamente uma URL de acesso público (geralmente no formato
https://<bucket-name>.<region>.aliyuncs.com/<file-name>). - Se precisar de um domínio mais amigável, vincule um domínio personalizado e ative HTTPS.
- Após o upload, o sistema gera automaticamente uma URL de acesso público (geralmente no formato
-
Servidor web:
- A URL de acesso ao arquivo é tipicamente o endereço do servidor mais o caminho do arquivo (como
https://your-domain.com/audio/file.mp3).
- A URL de acesso ao arquivo é tipicamente o endereço do servidor mais o caminho do arquivo (como
-
CDN:
- Após configurar a aceleração CDN, use a URL fornecida pela CDN (como
https://cdn.your-domain.com/audio/file.mp3).
- Após configurar a aceleração CDN, use a URL fornecida pela CDN (como
4. Verifique a acessibilidade da URL
Em um ambiente de rede pública, garanta que a URL gerada seja acessível, por exemplo:
- Abra a URL em um navegador e verifique se o arquivo de áudio pode ser reproduzido.
- Use ferramentas (como
curlou Postman) para verificar se a URL retorna uma resposta HTTP correta (código de status 200).
Ao usar o SDK, se os arquivos de áudio estiverem armazenados no Alibaba Cloud OSS, URLs temporárias com o prefixo oss:// não são suportadas.
Ao usar a API RESTful, se os arquivos de áudio estiverem armazenados no Alibaba Cloud OSS, URLs temporárias com o prefixo oss:// são suportadas:
- A URL temporária é válida por 48 horas e não pode ser usada após expirar. Não a utilize em ambiente de produção.
- A API para obtenção de credencial de upload é limitada a 100 QPS e não suporta scale-out. Não a utilize em ambientes de produção, cenários de alta concorrência ou testes de estresse.
- Para ambientes de produção, utilize um serviço de armazenamento estável, como o OSS, para garantir disponibilidade de arquivos a longo prazo e evitar problemas de limitação de taxa.
P: Quanto tempo leva para obter resultados de reconhecimento?
Após o envio, a tarefa entra em estado de fila (PENDING). O tempo de espera depende do tamanho da fila e da duração do arquivo, não podendo ser estimado com precisão, mas geralmente é concluído em alguns minutos. Aguarde pacientemente. Arquivos de áudio mais longos exigem mais tempo de processamento.
Solução de problemas
Se encontrar um erro, consulte as informações em Códigos de erro.
P: O que devo fazer se os resultados de reconhecimento não estiverem sincronizados com a reprodução do áudio?
Defina o parâmetro de solicitação timestamp_alignment_enabled como true. Isso sincroniza os resultados de reconhecimento com a reprodução do áudio.
P: O que devo fazer se receber um erro InvalidFile.DownloadFailed após enviar uma tarefa?
Verifique se a URL do arquivo contém espaços, caracteres chineses ou outros caracteres especiais. Se o nome do arquivo incluir espaços (por exemplo, "Meeting Recording Q1 2024.mp4"), codifique o nome do arquivo em URL substituindo espaços por %20 antes de passá-lo para o parâmetro file_urls.
P: O que faço se a URL de acesso público temporário de um arquivo de áudio do OSS estiver inacessível?
Defina X-DashScope-OssResourceResolve como enable nos cabeçalhos.
Não recomendado.
O Java SDK e o Python SDK não suportam a configuração de cabeçalhos.
P: Não consigo obter resultados após polling contínuo?
Isso pode ocorrer devido à limitação de taxa. Aguarde pacientemente. Se precisar de expansão de capacidade, junte-se à comunidade de desenvolvedores para solicitar.
P: Por que não há resultado de reconhecimento (incapaz de reconhecer fala)?
- Verifique se o áudio atende aos requisitos (formato, taxa de amostragem).
- Se estiver usando o modelo
paraformer-v2, verifique se a configuraçãolanguage_hintsestá correta. - Se nenhuma das opções acima resolver o problema, personalize palavras-chave para melhorar o reconhecimento de termos específicos.
Mais perguntas
Para mais perguntas, consulte o FAQ no GitHub.