Skip to main content

SDK de Python

Los parámetros e interfaces del SDK de Python para reconocimiento de voz en tiempo real de Paraformer.

Alibaba Cloud Model Studio ha lanzado un dominio específico de espacio de trabajo para la región China (Beijing). El nuevo dominio dedicado ofrece un rendimiento superior y mayor estabilidad para las solicitudes de inferencia. Recomendamos migrar de dashscope.aliyuncs.com a {WorkspaceId}.cn-beijing.maas.aliyuncs.com.Reemplace {WorkspaceId} con su ID de espacio de trabajo real. El dominio existente permanece totalmente funcional.
Guía del usuario: Para introducción al modelo y recomendaciones de selección, consulte Reconocimiento de voz en tiempo real - Fun-ASR/Paraformer.

Requisitos previos

Ha activado el servicio y ha seguido los pasos para Obtener una clave de API. Por favor, Configure la clave de API como una variable de entorno en lugar de codificarla directamente en su código para prevenir riesgos de seguridad causados por fugas de código.
Cuando necesite proporcionar acceso temporal a aplicaciones o usuarios externos, o cuando want controlar estrictamente operaciones de alto riesgo como acceder o eliminar datos sensibles, le recomendamos utilizar tokens de autenticación temporal.En comparación con las claves de API a largo plazo, los tokens de autenticación temporal tienen un período de validez corto (60 segundos) y mayor seguridad, lo que los hace adecuados para escenarios de llamadas temporales y reduce eficazmente el riesgo de fuga de claves de API.Uso: En su código, reemplace la clave de API utilizada originalmente para la autenticación con el token de autenticación temporal obtenido.

Lista de modelos

paraformer-realtime-v2 (Recomendado)paraformer-realtime-8k-v2 (Recomendado)
EscenariosTransmisiones en vivo, reuniones y escenarios similaresReconocimiento de audio de 8 kHz en escenarios como servicio al cliente telefónico y correo de voz
Tasa de muestreoCualquiera8kHz
IdiomaChino (incluyendo mandarín y varios dialectos), inglés, japonés, coreano, alemán, francés, rusoDialectos chinos admitidos: Shanghainés, Wu, Minnan, Noreste, Gansu, Guizhou, Henan, Hubei, Hunan, Jiangxi, Ningxia, Shanxi, Shaanxi, Shandong, Sichuan, Tianjin, Yunnan, CantonésChino
Predicción de puntuaciónCompatible de forma predeterminada. No se requiere configuración.Compatible de forma predeterminada. No se requiere configuración.
Normalización inversa de texto (ITN)Compatible de forma predeterminada. No se requiere configuración.Compatible de forma predeterminada. No se requiere configuración.
Vocabulario personalizadoConsulte Personalizar palabras claveConsulte Personalizar palabras clave
Especificar idioma de reconocimientoEspecifique el idioma mediante el parámetro language_hints.No compatible
Reconocimiento de emocionesNo compatible
El reconocimiento de emociones tiene las siguientes restricciones:
  • Se aplica únicamente al modelo paraformer-realtime-8k-v2.
  • Debe desactivar la puntuación semántica (controlada por el parámetro de solicitud semantic_punctuation_enabled). La puntuación semántica está desactivada de forma predeterminada.
  • El resultado del reconocimiento de emociones se muestra únicamente cuando el método is_sentence_end de RecognitionResult devuelve True.
Para obtener los resultados de detección de emociones, recupere la emoción y el nivel de confianza de la emoción de la oración actual de los campos emo_tag y emo_confidence de la información de oración única (Sentence), respectivamente.

Introducción

