Todos los productos
Search
Centro de documentos

Alibaba Cloud Model Studio:SDK de Python de Fun-ASR-Realtime

Última actualización: Oct 20, 2026

Este tema describe los parámetros e interfaces del SDK de Python para el modelo de reconocimiento de voz en tiempo real Fun-ASR-Realtime.

Requisitos previos

Inicio rápido

La clase Recognition proporciona interfaces tanto para llamadas sin streaming como de transmisión bidireccional. Elija el método de llamada que se adapte a sus necesidades:

  • Llamada sin streaming: Reconoce un archivo local y devuelve el resultado completo en una sola respuesta. Adecuado para procesar audio pregrabado.
  • Llamada de transmisión bidireccional: Reconoce un flujo de audio directamente y genera resultados en tiempo real. El flujo de audio puede provenir de un dispositivo externo, como un micrófono, o leerse desde un archivo local. Adecuado para escenarios que requieren retroalimentación inmediata.

Llamada sin transmisión

Envíe una única tarea de reconocimiento de voz en tiempo real y obtenga el resultado del reconocimiento de forma síncrona pasando un archivo local.

Instancie una clase Recognition, vincule unos parámetros de solicitud y llame a call para ejecutar el reconocimiento o la traducción y obtener el resultado final del reconocimiento (RecognitionResult).

from http import HTTPStatus
import dashscope
from dashscope.audio.asr import Recognition
import os

# The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
# If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

recognition = Recognition(model='fun-asr-realtime',
                          format='wav',
                          sample_rate=16000,
                          callback=None)
result = recognition.call('{YOUR_AUDIO_FILE}')
if result.status_code == HTTPStatus.OK:
    print('Recognition result:')
    print(result.get_sentence())
else:
    print('Error: ', result.message)

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Llamada de transmisión bidireccional

Envíe una única tarea de reconocimiento de voz en tiempo real y transmita los resultados del reconocimiento en tiempo real implementando la interfaz de callback.

  1. Iniciar el reconocimiento de voz en streaming.

    Instancie una clase Recognition, vincule unos parámetros de solicitud y una interfaz de callback (RecognitionCallback), y llame al método start para iniciar el reconocimiento de voz en streaming.

  2. Transmitir el audio.

    Llame al método send_audio_frame de la clase Recognition en un bucle para enviar el flujo de audio binario al servidor en segmentos. El flujo se lee desde un archivo local o un dispositivo, como un micrófono.

    Mientras se envía el audio, el servidor devuelve resultados de reconocimiento al cliente en tiempo real a través del método on_event de la interfaz de callback (RecognitionCallback).

    Envíe aproximadamente 100 ms de audio por cuadro, y mantenga cada cuadro entre 1 KB y 16 KB.

  3. Finalizar la tarea.

    Llame al método stop de la clase Recognition para finalizar el reconocimiento de voz.

    Este método bloquea el hilo actual hasta que se active el callback on_complete o on_error de la interfaz de callback (RecognitionCallback).

import os
import signal  # for keyboard events handling (press "Ctrl+C" to terminate recording)
import sys

import dashscope
import pyaudio
from dashscope.audio.asr import *

mic = None
stream = None

# Set recording parameters
sample_rate = 16000  # sampling rate (Hz)
channels = 1  # mono channel
dtype = 'int16'  # data type
format_pcm = 'pcm'  # the format of the audio data
block_size = 3200  # number of frames per buffer

# Real-time speech recognition callback
class Callback(RecognitionCallback):
    def on_open(self) -> None:
        global mic
        global stream
        print('RecognitionCallback open.')
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)

    def on_close(self) -> None:
        global mic
        global stream
        print('RecognitionCallback close.')
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

    def on_complete(self) -> None:
        print('RecognitionCallback completed.')  # recognition completed

    def on_error(self, message) -> None:
        print('RecognitionCallback task_id: ', message.request_id)
        print('RecognitionCallback error: ', message.message)
        # Stop and close the audio stream if it is running
        if 'stream' in globals() and stream.active:
            stream.stop()
            stream.close()
        # Forcefully exit the program
        sys.exit(1)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print('RecognitionCallback text: ', sentence['text'])
            if RecognitionResult.is_sentence_end(sentence):
                print(
                    'RecognitionCallback sentence end, request_id:%s, usage:%s'
                    % (result.get_request_id(), result.get_usage(sentence)))

