Los parámetros y detalles de la API HTTP de reconocimiento de voz no en tiempo real de Paraformer.
ImportanteAlibaba 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:Reconocimiento de voz no en tiempo real
El servicio proporciona una interfaz de envío de tareas y una interfaz de consulta de tareas. Normalmente, usted llama a la interfaz de envío de tareas para cargar una tarea de reconocimiento y luego llama repetidamente a la interfaz de consulta de tareas hasta que la tarea se complete.
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.
NotaCuando 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.
Interfaz de envío de tareas
Información básica
| Descripción del endpoint de API | Envía una tarea de reconocimiento de voz. |
| URL | |
| Método de solicitud | POST |
| Encabezados de solicitud | |
| Cuerpo del mensaje | El siguiente código muestra un cuerpo de mensaje que contiene todos los parámetros de solicitud. Puede omitir los campos opcionales según sea necesario. |
Parámetros de solicitud
Haga clic para ver un ejemplo de solicitud
Ejemplo de cURL para la interfaz de envío de tareas:
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-Async: enable" \
--data '{"model":"paraformer-v2","input":{"file_urls":["{YOUR_AUDIO_URL}"]},"parameters":{"channel_id":[0]}}'
| Parámetro | Tipo | Valor predeterminado | Obligatorio | Descripción |
|---|---|---|---|---|
model | string | Sí | El nombre del modelo Paraformer que se utiliza para la transcripción de archivos de audio y video. Para más información, consulte modelos. | |
file_urls | array[string] | Sí | Lista de URLs para la transcripción de archivos de audio y video (HTTP/HTTPS). Una sola solicitud admite únicamente 1 URL. ImportanteSi la ruta URL del archivo contiene espacios, caracteres chinos u otros caracteres que requieran codificación, aplique la codificación porcentual antes de usarlos (por ejemplo, codifique los espacios como Si sus archivos de audio están almacenados en OSS, la API RESTful admite URLs temporales que comienzan con el prefijo oss://. Importante
| |
vocabulary_id | string | No | ID de vocabulario personalizado. Admitido por modelos v2+ con configuraciones de idioma. Las palabras clave de este ID se aplican al reconocimiento de voz actual. Deshabilitado de forma predeterminada. Para su uso, consulte Palabras clave personalizadas. | |
channel_id | array[integer] | [0] | No | Especifica los índices de pista de audio a reconocer en un archivo de audio multipista. Los índices comienzan desde 0. Por ejemplo, [0] significa reconocer la primera pista, y [0, 1] significa reconocer tanto la primera como la segunda pista simultáneamente. Si se omite este parámetro, solo se procesa la primera pista por defecto. ImportanteCada pista especificada se factura de forma independiente. Por ejemplo, solicitar [0, 1] para un solo archivo incurre en dos cargos separados. |
disfluency_removal_enabled | boolean | false | No | Filtra palabras de relleno. Deshabilitado de forma predeterminada. |
timestamp_alignment_enabled | boolean | false | No | Habilita la función de alineación de marcas de tiempo. Deshabilitada de forma predeterminada. |
special_word_filter | string | No | Especifica las palabras sensibles que se deben procesar durante el reconocimiento de voz y permite configurar diferentes métodos de procesamiento para distintas palabras sensibles. Si no se proporciona este parámetro, el sistema utiliza la lógica de filtrado de palabras sensibles incorporada, y las palabras que coincidan con la lista de palabras sensibles de Alibaba Cloud Model Studio en los resultados de reconocimiento se reemplazarán con Si se proporciona este parámetro, se pueden implementar las siguientes estrategias de procesamiento de palabras sensibles:
El valor de este parámetro debe ser una cadena JSON con la siguiente estructura: Descripciones de los campos JSON:
| |
language_hints | array[string] | ["zh", "en"] | No | Especifica los códigos de idioma del habla que se va a reconocer. Este parámetro solo es aplicable al modelo paraformer-v2. Códigos de idioma admitidos:
|
diarization_enabled | boolean | false | No | Diarización automática de hablantes. Deshabilitada de forma predeterminada. Solo aplicable a audio mono. El audio multicanal no admite la diarización de hablantes. Cuando esta función está habilitada, los resultados de reconocimiento incluirán un campo NotaSi la diarización de hablantes está habilitada, se recomienda que la duración del audio no exceda 2 horas; de lo contrario, el reconocimiento podría fallar o agotar el tiempo de espera. Para ver un ejemplo de |
speaker_count | integer | No | Valor de referencia para el recuento de hablantes (entero de 2 a 100, inclusive). Tiene efecto cuando diarization_enabled es true. El recuento de hablantes se determina automáticamente de forma predeterminada. Configurar este parámetro ayuda al algoritmo a orientarse hacia el recuento especificado, pero no garantiza un resultado exacto. |
Parámetros de respuesta
Haga clic para ver un ejemplo de respuesta
{
"output": {
"task_status": "PENDING",
"task_id": "c2e5d63b-96e1-4607-bb91-************"
},
"request_id": "77ae55ae-be17-97b8-9942--************"
}
Parámetro | Tipo | Descripción |
|---|---|---|
task_status | string | El estado de la tarea. |
task_id | string | El ID de la tarea. Este ID se pasa como un parámetro de solicitud en la interfaz de consulta de tareas. |
Interfaz de consulta de tareas
Información básica
| Descripción del endpoint de API | Consulta el estado y el resultado de una tarea de reconocimiento de voz. |
| URL | |
| Método de solicitud | GET |
| Encabezados de solicitud | |
| Cuerpo del mensaje | None. |
Parámetros de solicitud
Haga clic para ver un ejemplo de solicitud
curl --location 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}' --header "Authorization: Bearer $DASHSCOPE_API_KEY"
Parámetro | Tipo | Valor predeterminado | Obligatorio | Descripción |
|---|---|---|---|---|
task_id | string | - | Sí | ID de tarea requerido para la consulta. Devuelto por la interfaz de envío de tareas. |
Parámetros de respuesta
Haga clic para ver un ejemplo de respuesta
Si una tarea contiene múltiples subtareas, el estado de toda la tarea se marca como SUCCEEDED si alguna subtarea se ejecuta correctamente. Debe revisar el campo subtask_status para determinar el resultado de cada subtarea.
Ejemplo normal
{
"request_id": "f9e1afad-94d3-997e-a83b-************",
"output": {
"task_id": "f86ec806-4d73-485f-a24f-************",
"task_status": "SUCCEEDED",
"submit_time": "2024-09-12 15:11:40.041",
"scheduled_time": "2024-09-12 15:11:40.071",
"end_time": "2024-09-12 15:11:40.903",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/409a4b92-445b-4dd8-8c1d-f110954d82d8-1.json?Expires=1726211500&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
"subtask_status": "SUCCEEDED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 1,
"FAILED": 0
}
},
"usage": {
"duration": 9
}
}
Ejemplo de excepción
El parámetro code indica el código de error, y el parámetro message indica el mensaje de error. Estos dos campos aparecen solo en casos de excepción. Puede usar estos campos para solucionar problemas consultando los códigos de error.
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
Parámetro | Tipo | Descripción |
|---|---|---|
task_id | string | El ID de la tarea consultada. |
task_status | string | El estado de la tarea consultada. Para tareas con múltiples subtareas, task_status muestra |
subtask_status | string | El estado de la subtarea. |
file_url | string | La URL del archivo que se procesa en la tarea de transcripción de archivos. |
transcription_url | string | Enlace para obtener el resultado de reconocimiento (válido por 24 horas). Después de la caducidad, las consultas de tareas y las descargas de resultados fallarán. El resultado de reconocimiento se guarda como JSON. Descárguelo desde este enlace o léalo directamente mediante una solicitud HTTP. Para más detalles sobre los campos JSON, consulte Descripción del resultado de reconocimiento. |
Descripción del resultado de reconocimiento
El resultado del reconocimiento se guarda como un archivo JSON.
Haga clic para ver el ejemplo de resultado de reconocimiento
{
"file_url":"{YOUR_AUDIO_URL}",
"properties":{
"audio_format":"pcm_s16le",
"channels":[
0
],
"original_sampling_rate":16000,
"original_duration_in_milliseconds":3834
},
"transcripts":[
{
"channel_id":0,
"content_duration_in_milliseconds":3720,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentences":[
{
"begin_time":100,
"end_time":3820,
"text":"Hello world, this is the Alibaba speech laboratory.",
"sentence_id":1,
"speaker_id":0, //This field is only displayed when automatic speaker diarization is enabled
"words":[
{
"begin_time":100,
"end_time":596,
"text":"Hello ",
"punctuation":""
},
{
"begin_time":596,
"end_time":844,
"text":"world",
"punctuation":", "
}
// Other content omitted here
]
}
]
}
]
}
Los parámetros clave son los siguientes:
Parámetro | Tipo | Descripción |
|---|---|---|
audio_format | string | El formato de audio del archivo fuente. |
channels | array[integer] | La información del índice de pistas de audio del archivo fuente. Devuelve [0] para audio mono, [0, 1] para audio de doble pista, y así sucesivamente. |
original_sampling_rate | integer | La frecuencia de muestreo (Hz) del audio en el archivo fuente. |
original_duration | integer | La duración original del audio (ms) del archivo fuente. |
channel_id | integer | El índice de la pista de audio del resultado de transcripción, comenzando desde 0. |
content_duration | integer | La duración (ms) del contenido identificado como habla en la pista de audio. El servicio de modelo de reconocimiento de voz Paraformer solo transcribe y mide el contenido identificado como voz en la pista de audio, y factura en consecuencia. El contenido que no es voz no se mide ni se factura. Normalmente, la duración del contenido de voz es menor que la duración del audio original. Dado que la determinación de si existe contenido de voz la realiza un modelo de IA, puede haber alguna desviación respecto a la situación real. |
transcript | string | El resultado de la transcripción de voz a nivel de párrafo. |
sentences | array | El resultado de la transcripción de voz a nivel de oración. |
words | array | El resultado de la transcripción de voz a nivel de palabra. |
begin_time | integer | La marca de tiempo de inicio (ms). |
end_time | integer | La marca de tiempo de finalización (ms). |
text | string | El resultado de la transcripción de voz. |
speaker_id | integer | El índice del hablante actual, comenzando desde 0, utilizado para distinguir a los diferentes hablantes. Este campo solo se muestra en los resultados de reconocimiento cuando la diarización de hablantes está habilitada. |
punctuation | string | La puntuación predicha después de la palabra (si la hay). |
Otras interfaces: Consulta por lotes del estado de tareas / Cancelar tarea
Para más detalles, consulte Gestionar tareas asíncronas: Admite la consulta por lotes de tareas de reconocimiento de voz no en tiempo real enviadas en las últimas 24 horas, y también admite cancelar tareas en estado PENDING (en cola).
Ejemplo completo
Utilice bibliotecas HTTP integradas para implementar solicitudes de envío y consulta de tareas. Primero envíe la tarea de reconocimiento y luego realice consultas repetidamente hasta que se complete.
El siguiente código proporciona un ejemplo en Python:
import requests
import json
import time
api_key = "your-dashscope-api-key" # Replace this with your API key.
file_urls = [
"{YOUR_AUDIO_URL}",
]
language_hints = ["zh", "en"]
# Submit file transcription task with list of file URLs to transcribe.
def submit_task(apikey, file_urls) -> str:
headers = {
"Authorization": f"Bearer {apikey}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
data = {
"model": "paraformer-v2",
"input": {"file_urls": file_urls},
"parameters": {
"channel_id": [0],
"language_hints": language_hints
},
}
# The URL of the recorded file transcription service.
service_url = (
"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/audio/asr/transcription"
)
response = requests.post(
service_url, headers=headers, data=json.dumps(data)
)
# Print the response content.
if response.status_code == 200:
return response.json()["output"]["task_id"]
else:
print("task failed!")
print(response.json())
return None
# Recursively query the task status until the task is successful.
def wait_for_complete(task_id):
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
"X-DashScope-Async": "enable",
}
pending = True
while pending:
# The URL of the task status query service.
service_url = f"https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}"
response = requests.get(
service_url, headers=headers
)
if response.status_code == 200:
status = response.json()['output']['task_status']
if status == 'SUCCEEDED':
print("task succeeded!")
pending = False
return response.json()['output']['results']
elif status == 'RUNNING' or status == 'PENDING':
pass
else:
print("task failed!")
pending = False
else:
print("query failed!")
pending = False
print(response.json())
time.sleep(0.1)
task_id = submit_task(apikey=api_key, file_urls=file_urls)
print("task_id: ", task_id)
result = wait_for_complete(task_id)
print("transcription result: ", result)
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 el incidente y proporcione el Request ID para una investigación adicional.
Cuando una tarea contiene múltiples subtareas, siempre que cualquier subtarea tenga éxito, el estado general de la tarea se marca como SUCCEEDED. Necesita verificar el campo subtask_status para determinar el resultado de cada subtarea.
Ejemplo de respuesta de error:
{
"task_id": "7bac899c-06ec-4a79-8875-xxxxxxxxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2024-12-16 16:30:59.170",
"scheduled_time": "2024-12-16 16:30:59.204",
"end_time": "2024-12-16 16:31:02.375",
"results": [
{
"file_url": "{YOUR_AUDIO_URL}",
"code": "InvalidFile.DownloadFailed",
"message": "The audio file cannot be downloaded.",
"subtask_status": "FAILED"
}
],
"task_metrics": {
"TOTAL": 1,
"SUCCEEDED": 0,
"FAILED": 1
}
}
Más ejemplos
Para más ejemplos, consulte nuestro repositorio de GitHub.
FAQ
Funcionalidades
P: ¿Admite audio codificado en Base64?
No. No se admite audio codificado en Base64. Solo se admite audio accesible a través de URLs de acceso público. No se admiten flujos binarios ni el reconocimiento directo de archivos locales.
P: ¿Cómo proporcionar archivos de audio como URL de acceso público?
Generalmente, siga estos pasos (esto proporciona un enfoque general; los detalles varían según el producto de almacenamiento. Recomendamos cargar el audio en Alibaba Cloud OSS):
1. Elegir un método de almacenamiento y alojamiento
Por ejemplo:
-
Object Storage Service (recomendado):
- Utilice un servicio de almacenamiento de objetos de un proveedor de nube (como Alibaba Cloud OSS) para cargar archivos de audio en un bucket y configurarlos para acceso público.
- Ventajas: Alta disponibilidad, soporte de aceleración CDN, gestión sencilla.
-
Servidor web:
- Coloque archivos de audio en un servidor web que admita acceso HTTP/HTTPS (como Nginx o Apache).
- Ventajas: Adecuado para proyectos pequeños o pruebas locales.
-
Content Delivery Network (CDN):
- Aloje archivos de audio en una CDN y acceda a ellos a través de la URL proporcionada por la CDN.
- Ventajas: Entrega acelerada de archivos, adecuada para escenarios de alta concurrencia.
2. Cargar archivos de audio
Cargue archivos de audio según el método de almacenamiento/alojamiento elegido, por ejemplo:
-
Object Storage Service:
- Inicie sesión en la consola del proveedor de servicios en la nube y cree un bucket.
- Cargue archivos de audio y configure los permisos del archivo como "lectura pública" o genere enlaces de acceso temporal.
-
Servidor web:
- Coloque los archivos de audio en el directorio designado del servidor (como
/var/www/html/audio/). - Asegúrese de que los archivos sean accesibles mediante HTTP/HTTPS.
- Coloque los archivos de audio en el directorio designado del servidor (como
3. Generar una URL de acceso público
Por ejemplo:
-
Object Storage Service:
- Después de la carga, el sistema genera automáticamente una URL de acceso público (generalmente en el formato
https://<bucket-name>.<region>.aliyuncs.com/<file-name>). - Si necesita un dominio más amigable, puede vincular un dominio personalizado y habilitar HTTPS.
- Después de la carga, el sistema genera automáticamente una URL de acceso público (generalmente en el formato
-
Servidor web:
- La URL de acceso al archivo suele ser la dirección del servidor más la ruta del archivo (como
https://your-domain.com/audio/file.mp3).
- La URL de acceso al archivo suele ser la dirección del servidor más la ruta del archivo (como
-
CDN:
- Después de configurar la aceleración CDN, utilice la URL proporcionada por la CDN (como
https://cdn.your-domain.com/audio/file.mp3).
- Después de configurar la aceleración CDN, utilice la URL proporcionada por la CDN (como
4. Verificar la accesibilidad de la URL
En un entorno de red pública, asegúrese de que la URL generada sea accesible; por ejemplo:
- Abra la URL en un navegador y verifique si el archivo de audio se puede reproducir.
- Utilice herramientas (como
curlo Postman) para verificar si la URL devuelve una respuesta HTTP correcta (código de estado 200).
Al utilizar el SDK, si los archivos de audio están almacenados en Alibaba Cloud OSS, no se admiten URLs temporales con el prefijo oss://.
Al utilizar la API RESTful, si los archivos de audio están almacenados en Alibaba Cloud OSS, se admiten URLs temporales con el prefijo oss://:
- La URL temporal es válida durante 48 horas y no se puede utilizar después de su caducidad. No la utilice en un entorno de producción.
- La API para obtener una credencial de carga está limitada a 100 QPS y no admite escalado horizontal. No la utilice en entornos de producción, escenarios de alta concurrencia o escenarios de pruebas de estrés.
- Para entornos de producción, utilice un servicio de almacenamiento estable como OSS para garantizar la disponibilidad de archivos a largo plazo y evitar problemas de limitación de tasa.
P: ¿Cuánto tiempo toma obtener los resultados de reconocimiento?
Después del envío, la tarea entra en un estado de espera (PENDING). El tiempo de espera depende de la longitud de la cola y la duración del archivo, y no se puede estimar con precisión, pero generalmente se completa en unos pocos minutos. Por favor, espere pacientemente. Los archivos de audio más largos requieren más tiempo de procesamiento.
Solución de problemas
Si encuentra un error, consulte la información en Códigos de error.
P: ¿Qué debo hacer si los resultados de reconocimiento no están sincronizados con la reproducción del audio?
Establezca el timestamp_alignment_enabled parámetro de solicitud en true. Esto sincroniza los resultados de reconocimiento con la reproducción del audio.
P: ¿Cómo manejo caracteres especiales en una URL de archivo?
Si la ruta URL del archivo contiene espacios, caracteres chinos u otros caracteres que requieran codificación, aplique la codificación porcentual a dichos caracteres antes de pasar la URL a file_urls. Por ejemplo, codifique los espacios en el nombre del archivo como %20. No vuelva a codificar una URL que ya esté codificada.
P: ¿Qué debo hacer si la URL de acceso público temporal de un archivo de audio en OSS es inaccesible?
Establezca X-DashScope-OssResourceResolve en enable en los encabezados.
No recomendado.
El SDK de Java y el SDK de Python para reconocimiento de voz no en tiempo real de Paraformer no admiten la configuración de encabezados.
P: ¿No se pueden obtener resultados tras realizar sondeos continuos?
Esto puede deberse a limitaciones de tasa. Por favor, espere pacientemente. Si necesita ampliación de capacidad, únase a la comunidad de desarrolladores para solicitarla.
P: ¿Por qué no hay resultado de reconocimiento (incapaz de reconocer el habla)?
- Verifique si el audio cumple con los requisitos (formato, tasa de muestreo).
- Si está utilizando el modelo
paraformer-v2, verifique si la configuración delanguage_hintses correcta. - Si none de lo anterior resuelve el problema, puede personalizar palabras clave para mejorar el reconocimiento de términos específicos.
Más preguntas
Para más preguntas, consulte las preguntas frecuentes en GitHub.