El recurso principal (client.audio.asr) proporciona interfaces para llamadas sin transmisión y de transmisión bidireccional. Puede seleccionar el método apropiado según sus necesidades:
  • Llamada sin transmisión (recognize_file): Reconoce un archivo local. El SDK envía automáticamente el audio en fragmentos y lleva la tarea hasta su finalización. Es adecuada para procesar audio pregrabado.
  • Llamada de transmisión bidireccional: Reconoce un flujo de audio y genera los resultados en tiempo real. El flujo de audio puede provenir de un dispositivo externo, como un micrófono, o leerse desde un archivo local. Es adecuada para escenarios que requieren retroalimentación inmediata.

Llamada sin streaming

Este método envía una tarea de conversión de voz a texto en tiempo real para un archivo local. El proceso se bloquea hasta que se devuelve el resultado completo de la transcripción.
imagen
Llame al método recognize_file del recurso principal (client.audio.asr) con los parámetros de solicitud y una ruta de archivo local, e itere los eventos del servidor para obtener el RecognitionResult.
import os
import dashscope

# La siguiente configuración corresponde a la región de China (Pekín). Sustituya {WorkspaceId} por el ID real de su espacio de trabajo. El valor de region varía según la región.
client = dashscope.Client(
    # Si no se ha configurado la variable de entorno, sustituya la siguiente línea por su API Key de Model Studio: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="cn-beijing",
)

# Reconocer un archivo de audio local: recognize_file envía automáticamente el audio en fragmentos y lleva la tarea hasta su finalización
for event in client.audio.asr.recognize_file(
        '{YOUR_AUDIO_FILE}',
        model='paraformer-realtime-v2',
        format='wav',
        sample_rate=16000,
        # El parámetro "language_hints" solo es compatible con el modelo paraformer-realtime-v2.
        parameters={'language_hints': ['zh', 'en']}):
    payload = event.get('payload') or {}
    sentence = (payload.get('output') or {}).get('sentence') or {}
    if sentence.get('text') and not sentence.get('heartbeat'):
        print('Recognition result: ', sentence['text'])
recognize_file devuelve los eventos del servidor uno por uno (Dict[str, Any]): el tipo de evento se encuentra en event['header']['event'] y el texto reconocido se encuentra en event['payload']['output']['sentence'] (sentence_end con valor true indica que la oración ha terminado; begin_time / end_time son marcas de tiempo, words contiene marcas de tiempo por palabra, y otros campos se describen en Sentence). Los eventos de latido y de texto vacío también se devuelven y pueden ignorarse según sea necesario.En una sesión de transmisión bidireccional, además de events(), puede utilizar results() para iterar únicamente los fotogramas de resultados de reconocimiento, que devuelven objetos RecognitionResult tipados con los fotogramas de latido filtrados. Para obtener más información, consulte el método get_sentence.

Llamada de transmisión bidireccional

Este método envía una tarea de conversión de voz a texto en tiempo real y transmite los resultados de reconocimiento en tiempo real mediante la iteración de eventos.
imagen
  1. Iniciar reconocimiento de voz por transmisión Llame al método recognize del recurso principal (client.audio.asr) para crear una sesión de reconocimiento con los parámetros de solicitud. Entre en el contexto with (que llama automáticamente al método start para establecer la conexión y enviar la tarea) para iniciar el reconocimiento de voz por transmisión.
  2. Transmisión Llame repetidamente al método send_audio_frame de la sesión de reconocimiento para enviar el flujo de audio binario leído de un archivo local o de un dispositivo (como un micrófono) al servidor en segmentos. El envío y la recepción deben realizarse de forma concurrente: el hilo receptor itera los eventos del servidor mediante la iteración de eventos (events()/results()) para devolver los resultados de reconocimiento al cliente en tiempo real. Se recomienda que la duración de cada segmento de audio enviado sea de aproximadamente 100 milisegundos y que el tamaño de los datos esté entre 1 KB y 16 KB.
  3. Finalizar procesamiento Llame al método stop de la sesión de reconocimiento para detener el reconocimiento de voz. Este método solo notifica al servidor que la entrada ha finalizado; el hilo receptor debe seguir consumiendo events() hasta el evento task-finished para obtener los resultados y estadísticas finales del reconocimiento. Los errores de la capa WebSocket se lanzan como excepciones DashScopeError, que pueden capturarse con try/except en los puntos de envío o recepción.