def signal_handler(sig, frame):
    print('Ctrl+C pressed, stop recognition ...')
    # Stop recognition
    recognition.stop()
    print('Recognition stopped.')
    print(
        '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
        .format(
            recognition.get_last_request_id(),
            recognition.get_first_package_delay(),
            recognition.get_last_package_delay(),
        ))
    # Forcefully exit the program
    sys.exit(0)

# main function
if __name__ == '__main__':
    # The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
    # If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
    dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

    # The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
    dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

    # Create the recognition callback
    callback = Callback()

    # Call recognition service by async mode, you can customize the recognition parameters, like model, format,
    # sample_rate
    recognition = Recognition(
        model='fun-asr-realtime',
        format=format_pcm,
        # 'pcm'、'wav'、'opus'、'speex'、'aac'、'amr', you can check the supported formats in the document
        sample_rate=sample_rate,
        # support 8000, 16000
        callback=callback)

    # Start recognition
    recognition.start()

    signal.signal(signal.SIGINT, signal_handler)
    print("Press 'Ctrl+C' to stop recording and recognition...")
    # Create a keyboard listener until "Ctrl+C" is pressed

    while True:
        if stream:
            data = stream.read(3200, exception_on_overflow=False)
            recognition.send_audio_frame(data)
        else:
            break

    recognition.stop()
import os
import time
import dashscope
from dashscope.audio.asr import *

# The API Key differs between the Singapore and Beijing regions. Get an API Key: https://www.alibabacloud.com/help/model-studio/get-api-key
# If you have not configured the environment variable, replace the following line with your Model Studio API Key: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')

# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_websocket_api_url='wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'

from datetime import datetime

def get_timestamp():
    now = datetime.now()
    formatted_timestamp = now.strftime("[%Y-%m-%d %H:%M:%S.%f]")
    return formatted_timestamp

class Callback(RecognitionCallback):
    def on_complete(self) -> None:
        print(get_timestamp() + ' Recognition completed')  # recognition complete

    def on_error(self, message: str) -> None:
        print('Error occurred: ', message)
        print('Error details: ', message)
        exit(0)

    def on_event(self, result: RecognitionResult) -> None:
        sentence = result.get_sentence()
        if 'text' in sentence:
            print(get_timestamp() + ' RecognitionCallback text: ', sentence['text'])
        if RecognitionResult.is_sentence_end(sentence):
            print(get_timestamp() +
                  'RecognitionCallback sentence end, request_id:%s, usage:%s'
                  % (result.get_request_id(), result.get_usage(sentence)))

callback = Callback()

recognition = Recognition(model='fun-asr-realtime',
                          format='wav',
                          sample_rate=16000,
                          callback=callback)

try:
    audio_data: bytes = None
    f = open("{YOUR_AUDIO_FILE}", 'rb')
    if os.path.getsize("{YOUR_AUDIO_FILE}"):
        # Read all the file data into the buffer at once
        file_buffer = f.read()
        f.close()
        print("Start Recognition")
        recognition.start()

        # Send 3200 bytes from the buffer at a time
        buffer_size = len(file_buffer)
        offset = 0
        chunk_size = 3200

        while offset < buffer_size:
            # Calculate the size of the data chunk to send this time
            remaining_bytes = buffer_size - offset
            current_chunk_size = min(chunk_size, remaining_bytes)

            # Extract the current data chunk from the buffer
            audio_data = file_buffer[offset:offset + current_chunk_size]

            # Send the audio data frame
            recognition.send_audio_frame(audio_data)
            # Update the offset
            offset += current_chunk_size

            # Add a delay to simulate real-time transmission
            time.sleep(0.1)

        recognition.stop()
    else:
        raise Exception(
            'The supplied file was empty (zero bytes long)')
