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
- El servicio está activado y Obtenga una clave API. Para protegerse contra riesgos de seguridad causados por fugas de código, Configure la clave API como una variable de entorno, en lugar de codificarla directamente en su código.
- Instale el SDK de DashScope más reciente.
Inicio rápido
El recurso principal (client.audio.asr) 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 (
recognize_file): Reconoce un archivo local. El SDK envía automáticamente el audio en fragmentos y conduce la tarea hasta su finalización. Adecuado para procesar audio pregrabado. - Llamada de transmisión bidireccional (sesión
recognize): 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
- Llamada de transmisión bidireccional
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.Llame al método
recognize_file del recurso principal (client.audio.asr) para vincular parámetros de solicitud, pasar la ruta del archivo local y iterar los eventos del servidor para obtener el resultado del reconocimiento.Parámetros de solicitud
Establezca los parámetros de solicitud a través de los métodos recognize/recognize_file del recurso principal (client.audio.asr): model, format, sample_rate y vocabulary_id son parámetros con nombre, y el resto de parámetros (como max_sentence_silence y language_hints) se pasan a través del diccionario parameters.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
model | str | Sí | El nombre del modelo. |
sample_rate | int | Sí | 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. |
format | str | Sí | El formato de audio.Valores válidos:
|
vocabulary_id | str | No | El 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_silence | int | No | El 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_enabled | bool | No | 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_enabled | bool | No | Si se agregan automáticamente signos de puntuación a los resultados del reconocimiento:
|
heartbeat | bool | No | Si se habilitan los paquetes de latido.Predeterminado: False.
|
language_hints | list[str] | No | El 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
|
speech_noise_threshold | float | No | El 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:
|
special_word_filter | str | No | Especifica 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. |
input de los métodos recognize/recognize_file.
| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
input | dict | No | El 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 Mejorar la precisión del reconocimiento.El diccionario debe incluir una clave context cuyo valor sea una lista de mensajes (list[dict]). Cada mensaje contiene los siguientes campos:
Este campo requiere la versión 2.0.1 del SDK o posterior. |
Interfaces clave
Recurso principal (client.audio.asr)
El reconocimiento de voz en tiempo real está montado en el recurso client.audio.asr: recognize crea una sesión de reconocimiento de transmisión bidireccional (Recognition) y recognize_file reconoce un archivo local en una sola llamada.
| Método miembro | Firma del método | Descripción |
|---|---|---|
| recognize | Crea una sesión de reconocimiento de transmisión bidireccional. Al entrar en el contexto with se 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 ejecutarse de forma concurrente (úselo junto con send_audio_frame, events()/results() y stop). | |
| recognize_file | Una llamada sin streaming basada en un archivo local: envía automáticamente el audio en fragmentos y conduce la tarea hasta su finalización, entregando los eventos del servidor uno por uno. Este método requiere permiso de lectura en el archivo. | |
| start | Inicia el reconocimiento de voz: establece la conexión, envía la tarea y espera task-started. Se llama automáticamente al entrar en el contexto with. El audio solo se puede enviar después de un inicio correcto. | |
| send_audio_frame | 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 iterando events()/results(). | |
| stop | Detiene el reconocimiento de voz: solo notifica al servidor que la entrada ha terminado. El hilo receptor debe seguir consumiendo events() hasta el evento task-finished. | |
| events / results | Itera los eventos del servidor: events() entrega dict de eventos sin procesar (el texto de reconocimiento está en payload.output.sentence); results() entrega solo los fotogramas de resultados de reconocimiento, devolviendo objetos tipados Resultado del reconocimiento (RecognitionResult) (los fotogramas de latido se filtran). | |
| close | Cierra la sesión de reconocimiento. Se llama automáticamente al salir del contexto with. | |
| request_id / first_package_delay / last_package_delay / last_response | Obtiene el request_id, el retraso del primer paquete (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 (tiempo desde el envío del comando stop hasta el último resultado de reconocimiento). Úselos después de que la tarea se complete. last_response es el último mensaje sin procesar leído correctamente, que puede usar para recuperar errores de tarea fallida. 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 a través de eventos. En un hilo receptor, itere los events() de la sesión (dict de eventos sin procesar) o results() (fotogramas tipados de resultados de reconocimiento) para manejar la información y los datos devueltos por el servidor.
| Evento/método de iteración | Salida | Valor de retorno | Descripción |
|---|---|---|---|
Evento task-started | None | Lo lee internamente start() y se guarda en last_response cuando el inicio retorna. No lo vuelve a entregar events(). | |
event: dict de evento del servidor | Iterador | Entrega eventos cuando el servidor responde. El resultado del reconocimiento está en payload.output.sentence, que puede ser un evento de latido o de texto vacío que las aplicaciones pueden ignorar según sea necesario. Consúmalo desde un único hilo receptor y no cree múltiples lectores concurrentes. | |
result: resultado del reconocimiento (RecognitionResult) | Iterador | Entrega solo los fotogramas de resultados de reconocimiento (los fotogramas de latido se filtran). La iteración termina después de que se devuelven todos los resultados del reconocimiento. | |
Excepción DashScopeError | None | Se lanza en el hilo de envío/recepción cuando ocurre un error. Puede capturarla con try/except. | |
Evento task-finished | None | Lo entrega events() cuando el servidor ha completado todo el reconocimiento, tras lo cual termina la iteración. Debe seguir leyendo este evento después de llamar a stop(). |
Respuesta
Resultado del reconocimiento (RecognitionResult)
RecognitionResult representa un único fotograma de resultado de reconocimiento entregado al iterar los results() de la sesión (utilizable tanto en llamadas de transmisión bidireccional como sin streaming; events() entrega dict de eventos sin procesar; use results() si necesita esta vista tipada).
| Método miembro | Firma del método | Descripción |
|---|---|---|
get_sentence | Obtiene la oración reconocida actual y su información de marcas de tiempo. Este método devuelve Dict[str, Any] (información de una sola oración).Para más detalles, consulte Oración (Sentence). | |
request_id | El request_id correspondiente al evento actual. | |
is_sentence_end | Determina si la oración actual ha finalizado. Este método verifica si el campo end_time en la información de oración única devuelta por get_sentence() es None: un valor end_time distinto de None indica que la oración ha finalizado. |
Información de la oración (Sentence)
Los miembros de la clase Sentence son los siguientes:
| Parámetro | Tipo | Descripción |
|---|---|---|
begin_time | int | Tiempo de inicio de la oración, en ms. |
end_time | int | Tiempo de fin de la oración, en ms. |
text | str | Texto reconocido. |
words | Una 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ámetro | Tipo | Descripción |
|---|---|---|
begin_time | int | Tiempo de inicio de la palabra, en ms. |
end_time | int | Tiempo de fin 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 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.
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 transmisión y pase la ruta del archivo al método
recognize_filepara 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_framede la sesión de reconocimiento.
Solución de problemas
P: ¿Por qué no se puede reconocer el habla (sin resultado de reconocimiento)?
-
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
formatestá 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_rateestá establecido en 48000 (configuración de parámetro incorrecta).
- El archivo de audio tiene extensión .wav pero en realidad está en formato MP3, mientras que el parámetro de solicitud
- Si none de las verificaciones anteriores revela un problema, agregue palabras clave personalizadas para mejorar el reconocimiento de términos específicos.