import os
import signal  # para el manejo de eventos de teclado (presione "Ctrl+C" para terminar la grabación)
import sys

import dashscope
import pyaudio
from concurrent.futures import ThreadPoolExecutor

# La siguiente configuración corresponde a la región de China (Pekín). Sustituya {WorkspaceId} por el ID real de su espacio de trabajo. El valor de region varía según la región.
client = dashscope.Client(
    # Si no se ha configurado la variable de entorno, sustituya la siguiente línea por su API Key de Model Studio: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="cn-beijing",
)

mic = None
stream = None

# Configurar los parámetros de grabación
sample_rate = 16000  # tasa de muestreo (Hz)
channels = 1  # canal mono
dtype = 'int16'  # tipo de datos
format_pcm = 'pcm'  # el formato de los datos de audio
block_size = 3200  # número de fotogramas por búfer

# Receptor de eventos de reconocimiento de voz en tiempo real
def receive_events(rec):
    for event in rec.events():
        payload = event.get('payload') or {}
        sentence = (payload.get('output') or {}).get('sentence') or {}
        if sentence.get('text') and not sentence.get('heartbeat'):
            print('Recognition text: ', sentence['text'])
            if sentence.get('sentence_end'):
                print(
                    'Recognition sentence end, request_id:%s, usage:%s'
                    % (rec.request_id, rec.usage))

def signal_handler(sig, frame):
    print('Ctrl+C pressed, stop recognition ...')
    # Detener el reconocimiento
    recognition.stop()
    print('Recognition stopped.')
    print(
        '[Metric] requestId: {}, first package delay ms: {}, last package delay ms: {}'
        .format(
            recognition.request_id,
            recognition.first_package_delay,
            recognition.last_package_delay,
        ))
    # Forzar la salida del programa
    sys.exit(0)

# función principal
if __name__ == '__main__':
    print('Initializing ...')

    signal.signal(signal.SIGINT, signal_handler)
    print("Press 'Ctrl+C' to stop recording and recognition...")

    # Llamar al servicio de reconocimiento; puede personalizar los parámetros de reconocimiento, como model, format,
    # sample_rate
    with client.audio.asr.recognize(
            model='paraformer-realtime-v2',
            format=format_pcm,
            # 'pcm', 'wav', 'opus', 'speex', 'aac' o 'amr'. Puede consultar los formatos compatibles en la documentación.
            sample_rate=sample_rate,
            # Se admiten 8000 o 16000.
            parameters={'semantic_punctuation_enabled': False},
    ) as recognition:
        # Abrir el micrófono
        mic = pyaudio.PyAudio()
        stream = mic.open(format=pyaudio.paInt16,
                          channels=1,
                          rate=16000,
                          input=True)
        with ThreadPoolExecutor(max_workers=1) as pool:
            receiver = pool.submit(receive_events, recognition)
            try:
                # Enviar audio desde el micrófono hasta que se presione "Ctrl+C"
                while stream:
                    data = stream.read(3200, exception_on_overflow=False)
                    recognition.send_audio_frame(data)
                recognition.stop()
                receiver.result()
            finally:
                # close debe ejecutarse dentro del contexto del pool para desbloquear el receptor
                recognition.close()
        stream.stop_stream()
        stream.close()
        mic.terminate()
        stream = None
        mic = None

Llamadas concurrentes

En Python, debido al Bloqueo Global del Intérprete (GIL), solo un hilo puede ejecutar código Python a la vez (aunque algunas bibliotecas orientadas al rendimiento pueden eliminar esta limitación). Si want aprovechar mejor los recursos informáticos de una computadora multinúcleo, le recomendamos utilizar multiprocessing o concurrent.futures.ProcessPoolExecutor. El uso de subprocesos múltiples puede aumentar significativamente la latencia de llamadas del SDK bajo alta concurrencia.