except Exception as e:
    raise e

print(
    '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
    .format(
        recognition.get_last_request_id(),
        recognition.get_first_package_delay(),
        recognition.get_last_package_delay(),
    ))

Parámetros de solicitud

Establezca los parámetros de solicitud a través del constructor (init) de la clase Recognition.

ParámetroTipoObligatorioDescripción
modelstrSíEl nombre del modelo.
sample_rateintSíLa tasa de muestreo, en Hz.

Valores válidos: Los modelos de 8 kHz solo admiten 8000 Hz; otros modelos admiten cualquier frecuencia de muestreo.

formatstrSíEl formato de audio.

Valores válidos:

  • pcm
  • wav
  • mp3
  • opus
  • speex
  • aac
  • amr

Importanteopus/speex: Debe usar encapsulación Ogg.

wav: Debe usar codificación PCM.

amr: Solo se admite el tipo AMR-NB.

vocabulary_idstrNoEl ID de una lista de palabras calientes precompilada.

Genere este ID con antelación llamando a la API de creación de lista de palabras clave. Pase el ID durante el reconocimiento para usar las palabras clave de la lista.

Adecuado para escenarios donde el vocabulario es conocido y relativamente estable, y donde necesita reutilizar la misma lista de palabras en distintas solicitudes.

Para obtener detalles sobre el uso, consulte Palabras clave precompiladas.

max_sentence_silenceintNoEl umbral de silencio del VAD para la segmentación, en ms. Cuando el silencio posterior a un segmento de voz supera este umbral, el sistema determina que la oración ha finalizado.

Valor predeterminado: 1300.

Valores válidos: [200, 6000].

multi_threshold_mode_enabledboolNo

Indica si se habilita el modo de umbral múltiple. Cuando está habilitado, evita que la segmentación VAD produzca segmentos demasiado largos.

Predeterminado: False.

punctuation_prediction_enabledboolNoSi se agregan automáticamente signos de puntuación a los resultados del reconocimiento:
  • True (predeterminado): Sí. Este valor no se puede cambiar.
heartbeatboolNoSi se habilitan los paquetes de latido.

Predeterminado: False.

  • True: Mantiene activa la conexión con el servidor mientras se envía audio silencioso continuamente.
  • False (predeterminado): Incluso cuando se envía audio silencioso de forma continua, la conexión expira y se cierra después de un período de tiempo.

El audio silencioso se refiere al contenido en un archivo de audio o flujo de datos que no contiene señal de sonido. Puede generar audio silencioso de varias maneras, como utilizando software de edición de audio como Audacity o Adobe Audition, o utilizando una herramienta de línea de comandos como FFmpeg.

Este campo requiere la versión 1.23.1 del SDK o posterior.

language_hintslist[str]NoEl idioma del audio a reconocer. No hay valor predeterminado; si no se establece, el modelo detecta el idioma automáticamente.

Puede establecer 1 valor. Si establece más, solo el primer valor surte efecto.

Haga clic para ver los códigos de idioma admitidos

  • fun-asr-realtime:

    • zh: Chino
    • en: Inglés
    • ja: Japonés
    • ko: Coreano
    • vi: Vietnamita
    • th: Tailandés
    • id: Indonesio
    • ms: Malayo
    • tl: Filipino
    • hi: Hindi
    • ar: Árabe
    • fr: Francés
    • de: Alemán
    • es: Español
    • pt: Portugués
    • ru: Ruso
    • it: Italiano
    • nl: Neerlandés
    • sv: Sueco
    • da: Danés
    • fi: Finés
    • no: Noruego
    • el: Griego
    • pl: Polaco
    • cs: Checo
    • hu: Húngaro
    • ro: Rumano
    • bg: Búlgaro
    • hr: Croata
    • sk: Eslovaco
  • fun-asr-realtime-2026-02-28:

    • zh: Chino
    • en: Inglés
    • ja: Japonés
  • fun-asr-flash-8k-realtime, fun-asr-flash-8k-realtime-2026-01-28:

    • zh: Chino
