QwenCloudBRASIL
Tradução de apoio para consulta. Código e identificadores técnicos preservados. Consultar referência original ↗

SDK do LiveTranslate para Python

SDK Python do LiveTranslate

Use o DashScope SDK para Python para chamar Qwen-LiveTranslate para tradução de fala em tempo real.

Guia do usuário: Para tutoriais e exemplos completos, consulte Tradução em tempo real.

Pré-requisitos

  1. Instale o SDK. Certifique-se de que a versão do SDK do DashScope seja 1.25.6 ou posterior.
  2. Obtenha uma chave API.

Parâmetros de solicitação

Defina-os no OmniRealtimeConversation construtor:

Clique para ver o código de amostra.

from dashscope.audio.qwen_omni import (
  OmniRealtimeConversation,
  OmniRealtimeCallback,
  MultiModality,
)
from dashscope.audio.qwen_omni.omni_realtime import TranslationParams

class MyCallback(OmniRealtimeCallback):
  """Callback handler for real-time translation"""
  def __init__(self, conversation=None):
    self.conversation = conversation
    self.handlers = {
      'session.created': self._handle_session_created,
      'response.audio_transcript.done': self._handle_translation_done,
      'response.audio.delta': self._handle_audio_delta,
      'response.done': lambda r: print('======Response Done======'),
      'input_audio_buffer.speech_started': lambda r: print('======Speech Start======'),
      'input_audio_buffer.speech_stopped': lambda r: print('======Speech Stop======'),
    }

  def on_open(self):
    print('Connection opened')

  def on_close(self, code, msg):
    print(f'Connection closed, code: {code}, msg: {msg}')

  def on_event(self, response):
    try:
      handler = self.handlers.get(response['type'])
      if handler:
        handler(response)
    except Exception as e:
      print(f'[Error] {e}')

  def _handle_session_created(self, response):
    print(f"Session created: {response['session']['id']}")

  def _handle_translation_done(self, response):
    print(f"Translation result: {response['transcript']}")

  def _handle_audio_delta(self, response):
    # Process incremental audio data.
    audio_b64 = response.get('delta', '')
    # Decode the audio data for playback or to save it.

conversation = OmniRealtimeConversation(
  model='qwen3.5-livetranslate-flash-realtime',
  url='wss://maas.qwencloudapi.com/api-ws/v1/realtime',
  callback=MyCallback(conversation=None)  # Temporarily pass None. It will be injected later.
)
# Inject self into the callback.
conversation.callback.conversation = conversation
Parâmetro Tipo Obrigatório Descrição
model str Sim O nome do modelo a ser usado. Defina isso como qwen3.5-livetranslate-flash-realtime (recomendado).
callback OmniRealtimeCallback Sim Objeto de retorno de chamada que manipula eventos do servidor.
url str Não Ponto final do serviço: wss://maas.qwencloudapi.com/api-ws/v1/realtime. O padrão é o endpoint DashScope.

Defina-os com OmniRealtimeConversation.update_session:

Clique para ver o código de amostra.

# Set translation parameters
translation_params = TranslationParams(
  language='en',  # Target language
  corpus=TranslationParams.Corpus(
    phrases={
      'Inteligencia Artificial': 'Artificial Intelligence',
      'Aprendizaje Automático': 'Machine Learning'
    }
  )
)

# Update session configuration
conversation.update_session(
  output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
  voice='Tina',
  translation_params=translation_params,
)
Parâmetro Tipo Obrigatório Descrição
output_modalities List[MultiModality] Não Tipos de saída. Padrão: [MultiModality.TEXT, MultiModality.AUDIO]. Valores válidos: [MultiModality.TEXT] (somente texto) ou [MultiModality.TEXT, MultiModality.AUDIO] (texto e áudio).
voice str Não Voz para saída de áudio. Padrão: Tina. Consulte Vozes suportadas.
input_audio_transcription_model str Não Definir como qwen3-asr-flash-realtime para obter resultados de reconhecimento de fala para o idioma de origem.
translation_params TranslationParams Não Configurações de tradução.
enable_turn_detection bool Não Se deve ativar VAD (detecção de atividade de voz). Valor padrão: True, que ativa o modo VAD, onde o servidor detecta automaticamente o início/fim da fala e aciona a tradução. Definir como False para mudar para o modo Manual, onde o cliente envia áudio manualmente por meio do commit método. Para descrições detalhadas dos parâmetros, consulte o turn_detection descrição em Eventos do cliente documento.

Defina-os no TranslationParams construtor:

Clique para ver o código de amostra.

translation_params = TranslationParams(
  language='en',  # Target language code
  corpus=TranslationParams.Corpus(
    phrases={
      'Inteligencia Artificial': 'Artificial Intelligence',  # Source phrase: Target translation
      'Aprendizaje Automático': 'Machine Learning'
    }
  )
)
Parâmetro Tipo Obrigatório Descrição
language str Não Código do idioma de destino. Padrão: en. Consulte Idiomas suportados.
corpus TranslationParams.Corpus Não Configurações de hotword para melhorar a precisão de termos específicos.
corpus.phrases dict Não Mapa de hotword (chave: termo de origem, valor: tradução de destino). Exemplo: {'Inteligencia Artificial': 'Artificial Intelligence'}

Interfaces principais

Classe OmniRealtimeConversation

Importar: from dashscope.audio.qwen_omni import OmniRealtimeConversation