Parámetros de solicitud

Los parámetros de solicitud se configuran mediante los métodos recognize/recognize_file del recurso principal (client.audio.asr): model, format, sample_rate, vocabulary_id y disfluency_removal_enabled son parámetros con nombre, y los parámetros restantes (como language_hints y semantic_punctuation_enabled) se pasan mediante el diccionario parameters.

Parámetro

Tipo

Predeterminado

Obligatorio

Descripción

model

str

-

Sí

El modelo utilizado para el reconocimiento de voz en tiempo real. Para obtener más información, consulte Lista de modelos.

sample_rate

int

-

Sí

Establecer la tasa de muestreo (en Hz) del audio a reconocer.

Varía según el modelo:

  • paraformer-realtime-v2 admite cualquier tasa de muestreo.

  • paraformer-realtime-8k-v2 solo admite una tasa de muestreo de 8000 Hz.

format

str

-

Sí

Establecer el formato de audio a reconocer.

Formatos de audio admitidos: pcm, wav, mp3, opus, speex, aac, amr.

opus/speex: Debe usar encapsulación Ogg.

wav: Debe estar codificado en PCM.

amr: Solo se admite el tipo AMR-NB.

vocabulary_id

str

-

No

Establezca el ID de palabras clave. Si no se configura, las palabras clave no surtirán efecto. Utilice este campo para establecer el ID de palabras clave en los modelos v2 y posteriores.

En la sesión actual de reconocimiento de voz, se aplicará la información de palabras clave correspondiente a este ID de palabras clave. Para un uso detallado, consulte Palabras clave personalizadas.

disfluency_removal_enabled

bool

False

No

Establecer si se deben filtrar las muletillas:

  • true: Filtrar muletillas

  • false (predeterminado): No filtrar muletillas

language_hints

list[str]

["zh", "en"]

No

Establezca los códigos de idioma para el reconocimiento. Si no puede determinar el idioma con antelación, puede dejar esto sin configurar y el modelo detectará automáticamente el idioma.

Códigos de idioma admitidos actualmente:

  • zh: Chino

  • en: Inglés

  • ja: Japonés

  • yue: Cantonés

  • ko: Coreano

  • de: Alemán

  • fr: Francés

  • ru: Ruso

Este parámetro se aplica únicamente a modelos multilingües. Para obtener más información, consulte Lista de modelos.

semantic_punctuation_enabled

bool

False

No

Establecer si se debe habilitar la segmentación semántica. Deshabilitado por defecto.

  • true: Habilitar la segmentación semántica y deshabilitar la segmentación VAD (Detección de Actividad de Voz).

  • false (predeterminado): Habilitar la segmentación VAD (Detección de Actividad de Voz) y deshabilitar la segmentación semántica.

La segmentación semántica proporciona mayor precisión y es adecuada para escenarios de transcripción de reuniones. La segmentación VAD (Detección de Actividad de Voz) tiene menor latencia y es adecuada para escenarios interactivos.

Al ajustar el parámetro semantic_punctuation_enabled, puede cambiar flexiblemente el método de segmentación del reconocimiento de voz para adaptarse a diferentes escenarios.

Este parámetro solo surte efecto cuando el modelo es v2 o posterior.

max_sentence_silence

int

800

No

Establecer el umbral de duración de silencio (en ms) para la segmentación VAD (Detección de Actividad de Voz).

Cuando la duración del silencio después de un segmento de habla supera este umbral, el sistema determina que la oración ha terminado.

El rango del parámetro es de 200 ms a 6000 ms, con un valor predeterminado de 800 ms.

Este parámetro solo surte efecto cuando el parámetro semantic_punctuation_enabled es false (segmentación VAD) y el modelo es v2 o posterior.

multi_threshold_mode_enabled

bool

False

No