speech_noise_thresholdfloatNoEl umbral para distinguir el habla del ruido, utilizado para ajustar la sensibilidad de la Detección de Actividad de Voz (VAD).

Valores válidos: [-1.0, 1.0].

Descripciones de valores:

  • Cuanto más cerca esté el valor de -1: El umbral de ruido disminuye, por lo que es más probable que el ruido se reconozca como habla, lo que puede causar que se transcriba más ruido.
  • Cuanto más cerca esté el valor de +1: El umbral de ruido aumenta, por lo que es más probable que el habla se juzgue erróneamente como ruido, lo que puede causar que se filtre parte del habla.

Este es un parámetro de configuración avanzada. Ajustarlo puede afectar significativamente los resultados del reconocimiento. Recomendaciones:

  • Pruebe y verifique exhaustivamente los resultados antes de ajustar.
  • Ajuste en incrementos pequeños según el entorno de audio real (se recomienda un paso de 0.1).
special_word_filterstrNoEspecifica las palabras sensibles que se deben procesar durante el reconocimiento de voz y permite configurar diferentes métodos de procesamiento para cada una. Para más detalles, consulte Filtrado de palabras sensibles.
callbackRecognitionCallbackNoInterfaz de callback (RecognitionCallback).

Pase los siguientes parámetros como argumentos de palabra clave al método call o start de la instancia Recognition.

ParámetroTipoObligatorioDescripción
raw_inputdictNoEl objeto de entrada utilizado para pasar el contexto de la conversación. La mejora de contexto aumenta la precisión del reconocimiento de términos específicos del dominio. Para su uso, consulte Inicio rápido.

ImportanteEl parámetro context solo es compatible con los modelos fun-asr-realtime.

El diccionario debe incluir una clave context cuyo valor sea una lista de mensajes (list[dict]). Cada mensaje contiene los siguientes campos:

  • role (str, obligatorio): El rol del mensaje. user representa los resultados de reconocimiento de turnos anteriores del usuario o una lista de palabras específica del dominio. assistant representa las respuestas del modelo de lenguaje grande de turnos anteriores.
  • content (list[dict], obligatorio): La lista del contenido del mensaje. Cada elemento contiene type (str; establecido en input_text cuando el rol es user, y text cuando el rol es assistant) y text (str, el contenido de texto).

ImportanteLos mensajes de contexto de los tipos input_text y text están limitados a 5 mensajes cada uno. Cuando se supera el límite, solo se conservan los 5 mensajes más recientes. La longitud total del texto por turno de contexto no puede exceder los 400 caracteres, y cualquier exceso se trunca desde el final.

ImportanteCuando pasa contexto, los mensajes en context deben seguir un orden específico: los mensajes de contexto deben organizarse por turno de conversación y, dentro de cada turno, el mensaje user (tipo input_text) debe preceder a su mensaje assistant correspondiente (tipo text).

NotaEste campo requiere la versión 1.25.23 del SDK o posterior.

# Build the input to pass in
      input_context = {
          "context": [
              {
                  "role": "user",
                  "content": [
                      {
                          "type": "input_text",
                          "text": "Hello there"
                      }
                  ]
              },
              {
                  "role": "assistant",
                  "content": [
                      {
                          "type": "text",
                          "text": "Hello, I am Qwen. How can I help you?"
                      }
                  ]
              }
          ]
      }

      # Pass it in through the raw_input parameter
      recognition.start(raw_input=input_context)
      # Or
      recognition.call(raw_input=input_context)

Interfaces clave

Clase Recognition

Importe Recognition con from dashscope.audio.asr import *.

Método miembroFirma del métodoDescripción
call
def call(self, file: str, phrase_id: str = None, **kwargs) -> RecognitionResult
Una llamada sin streaming basada en un archivo local. Este método bloquea el hilo actual hasta que se lee todo el audio y requiere permiso de lectura en el archivo.

El resultado del reconocimiento se devuelve como un objeto RecognitionResult.

start
def start(self, phrase_id: str = None, **kwargs)
Inicia el reconocimiento de voz.