Assinatura do método Evento do servidor (via retorno de chamada) Descrição
def connect(self) -> None: Evento do servidor: Sessão criada; Evento do servidor: Configuração da sessão atualizada Conecta-se ao servidor.
def update_session(self, output_modalities: List[MultiModality], voice: str = None, translation_params: TranslationParams = None, **kwargs) -> None: Evento do servidor: Sessão atualizada Atualiza as configurações da sessão. Ligue logo após conectar. Se não for chamado, os padrões serão aplicados. Veja o OmniRealtimeConversation.update_session parâmetros.
def end_session(self, timeout: int = 20) -> None: sessão.terminada: O servidor finaliza a tradução e encerra a sessão Termina a sessão. O servidor termina qualquer tradução restante antes de fechar.
def append_audio(self, audio_b64: str) -> None: Nenhum Envia áudio codificado em Base64 para o buffer de entrada. O servidor detecta automaticamente os limites da fala e aciona a tradução.
def commit(self) -> None: entrada_audio_buffer.comprometido: Buffer de áudio de entrada confirmado No modo Manual, envie o áudio previamente anexado ao buffer do servidor através do append_audio método. O servidor começa automaticamente a gerar respostas de tradução após o recebimento. No modo VAD, este método não precisa ser chamado, pois o servidor é confirmado automaticamente.
def clear_appended_audio(self) -> None: entrada_audio_buffer.cleared: Buffer de áudio de entrada limpo Limpe os dados de áudio não confirmados no buffer do servidor atual.
def close(self) -> None: Nenhum Interrompe a tarefa e fecha a conexão.
def get_session_id(self) -> str: Nenhum Retorna o ID da sessão atual.
def get_last_response_id(self) -> str: Nenhum Retorna o último ID de resposta.

Interface de retorno de chamada (OmniRealtimeCallback)

O servidor envia eventos ao cliente por meio de retornos de chamada. Herde esta classe e implemente seus métodos para lidar com eles.

Importar: from dashscope.audio.qwen_omni import OmniRealtimeCallback

Assinatura do método Parâmetros Descrição
def on_open(self) -> None: Nenhum Chamado quando a conexão WebSocket é aberta.
def on_event(self, message: dict) -> None: mensagem: evento do servidor Chamado quando um evento do servidor chega.
def on_close(self, close_status_code, close_msg) -> None: close_status_code: Código de status. close_msg: Mensagem de registro. Chamado quando a conexão WebSocket é fechada.

Exemplo completo

Este exemplo grava o áudio do microfone e o traduz em tempo real.

Exemplo de código para tradução em tempo real a partir do microfone

import os
import sys
import base64
import signal
import pyaudio
from dashscope.audio.qwen_omni import (
  OmniRealtimeConversation,
  OmniRealtimeCallback,
  MultiModality,
)
from dashscope.audio.qwen_omni.omni_realtime import TranslationParams

class Callback(OmniRealtimeCallback):
  """Callback handler class for real-time translation"""
  def __init__(self, speaker):
    self.speaker = speaker

  def on_open(self):
    print("[Connection established]")

  def on_close(self, code, msg):
    print(f"[Connection closed] code: {code}, msg: {msg}")

  def on_event(self, response):
    event_type = response.get("type", "")
    if event_type == "input_audio_buffer.speech_started":
      print("====== Speech input detected ======")
    elif event_type == "input_audio_buffer.speech_stopped":
      print("====== Speech input ended ======")
    elif event_type == "conversation.item.input_audio_transcription.completed":
      print(f"[Original text] {response.get('transcript', '')}")
    elif event_type == "response.audio_transcript.done":
      print(f"[Translation result] {response.get('transcript', '')}")
    elif event_type == "response.audio.delta":
      audio_b64 = response.get("delta", "")
      if audio_b64:
        self.speaker.write(base64.b64decode(audio_b64))
    elif event_type == "error":
      print(f"[Error] {response.get('error', {}).get('message', '')}")

def main():
  if not os.environ.get("DASHSCOPE_API_KEY"):
    print("Set the DASHSCOPE_API_KEY environment variable.")
    sys.exit(1)

  pya = pyaudio.PyAudio()

  speaker = pya.open(
    format=pyaudio.paInt16,
    channels=1,
    rate=24000,
    output=True,
    frames_per_buffer=2400
  )

  mic = pya.open(
    format=pyaudio.paInt16,
    channels=1,
    rate=16000,
    input=True,
    frames_per_buffer=1600
  )

  callback = Callback(speaker=speaker)

  conversation = OmniRealtimeConversation(
    model="qwen3.5-livetranslate-flash-realtime",
    url="wss://maas.qwencloudapi.com/api-ws/v1/realtime",
    callback=callback
  )

  conversation.connect()

  translation_params = TranslationParams(
    language="en",
    corpus=TranslationParams.Corpus(
      phrases={
        "Source Term 1": "Target Translation 1",
        "Source Term 2": "Target Translation 2"
      }
    )
  )

  conversation.update_session(
    output_modalities=[MultiModality.TEXT, MultiModality.AUDIO],
    input_audio_transcription_model="qwen3-asr-flash-realtime",
    voice="Tina",
    translation_params=translation_params,
  )

  def on_exit(sig, frame):
    print("\n[Exiting...]")
    mic.stop_stream()
    mic.close()
    speaker.stop_stream()
    speaker.close()
    pya.terminate()
    conversation.end_session()
    conversation.close()
    sys.exit(0)

  signal.signal(signal.SIGINT, on_exit)

  print("[Starting real-time translation] Speak into the microphone. Press Ctrl+C to exit.")

  while True:
    audio_data = mic.read(1600, exception_on_overflow=False)
    conversation.append_audio(base64.b64encode(audio_data).decode("ascii"))

if __name__ == "__main__":
  main()