Cuando este interruptor está habilitado (true), evita que la segmentación VAD corte oraciones demasiado largas. Deshabilitado por defecto.

Este parámetro solo surte efecto cuando el parámetro semantic_punctuation_enabled es false (segmentación VAD) y el modelo es v2 o posterior.

punctuation_prediction_enabled

bool

True

No

Establecer si se debe agregar automáticamente puntuación en los resultados de reconocimiento:

  • true (predeterminado): Sí

  • false: No

Este parámetro solo surte efecto cuando el modelo es v2 o posterior.

heartbeat

bool

False

No

Cuando necesite mantener una conexión prolongada con el servidor, use este interruptor para controlar el comportamiento:

  • true: La conexión con el servidor puede mantenerse sin interrupción al enviar continuamente audio silencioso.

  • 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 a archivos de audio o flujos de datos que no contienen señal de sonido. El audio silencioso se puede generar mediante varios métodos, como usar software de edición de audio como Audacity o Adobe Audition, o a través de herramientas de línea de comandos como FFmpeg.

Este parámetro solo surte efecto cuando el modelo es v2 o posterior.

Al utilizar este campo, la versión del SDK debe ser 1.23.1 o posterior.

inverse_text_normalization_enabled

bool

True

No

Establecer si se debe habilitar ITN (Normalización Inversa de Texto).

Habilitado por defecto (true). Cuando está habilitado, los numerales chinos se convierten a numerales arábigos.

Este parámetro solo surte efecto cuando el modelo es v2 o posterior.

Interfaces clave

Recurso principal (client.audio.asr)

El reconocimiento de voz en tiempo real se expone mediante el recurso client.audio.asr: recognize crea una sesión de reconocimiento por transmisión bidireccional (Recognition) y recognize_file reconoce un archivo local en una sola llamada.
Método miembroFirma del métodoDescripción
recognize
def recognize(self,
              *,
              model: str,
              format: str = "pcm",
              sample_rate: int = 16000,
              vocabulary_id: str = None,
              disfluency_removal_enabled: bool = None,
              diarization_enabled: bool = None,
              parameters: Dict = None,
              input: Dict = None,
              phrase_id: str = None,
              ...) -> Recognition
Crea una sesión de reconocimiento por transmisión bidireccional. La entrada al contexto with llama automáticamente a start para establecer la conexión y enviar la tarea.El envío de audio y el consumo de eventos deben realizarse de forma concurrente (utilícelo junto con send_audio_frame, events()/results() y stop).
recognize_file
def recognize_file(self,
                   path: str,
                   *,
                   model: str,
                   format: str = "pcm",
                   sample_rate: int = 16000,
                   ...) -> Iterator[Dict]
Llamada sin transmisión basada en un archivo local: envía automáticamente el audio en fragmentos y lleva la tarea hasta su finalización, devolviendo los eventos del servidor uno por uno. El archivo que se va a reconocer debe tener permisos de lectura.
start
def start(self)
Inicia el reconocimiento de voz: establece la conexión, envía la tarea y espera el evento task-started. Se llama automáticamente al entrar en el contexto with. El audio solo puede enviarse después de un inicio correcto.
send_audio_frame
def send_audio_frame(self, buffer: bytes)
Envía un flujo de audio. El flujo de audio enviado cada vez no debe ser ni demasiado grande ni demasiado pequeño. Se recomienda que cada paquete de audio tenga una duración de aproximadamente 100 ms y un tamaño entre 1 KB y 16 KB.Puede obtener los resultados de reconocimiento mediante la iteración de eventos (events()/results()).
stop
def stop(self)
Detiene el reconocimiento de voz: solo notifica al servidor que la entrada ha finalizado. El hilo receptor debe seguir consumiendo events() hasta el evento task-finished.
events / results
def events(self) -> Iterator[Dict]
def results(self) -> Iterator[RecognitionResult]
Itera los eventos del servidor: events() devuelve dict de eventos sin procesar (el texto reconocido se encuentra en payload.output.sentence); results() devuelve únicamente los fotogramas de resultados de reconocimiento, en forma de objetos RecognitionResult tipados con los fotogramas de latido filtrados.
close
def close(self)
Cierra la sesión de reconocimiento. Se llama automáticamente al salir del contexto with.
request_id / first_package_delay / last_package_delay
rec.request_id
rec.first_package_delay
rec.last_package_delay
Obtiene el request_id, 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) y el retraso del último paquete (el tiempo transcurrido desde el envío de la instrucción stop hasta la recepción del último resultado de reconocimiento). Utilícelo después de completar la tarea. Los valores siguen siendo legibles después de cerrar la sesión.