Un reconocimiento en tiempo real basado en callbacks. Este método no bloquea el hilo actual. Úselo junto con send_audio_frame y stop.

send_audio_frame
def send_audio_frame(self, buffer: bytes)
Envía audio. Mantenga cada cuadro de audio enviado ni demasiado grande ni demasiado pequeño: aproximadamente 100 ms por cuadro, entre 1 KB y 16 KB.

Los resultados del reconocimiento se obtienen a través del método on_event de la interfaz de callback (RecognitionCallback).

stop
def stop(self)
Detiene el reconocimiento de voz. Bloquea hasta que el servidor termina de reconocer todo el audio recibido y luego finaliza la tarea.
get_last_request_id
def get_last_request_id(self)
Obtiene el request_id. Disponible después de llamar al constructor (se crea el objeto).
get_first_package_delay
def get_first_package_delay(self)
Obtiene el retraso del primer paquete: la latencia desde el envío del primer paquete de audio hasta la recepción del primer resultado de reconocimiento. Úselo después de que la tarea se complete.
get_last_package_delay
def get_last_package_delay(self)
Obtiene el retraso del último paquete: el tiempo desde el envío del comando stop hasta la recepción del último resultado de reconocimiento. Úselo después de que la tarea se complete.
get_response
def get_response(self)
Obtiene el último mensaje. Úselo para recuperar un error de tarea fallida.

Interfaz de callback (RecognitionCallback)

Durante una llamada de transmisión bidireccional, el servidor devuelve información clave del proceso y datos al cliente a través de callbacks. Implemente los métodos de callback para manejar la información y los datos devueltos por el servidor.

class Callback(RecognitionCallback):
    def on_open(self) -> None:
        print('Connection established')

    def on_event(self, result: RecognitionResult) -> None:
        # Implement the logic to receive recognition results
        pass

    def on_complete(self) -> None:
        print('Task completed')

    def on_error(self, message: str) -> None:
        print('An error occurred:', message)

    def on_close(self) -> None:
        print('Connection closed')

callback = Callback()
MétodoParámetroValor de retornoDescripción
def on_open(self) -> None
NoneNoneSe llama inmediatamente después de establecer la conexión con el servidor.
def on_event(self, result: RecognitionResult) -> None
result: Resultado del reconocimiento (RecognitionResult)NoneSe llama cuando el servidor tiene una respuesta.
def on_complete(self) -> None
NoneNoneSe llama después de que se devuelven todos los resultados del reconocimiento.
def on_error(self, message: str) -> None
result: Resultado del reconocimiento (RecognitionResult)NoneSe llama cuando ocurre un error.
def on_close(self) -> None
NoneNoneSe llama después de que el servidor cierra la conexión.

Respuesta

Resultado del reconocimiento (RecognitionResult)

RecognitionResult representa el resultado de un único reconocimiento en tiempo real en una llamada de transmisión bidireccional, o el resultado de una llamada sin streaming.

Método miembroFirma del métodoDescripción
get_sentence
def get_sentence(self) -> Union[Dict[str, Any], List[Any]]
Obtiene la oración reconocida actual y su información de marcas de tiempo. Un callback devuelve una sola oración, por lo que este método devuelve Dict[str, Any].

Para más detalles, consulte Oración (Sentence).

get_request_id
def get_request_id(self) -> str
Obtiene el request_id de la solicitud.
is_sentence_end
@staticmethod
def is_sentence_end(sentence: Dict[str, Any]) -> bool
Determina si la oración dada ha terminado. Este método verifica si el campo end_time en sentence es None: un valor distinto de None end_time indica que la oración ha terminado. Llámelo como RecognitionResult.is_sentence_end(sentence), donde sentence es el dict de oración única devuelto por get_sentence(), no un campo booleano en una instancia de Sentence.

Información de la oración (Sentence)

Los miembros de la clase Sentence son los siguientes:

ParámetroTipoDescripción
begin_timeintTiempo de inicio de la oración, en ms.
end_timeintTiempo de fin de la oración, en ms.
textstrTexto reconocido.
wordsUna lista de Información de marcas de tiempo a nivel de palabra (Word)Información de marcas de tiempo a nivel de palabra.

