Este tópico descreve os parâmetros e os detalhes da interface do Java SDK para reconhecimento de fala em tempo real Paraformer.
Guia do usuário: Para introdução aos modelos e recomendações de seleção, consulte Real-time speech recognition - Fun-ASR/Paraformer.
A Recognition class fornece interfaces de chamada não streaming e streaming bidirecional. Escolha o método de chamada apropriado conforme suas necessidades:
Envie uma única tarefa de conversão de fala em texto em tempo real e obtenha sincronamente o resultado da transcrição passando um arquivo local.
Instancie a Recognition class, chame o método
Envie uma única tarefa de conversão de fala em texto em tempo real e transmita os resultados de reconhecimento em tempo real pela interface de callback.
Envie uma única tarefa de conversão de fala em texto em tempo real e transmita os resultados de reconhecimento em tempo real por um fluxo de trabalho Flowable.
Flowable é um framework de código aberto para gerenciamento de fluxo de trabalho e processos de negócios, lançado sob a licença Apache 2.0. Para mais informações sobre o Flowable, consulte a documentação da API Flowable.
O DashScope Java SDK utiliza pool de conexões OkHttp3 para reduzir a sobrecarga de estabelecimento repetido de conexões. Para mais informações, consulte Optimize Paraformer real-time speech recognition for high concurrency.
Configure parâmetros como modelo, taxa de amostragem e formato de áudio pelos métodos encadeados de
A classe
Durante bidirectional streaming calls, o servidor retorna informações e dados importantes do processo ao cliente por callbacks. Implemente os métodos de callback para lidar com as informações ou dados retornados pelo servidor.
Os métodos de callback são implementados estendendo a classe abstrata
Se encontrar erros, consulte Error codes para solução de problemas.
Se o problema persistir, junte-se à comunidade de desenvolvedores para relatar seu problema e forneça o Request ID para investigação adicional.
Para mais exemplos, consulte o GitHub.
Defina o parâmetro de solicitação
Utilize a ferramenta FFmpeg. Para mais usos, consulte o site oficial do FFmpeg.
Sim. Os resultados do reconhecimento de fala incluem os timestamps de início e fim de cada frase, que podem ser usados para determinar o intervalo de tempo de cada frase.
Existem duas maneiras de reconhecer arquivos locais:
Pré-requisitos
Para fornecer acesso temporário a aplicativos ou usuários terceiros, ou para controlar rigorosamente operações de alto risco, como acessar ou excluir dados sensíveis, recomendamos o uso de temporary authentication tokens.Em comparação com chaves de API de longo prazo, os tokens de autenticação temporários possuem curto período de validade (60 segundos) e maior segurança. Isso os torna adequados para cenários de chamada temporária e reduz efetivamente o risco de vazamento da chave de API.Uso: No seu código, substitua a chave de API originalmente usada para autenticação pelo token de autenticação temporário obtido.
Lista de modelos
| paraformer-realtime-v2 | paraformer-realtime-8k-v2 | |
|---|---|---|
| Caso de uso | Transmissões ao vivo, reuniões e cenários similares | Reconhecimento de áudio de 8 kHz em cenários como atendimento telefônico e correio de voz |
| Taxa de amostragem | Qualquer | 8kHz |
| Idioma | Chinês (incluindo mandarim e vários dialetos), inglês, japonês, coreano, alemão, francês, russoDialetos chineses suportados: Xangainês, Wu, Minnan, Nordestino, Gansu, Guizhou, Henan, Hubei, Hunan, Jiangxi, Ningxia, Shanxi, Shaanxi, Shandong, Sichuan, Tianjin, Yunnan, Cantonês | Chinês |
| Previsão de pontuação | Suportado por padrão, sem necessidade de configuração | Suportado por padrão, sem necessidade de configuração |
| Normalização inversa de texto (ITN) | Suportado por padrão, sem necessidade de configuração | Suportado por padrão, sem necessidade de configuração |
| Palavras-chave personalizadas | Consulte Custom hotwords | Consulte Custom hotwords |
| Especificar idioma de reconhecimento | Especifique por meio do parâmetro language_hints | |
| Reconhecimento de sentimento |
(Clique para visualizar o uso) O reconhecimento de sentimento segue estas restrições:
getEmoTag e getEmoConfidence de Sentence information (Sentence) para obter, respectivamente, o sentimento e a confiança do sentimento da frase atual. |
Início rápido
A Recognition class fornece interfaces de chamada não streaming e streaming bidirecional. Escolha o método de chamada apropriado conforme suas necessidades:
- Chamada não streaming: Reconhece arquivos locais e retorna o resultado completo de uma só vez. Adequado para processamento de áudio pré-gravado.
- Chamada streaming bidirecional: Reconhece fluxos de áudio diretamente e gera resultados em tempo real. O fluxo de áudio pode vir de dispositivos externos (como um microfone) ou ser lido de um arquivo local. Ideal para cenários que exigem feedback imediato.
Chamada não streaming
Envie uma única tarefa de conversão de fala em texto em tempo real e obtenha sincronamente o resultado da transcrição passando um arquivo local.
call com Request parameters e o arquivo a ser reconhecido, execute o reconhecimento e obtenha o resultado.
Clique para visualizar o exemplo completo
Clique para visualizar o exemplo completo
Streaming bidirecional: baseado em callback
Envie uma única tarefa de conversão de fala em texto em tempo real e transmita os resultados de reconhecimento em tempo real pela interface de callback.
-
Inicie o reconhecimento de fala streaming
Instancie a Recognition class, chame o método
callcom Request parameters e Callback interface (ResultCallback) para iniciar o reconhecimento de fala streaming. -
Transmita dados de áudio
Chame o método
sendAudioFrameda Recognition class em um loop para enviar segmentos de fluxo de áudio binário lidos de um arquivo local ou dispositivo (como um microfone) para o servidor. Durante a transmissão dos dados de áudio, o servidor retorna resultados de reconhecimento ao cliente em tempo real pelo métodoonEventda Callback interface (ResultCallback). Recomenda-se que cada segmento de áudio tenha duração aproximada de 100 milissegundos, com tamanho de dados entre 1 KB e 16 KB. -
Finalize o processamento
Chame o método
stopda Recognition class para encerrar o reconhecimento de fala. Este método bloqueia a thread atual até que o callbackonCompleteouonErrorda Callback interface (ResultCallback) seja acionado.
Clique para visualizar o exemplo completo
Clique para visualizar o exemplo completo
Streaming bidirecional: baseado em Flowable
Envie uma única tarefa de conversão de fala em texto em tempo real e transmita os resultados de reconhecimento em tempo real por um fluxo de trabalho Flowable.
Flowable é um framework de código aberto para gerenciamento de fluxo de trabalho e processos de negócios, lançado sob a licença Apache 2.0. Para mais informações sobre o Flowable, consulte a documentação da API Flowable.
Clique para visualizar o exemplo completo
Clique para visualizar o exemplo completo
Chame diretamente o método
streamCall da Recognition class para iniciar o reconhecimento.O método streamCall retorna uma instância Flowable<RecognitionResult>. Você pode chamar métodos como blockingForEach e subscribe da instância Flowable para processar os resultados do reconhecimento. Os resultados são encapsulados em RecognitionResult.O método streamCall requer dois parâmetros:- Instância
RecognitionParam(Request parameters): Use-a para definir parâmetros como modelo, taxa de amostragem e formato de áudio para o reconhecimento de fala. - Instância
Flowable<ByteBuffer>: Crie uma instância do tipoFlowable<ByteBuffer>e implemente o método de análise do fluxo de áudio dentro dela.
Chamadas de alta concorrência
O DashScope Java SDK utiliza pool de conexões OkHttp3 para reduzir a sobrecarga de estabelecimento repetido de conexões. Para mais informações, consulte Optimize Paraformer real-time speech recognition for high concurrency.
Parâmetros de solicitação
Configure parâmetros como modelo, taxa de amostragem e formato de áudio pelos métodos encadeados de RecognitionParam. Passe o objeto de parâmetro configurado para o método call/streamCall da Recognition class.
Clique para visualizar o exemplo
Clique para visualizar o exemplo
| Parâmetro | Tipo | Padrão | Obrigatório | Descrição |
|---|---|---|---|---|
| model | String | Sim | Modelo para reconhecimento de fala em tempo real. Para mais informações, consulte Model list. | |
| sampleRate | Integer | Sim | Define a taxa de amostragem (em Hz) do áudio a ser reconhecido.Varia conforme o modelo:
| |
| format | String | Sim | Define o formato de áudio a ser reconhecido.Formatos de áudio suportados: pcm, wav, mp3, opus, speex, aac, amr. | |
| vocabularyId | String | Não | Define o ID das palavras-chave. Se não definido, as palavras-chave não terão efeito. Use este campo para definir o ID das palavras-chave para modelos v2 e posteriores.Na sessão atual de reconhecimento de fala, as informações de palavras-chave correspondentes a este ID serão aplicadas. Para uso detalhado, consulte Custom hotwords. | |
| disfluencyRemovalEnabled | boolean | false | Não | Define se deve filtrar palavras de preenchimento:
|
| language_hints | String[] | ["zh", "en"] | Não | Define os códigos de idioma para reconhecimento. Se não for possível determinar o idioma antecipadamente, deixe este campo indefinido e o modelo detectará o idioma automaticamente.Códigos de idioma suportados atualmente:
language_hints deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| semantic_punctuation_enabled | boolean | false | Não | Define se deve ativar a segmentação semântica. Desativado por padrão.
semantic_punctuation_enabled, você pode alternar flexivelmente o método de segmentação de reconhecimento de fala para adequar-se a diferentes cenários.Este parâmetro só tem efeito quando o modelo é v2 ou posterior.semantic_punctuation_enabled deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| max_sentence_silence | Integer | 800 | Não | Define o limiar de duração de silêncio (em ms) para segmentação VAD (Detecção de Atividade de Voz).Quando a duração do silêncio após um segmento de fala excede este limiar, o sistema determina que a frase terminou.O intervalo do parâmetro é de 200 ms a 6000 ms, com valor padrão de 800 ms.Este parâmetro só tem efeito quando o parâmetro semantic_punctuation_enabled é false (segmentação VAD) e o modelo é v2 ou posterior.max_sentence_silence deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| multi_threshold_mode_enabled | boolean | false | Não | Quando esta opção está ativada (true), ela impede que a segmentação VAD corte frases excessivamente longas. Desativado por padrão.Este parâmetro só tem efeito quando o parâmetro semantic_punctuation_enabled é false (segmentação VAD) e o modelo é v2 ou posterior.multi_threshold_mode_enabled deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| punctuation_prediction_enabled | boolean | true | Não | Define se deve adicionar pontuação automaticamente nos resultados de reconhecimento:
punctuation_prediction_enabled deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| heartbeat | boolean | false | Não | Para manter uma conexão longa com o servidor, use esta opção para controlar o comportamento:
A versão do SDK deve ser 2.19.1 ou posterior para usar este campo. heartbeat deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| inverse_text_normalization_enabled | boolean | true | Não | Define se deve ativar ITN (Normalização Inversa de Texto).Ativado por padrão (true). Quando ativado, numerais chineses são convertidos para numerais arábicos.Este parâmetro só tem efeito quando o modelo é v2 ou posterior.inverse_text_normalization_enabled deve ser definido pelo método parameter ou parameters da instância RecognitionParam: |
| apiKey | String | Não | Chave de API do usuário. |
Interfaces principais
Classe Recognition
A classe Recognition é importada via "import com.alibaba.dashscope.audio.asr.recognition.Recognition;". Suas interfaces principais são as seguintes:
| Interface/Método | Parâmetro | Valor de retorno | Descrição |
|---|---|---|---|
| Nenhum | Reconhecimento em tempo real streaming baseado em callback. Este método não bloqueia a thread atual. | |
| Resultado do reconhecimento | Chamada não streaming baseada em arquivo local. Este método bloqueia a thread atual até que todo o áudio seja lido. O arquivo a ser reconhecido deve ter permissões de leitura. | |
| Flowable<RecognitionResult> | Reconhecimento em tempo real streaming baseado em Flowable. | |
| Nenhum | Envia dados de áudio. Cada pacote de áudio não deve ser muito grande nem muito pequeno. Recomenda-se que cada pacote tenha duração aproximada de 100 ms, com tamanho entre 1 KB e 16 KB.Os resultados de reconhecimento são obtidos pelo método onEvent da Callback interface (ResultCallback). | |
| Nenhum | Nenhum | Interrompe o reconhecimento em tempo real.Este método bloqueia a thread atual até que o método onComplete ou onError da instância ResultCallback seja chamado. | |
| code: Código de fechamento WebSocketreason: Motivo do fechamentoEstes dois parâmetros podem ser configurados de acordo com a documentação The WebSocket Protocol. | true | Após o término da tarefa, feche a conexão WebSocket independentemente de ter ocorrido uma exceção, para evitar vazamentos de conexão. Para informações sobre como reutilizar conexões para melhorar a eficiência, consulte Optimize Paraformer real-time speech recognition for high concurrency. | |
| Nenhum | requestId | Obtém o requestId da tarefa atual. Disponível após iniciar uma nova tarefa com call ou streamingCall.Este método está disponível a partir da versão 2.18.0 do SDK. | |
| Nenhum | Atraso do primeiro pacote | Obtém o atraso do primeiro pacote, que é a latência desde o envio do primeiro pacote de áudio até o recebimento do primeiro resultado de reconhecimento. Use após a conclusão da tarefa. Este método está disponível a partir da versão 2.18.0 do SDK. | |
| Nenhum | Atraso do último pacote | Obtém o atraso do último pacote, que é a latência desde o envio do comando stop até o recebimento do último resultado de reconhecimento. Use após a conclusão da tarefa.Este método está disponível a partir da versão 2.18.0 do SDK. |
Interface de callback (ResultCallback)
Durante bidirectional streaming calls, o servidor retorna informações e dados importantes do processo ao cliente por callbacks. Implemente os métodos de callback para lidar com as informações ou dados retornados pelo servidor.
Os métodos de callback são implementados estendendo a classe abstrata ResultCallback. Ao estender esta classe abstrata, especifique o tipo genérico como RecognitionResult. RecognitionResult encapsula a estrutura de dados retornada pelo servidor.
Como o Java suporta reutilização de conexão, não existem callbacks onClose ou onOpen.
Exemplo
Exemplo
| Interface/Método | Parâmetro | Valor de retorno | Descrição |
|---|---|---|---|
result: Real-time recognition result (RecognitionResult) | Nenhum | Chamado quando o servidor envia uma resposta. | |
| Nenhum | Nenhum | Chamado quando a tarefa é concluída. | |
e: Informações da exceção | Nenhum | Chamado quando ocorre uma exceção. |
Resposta
Resultado de reconhecimento em tempo real (RecognitionResult)
RecognitionResult representa o resultado de uma sessão de reconhecimento em tempo real.
| Interface/Método | Parâmetro | Valor de retorno | Descrição |
|---|---|---|---|
| Nenhum | requestId | Obtém o requestId. | |
| Nenhum | Se é uma frase completa, ou seja, se um limite de frase foi atingido | Determina se a frase fornecida terminou. | |
| Nenhum | Sentence information (Sentence) | Obtém informações da frase, incluindo timestamps e texto. |
Informações da frase (Sentence)
| Interface/Método | Parâmetro | Valor de retorno | Descrição |
|---|---|---|---|
| Nenhum | Tempo de início da frase em ms | Retorna o tempo de início da frase. | |
| Nenhum | Tempo de término da frase em ms | Retorna o tempo de término da frase. | |
| Nenhum | Texto reconhecido | Retorna o texto reconhecido. | |
| Nenhum | Lista de Word timestamp information (Word) | Retorna informações de timestamp no nível de palavra. | |
| Nenhum | Sentimento da frase atual | Retorna o sentimento da frase atual:
| |
| Nenhum | Confiança do sentimento da frase atual | Retorna a confiança do sentimento da frase atual. Intervalo de valores: [0,0, 1,0]. Um valor maior indica maior confiança.O reconhecimento de sentimento segue estas restrições:
|
Informações de timestamp de palavra (Word)
| Interface/Método | Parâmetro | Valor de retorno | Descrição |
|---|---|---|---|
| Nenhum | Tempo de início da palavra em ms | Retorna o tempo de início da palavra. | |
| Nenhum | Tempo de término da palavra em ms | Retorna o tempo de término da palavra. | |
| Nenhum | Palavra | Retorna a palavra reconhecida. | |
| Nenhum | Pontuação | Retorna a pontuação. |
Códigos de erro
Se encontrar erros, consulte Error codes para solução de problemas.
Se o problema persistir, junte-se à comunidade de desenvolvedores para relatar seu problema e forneça o Request ID para investigação adicional.
Mais exemplos
Para mais exemplos, consulte o GitHub.
FAQ
Perguntas sobre recursos
P: Como manter uma conexão longa com o servidor durante silêncio prolongado?
Defina o parâmetro de solicitação heartbeat como true e envie continuamente áudio silencioso para o servidor.
Áudio silencioso refere-se a arquivos de áudio ou fluxos de dados que não contêm sinal sonoro. Áudio silencioso pode ser gerado por vários métodos, como usar software de edição de áudio como Audacity ou Adobe Audition, ou por ferramentas de linha de comando como FFmpeg.
P: Como converter áudio para um formato suportado?
Utilize a ferramenta FFmpeg. Para mais usos, consulte o site oficial do FFmpeg.
P: É possível visualizar o intervalo de tempo de cada frase?
Sim. Os resultados do reconhecimento de fala incluem os timestamps de início e fim de cada frase, que podem ser usados para determinar o intervalo de tempo de cada frase.
P: Como reconhecer um arquivo local (áudio gravado)?
Existem duas maneiras de reconhecer arquivos locais:
-
Passar o caminho do arquivo local diretamente: Este método obtém o resultado completo do reconhecimento apenas após todo o reconhecimento terminar, não sendo adequado para cenários que exigem feedback imediato.
Consulte Non-streaming call. Passe o caminho do arquivo para o método
callda Recognition class para reconhecer diretamente o arquivo gravado. -
Converter o arquivo local em um fluxo binário para reconhecimento: Este método reconhece o arquivo enquanto transmite os resultados de reconhecimento, adequado para cenários que exigem feedback imediato.
- Consulte Bidirectional streaming: callback-based. Use o método
sendAudioFrameda Recognition class para enviar o fluxo binário ao servidor para reconhecimento. - Consulte Bidirectional streaming: Flowable-based. Use o método
streamCallda Recognition class para enviar o fluxo binário ao servidor para reconhecimento.
- Consulte Bidirectional streaming: callback-based. Use o método
Solução de problemas
P: O que causa falha no reconhecimento de fala (sem resultados de reconhecimento)?
-
Verifique se o formato de áudio (
format) e a taxa de amostragem (sampleRate/sample_rate) nos parâmetros de solicitação estão definidos corretamente e cumprem as restrições de parâmetros. A seguir estão exemplos comuns de erros:- A extensão do arquivo de áudio é .wav, mas o formato real é MP3, e o parâmetro de solicitação
formatestá definido como mp3 (configuração incorreta de parâmetro). - A taxa de amostragem do áudio é 3600 Hz, mas o parâmetro de solicitação
sampleRate/sample_rateestá definido como 48000 (configuração incorreta de parâmetro).
- A extensão do arquivo de áudio é .wav, mas o formato real é MP3, e o parâmetro de solicitação
-
Ao usar o modelo
paraformer-realtime-v2, verifique se o idioma definido emlanguage_hintscorresponde ao idioma real do áudio. Por exemplo: O áudio está realmente em chinês, maslanguage_hintsestá definido comoen(inglês). - Se todas as verificações acima forem aprovadas, utilize palavras-chave personalizadas para melhorar a precisão do reconhecimento de palavras específicas.