Iteración de eventos (events()/results())

Durante una llamada de transmisión bidireccional, el servidor devuelve información clave del proceso y datos al cliente mediante eventos. Debe iterar los events() (dict de eventos sin procesar) o los results() (fotogramas de resultados de reconocimiento tipados) de la sesión en un hilo receptor para procesar la información y los datos devueltos por el servidor.
# Iterar eventos sin procesar: el texto reconocido se encuentra en payload.output.sentence
def receive_events(rec):
    for event in rec.events():
        payload = event.get('payload') or {}
        sentence = (payload.get('output') or {}).get('sentence') or {}
        if sentence.get('text') and not sentence.get('heartbeat'):
            print('Recognized text: ', sentence['text'])


# O iterar únicamente los fotogramas de resultados de reconocimiento (devuelve RecognitionResult, fotogramas de latido filtrados)
def receive_results(rec):
    for result in rec.results():
        sentence = result.get_sentence()
        if sentence and 'text' in sentence:
            print('Recognized text: ', sentence['text'])
Método de evento/iteraciónSalidaValor de retornoDescripción
event["header"]["event"] == "task-started"
Evento task-startedNoneLeído internamente por start(). Se almacena en last_response cuando la llamada a start devuelve y no se vuelve a devolver mediante events().
def events(self) -> Iterator[Dict]
event: un dict de eventos del servidorIteradorDevuelve un evento cada vez que el servidor envía una respuesta. El texto reconocido se encuentra en payload.output.sentence. También pueden devolverse eventos de latido o de texto vacío, que pueden ignorarse según sea necesario. Consuma el iterador de forma continua desde un único hilo receptor y no cree múltiples lectores concurrentes.
def results(self) -> Iterator[RecognitionResult]
result: RecognitionResultIteradorDevuelve únicamente los fotogramas de resultados de reconocimiento (fotogramas de latido filtrados). La iteración termina después de que se hayan devuelto todos los resultados de reconocimiento.
try:
    ...
except DashScopeError as e:
    print(e.code, e.message, e.request_id)
Excepción DashScopeErrorNoneSe lanza en el hilo de envío/recepción cuando se produce una excepción. Puede capturarla con try/except.
event["header"]["event"] == "task-finished"
Evento task-finishedNoneDevuelto por events() después de que el servidor haya completado todo el reconocimiento; la iteración termina entonces. Debe seguir leyendo este evento después de llamar a stop().

Resultados de respuesta

Resultado de reconocimiento (RecognitionResult)

RecognitionResult representa un fotograma de resultado de reconocimiento devuelto al iterar los results() de la sesión. Puede utilizarse tanto en llamadas de transmisión bidireccional como en llamadas sin transmisión. events() devuelve dict de eventos sin procesar; utilice results() si necesita esta vista tipada.
Método miembroFirma del métodoDescripción
get_sentence
def get_sentence(self) -> Union[Dict[str, Any], List[Any]]
Obtiene la oración reconocida actualmente y la información de marcas de tiempo. Este método devuelve un tipo Dict[str, Any] (información de una sola oración).Para obtener más información, consulte Sentence.
request_id
result.request_id
El request_id del evento actual.
is_sentence_end
def is_sentence_end(self) -> bool
Determina si la oración actual ha finalizado (True cuando la oración contiene end_time).