Información de marcas de tiempo a nivel de palabra (Word)

Los miembros de la clase Word son los siguientes:

ParámetroTipoDescripción
begin_timeintTiempo de inicio de la palabra, en ms.
end_timeintTiempo de fin de la palabra, en ms.
textstrLa palabra.
punctuationstrLa puntuación.

Códigos de error

Si encuentra errores, consulte Códigos de error para solucionar problemas.

Si el problema persiste, únase a la comunidad de desarrolladores que aparece en el repositorio de muestras del SDK de voz para informar su problema y proporcionar el ID de solicitud para una investigación más detallada.

FAQ

Funcionalidades

P: ¿Cómo mantengo activa la conexión durante largos períodos de silencio?

Establezca el parámetro de solicitud heartbeat en true y continúe enviando audio silencioso al servidor.

El audio silencioso es contenido en un archivo o flujo de audio que no contiene ninguna señal de sonido. Puede generar audio silencioso de varias maneras, por ejemplo, utilizando software de edición de audio como Audacity o Adobe Audition, o herramientas de línea de comandos como FFmpeg.

P: ¿Cómo convierto el audio a un formato compatible?

Utilice FFmpeg. Para más usos, consulte el sitio web oficial de FFmpeg.

# Basic conversion command (all-purpose template)
# -i, purpose: input file path, example value: audio.wav
# -c:a, purpose: audio codec, example values: aac, libmp3lame, pcm_s16le
# -b:a, purpose: bitrate (audio quality control), example values: 192k, 320k
# -ar, purpose: sample rate, example values: 44100 (CD), 48000, 16000
# -ac, purpose: number of channels, example values: 1 (mono), 2 (stereo)
# -y, purpose: overwrite an existing file (no value needed)
ffmpeg -i input_audio.ext -c:a codec_name -b:a bitrate -ar sample_rate -ac channels output.ext

# For example: WAV to MP3 (keep the original quality)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# For example: MP3 to WAV (16-bit PCM standard format)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# For example: M4A to AAC (extract or convert Apple audio)
ffmpeg -i input.m4a -c:a copy output.aac  # Extract directly without re-encoding
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # Re-encode to improve quality
# For example: FLAC lossless to Opus (high compression)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus

P: ¿Cómo reconozco un archivo local (grabación)?

Hay dos formas de reconocer un archivo local:

  • Pasar la ruta del archivo local directamente: De esta manera se devuelve el resultado completo solo después de que finaliza el reconocimiento, por lo que no es adecuado para escenarios que necesitan retroalimentación inmediata.

    Consulte Llamada sin streaming y pase la ruta del archivo al método call de la clase Recognition para reconocer la grabación directamente.

  • Convertir el archivo local a un flujo binario para el reconocimiento: De esta manera se reconoce el archivo mientras se transmiten los resultados, por lo que es adecuado para escenarios que necesitan retroalimentación inmediata.

    Consulte Llamada de transmisión bidireccional y envíe el flujo binario al servidor para su reconocimiento a través del método send_audio_frame de la clase Recognition.

Solución de problemas

P: ¿Por qué no se puede reconocer el habla (sin resultado de reconocimiento)?

  1. Verifique que el formato de audio (format) y la tasa de muestreo (sampleRate/sample_rate) en los parámetros de solicitud sean correctos y cumplan con las restricciones de parámetros. Los errores comunes incluyen:

    • El archivo de audio tiene extensión .wav pero en realidad está en formato MP3, mientras que el parámetro de solicitud format está establecido en mp3 (configuración de parámetro incorrecta).
    • La tasa de muestreo del audio es de 3600 Hz, pero el parámetro de solicitud sampleRate/sample_rate está establecido en 48000 (configuración de parámetro incorrecta).

    Utilice la herramienta ffprobe para obtener el contenedor, códec, tasa de muestreo, canales y otra información del audio:

    ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 input.xxx
    
  2. Si none de las verificaciones anteriores revela un problema, agregue palabras clave personalizadas para mejorar el reconocimiento de términos específicos.