Oración (Sentence)

Los miembros de la clase Sentence son los siguientes:

Parámetro

Tipo

Descripción

begin_time

int

El tiempo de inicio de la oración, en ms.

end_time

int

El tiempo de finalización de la oración, en ms.

text

str

El texto reconocido.

words

Una lista de Información de marcas de tiempo de palabras (Word)

Información de marca de tiempo de palabras.

emo_tag

str

La emoción de la oración actual:

  • positive: Emoción positiva, como felicidad o satisfacción

  • negative: Emoción negativa, como enojo o tristeza

  • neutral: Sin emoción evidente

El reconocimiento de emociones tiene las siguientes restricciones:

  • Se aplica únicamente al modelo paraformer-realtime-8k-v2.

  • Debe desactivar la puntuación semántica (controlada por el parámetro de solicitud semantic_punctuation_enabled). La puntuación semántica está desactivada de forma predeterminada.

  • El resultado del reconocimiento de emociones se muestra únicamente cuando el método is_sentence_end de RecognitionResult devuelve True.

emo_confidence

float

El nivel de confianza de la emoción reconocida para la oración actual. El valor oscila entre 0.0 y 1.0. Un valor mayor indica un nivel de confianza más alto.

El reconocimiento de emociones tiene las siguientes restricciones:

  • Se aplica únicamente al modelo paraformer-realtime-8k-v2.

  • Debe desactivar la puntuación semántica (controlada por el parámetro de solicitud semantic_punctuation_enabled). La puntuación semántica está desactivada de forma predeterminada.

  • El resultado del reconocimiento de emociones se muestra únicamente cuando el método is_sentence_end de RecognitionResult devuelve True.

Información de marcas de tiempo de palabras (Word)

Los miembros de la clase Word son los siguientes:

Parámetro

Tipo

Descripción

begin_time

int

El tiempo de inicio de la palabra, en ms.

end_time

int

El tiempo de finalización de la palabra, en ms.

text

str

La palabra.

punctuation

str

La 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 para reportar su incidencia y proporcione el ID de solicitud para una investigación más detallada.

Más ejemplos

Para más ejemplos, consulte GitHub.

FAQ

Funcionalidades

P: ¿Cómo mantener una conexión prolongada con el servidor durante un silencio prolongado?

Establezca el parámetro de solicitud heartbeat en true y envíe continuamente audio silencioso al servidor. El audio silencioso se refiere a archivos de audio o flujos de datos que no contienen señal de sonido. El audio silencioso se puede generar mediante varios métodos, como usar software de edición de audio como Audacity o Adobe Audition, o a través de herramientas de línea de comandos como FFmpeg.

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

Puede usar la herramienta FFmpeg. Para más usos, consulte el sitio web oficial de FFmpeg.
# Basic conversion command (universal template)
# -i: Input file path. Example: audio.wav
# -c:a: Audio codec. Example: aac, libmp3lame, pcm_s16le
# -b:a: Bitrate (quality control). Example: 192k, 320k
# -ar: Sample rate. Example: 44100 (CD), 48000, 16000
# -ac: Number of channels. Example: 1 (mono), 2 (stereo)
# -y: Overwrite existing file (no value needed)
ffmpeg -i input_audio.ext -c:a codec_name -b:a bitrate -ar sample_rate -ac channels output.ext

# Example: WAV -> MP3 (preserve original quality)
ffmpeg -i input.wav -c:a libmp3lame -q:a 0 output.mp3
# Example: MP3 -> WAV (16-bit PCM standard format)
ffmpeg -i input.mp3 -c:a pcm_s16le -ar 44100 -ac 2 output.wav
# Example: M4A -> AAC (extract/convert Apple audio)
ffmpeg -i input.m4a -c:a copy output.aac  # Direct extraction without re-encoding
ffmpeg -i input.m4a -c:a aac -b:a 256k output.aac  # Re-encode for higher quality
# Example: FLAC lossless -> Opus (high compression)
ffmpeg -i input.flac -c:a libopus -b:a 128k -vbr on output.opus
P: ¿Admite ver el rango de tiempo para cada oración?
Sí. Los resultados del reconocimiento de voz incluyen las marcas de tiempo de inicio y fin para cada oración, las cuales se pueden utilizar para determinar el rango de tiempo de cada oración.

P: ¿Cómo reconozco un archivo local (archivo de audio grabado)?

Hay dos formas de reconocer un archivo local:
  • Pasar directamente la ruta del archivo local: Este método devuelve el resultado completo del reconocimiento después de procesar totalmente el archivo. No es adecuado para escenarios que requieren retroalimentación inmediata. Llame al método recognize_file del recurso principal (client.audio.asr) con la ruta del archivo para reconocer directamente el archivo de audio grabado. Para obtener más información, consulte Llamada sin transmisión.
  • Convertir el archivo local en un flujo binario para su reconocimiento: Este método devuelve los resultados de reconocimiento como un flujo mientras se procesa el archivo. Es adecuado para escenarios que requieren retroalimentación inmediata. Puede utilizar el método send_audio_frame de la sesión de reconocimiento para enviar un flujo binario al servidor para su reconocimiento. Para obtener más información, consulte llamada de transmisión bidireccional.

Solución de problemas

P: ¿Qué causa el fallo al reconocer el habla (sin resultados de reconocimiento)?

  1. Verifique si el formato de audio (format) y la frecuencia de muestreo (sampleRate/sample_rate) en los parámetros de solicitud están configurados correctamente y cumplen con las restricciones de parámetros. Los siguientes son ejemplos comunes de errores:
    • La extensión del archivo de audio es .wav, pero el formato real es MP3, y el parámetro de solicitud format está configurado como wav (configuración de parámetro incorrecta).
    • La frecuencia de muestreo del audio es de 3600 Hz, pero el parámetro de solicitud sampleRate/sample_rate está configurado en 48000 (configuración de parámetro incorrecta).
    Puede utilizar la herramienta ffprobe para obtener información sobre el contenedor, códec, frecuencia de muestreo, canales y otros detalles 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
  1. Al utilizar el modelo paraformer-realtime-v2, verifique si el idioma configurado en language_hints coincide con el idioma real del audio. Por ejemplo: El audio está realmente en chino, pero language_hints está configurado como en (inglés).
  2. Si todas las comprobaciones anteriores son correctas, puede usar palabras clave personalizadas para mejorar la precisión del reconocimiento de palabras específicas.

P: ¿Cómo soluciono la falta de resultados de reconocimiento causada por un parámetro de formato de audio incorrecto?

format es obligatorio y debe coincidir con el formato de audio real. Por ejemplo, para un archivo de audio MP3 con extensión .wav, configure format='mp3'.
  1. Verifique el formato de audio real: Utilice ffprobe para inspeccionar el contenedor de audio, el códec, la frecuencia de muestreo y los canales.
    ffprobe -v error -show_entries format=format_name -show_entries stream=codec_name,sample_rate,channels -of default=noprint_wrappers=1 your_audio_file
    
  2. Configure los parámetros de solicitud: Establezca format en el formato de audio real. Configure sample_rate en la frecuencia de muestreo real y asegúrese de que cumpla con los requisitos del modelo que utiliza.
  3. Convierta el formato de audio si es necesario: Si necesita audio WAV, utilice el siguiente comando para generar un archivo WAV monoaural codificado en PCM de 16 kHz.
    ffmpeg -i input_file -c:a pcm_s16le -ar 16000 -ac 1 output.wav
    
    Después de la conversión, configure format='wav' y sample_rate=16000.
Cuando utiliza format='wav', el audio debe ser un archivo WAV codificado en PCM.