Skip to main content

SDK de HarmonyOS para reconocimiento de voz en tiempo real de Paraformer

Esta guía explica cómo utilizar el SDK de HarmonyOS para reconocimiento de voz en tiempo real de Paraformer con el fin de convertir voz a texto.

Alibaba Cloud Model Studio ha introducido un dominio específico del espacio de trabajo para la región China (Beijing). El dominio ofrece un rendimiento superior y una 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 disponible. Guía del usuario: Para introducciones a los modelos y recomendaciones de selección, consulte Reconocimiento de voz en tiempo real - Fun-ASR y Paraformer.

Inicio rápido

  1. Obtención de una clave de API: Obtención y configuración de una clave de API. Por motivos de seguridad, recomendamos configurar la clave de API como una variable de entorno.
    Para otorgar acceso temporal a aplicaciones o usuarios externos, o para controlar estrictamente operaciones de alto riesgo como acceder o eliminar datos confidenciales, utilice una clave de API temporal. Una clave de API temporal tiene una validez predeterminada de 60 segundos. Obtenga una nueva después de que caduque.
  2. Descargue el SDK y ejecute el código de ejemplo:
    • Descargue el paquete más reciente del SDK.
    • Extraiga el paquete TAR. Obtenga el SDK en formato HAR del directorio neonui y agréguelo a las dependencias de su proyecto. Para la integración con C++, obtenga las bibliotecas dinámicas y los archivos de encabezado de native/libs y native/include en el paquete TAR.
    • Abra el proyecto en DevEco Studio. El código de ejemplo se encuentra en DashParaformerSpeechTranscriberPage.ets. Reemplace la clave API para probar la función.

Pasos de invocación

  1. Inicialice el SDK.
  2. Configure los parámetros según sus requisitos empresariales: Utilice el parámetro parameters de initialize para establecer los parámetros de conexión y control, y utilice setParams para establecer los parámetros de efecto de reconocimiento de voz.
  3. Llame a startDialog para iniciar el reconocimiento.
  4. En la devolución de llamada onNuiAudioStateChanged, inicie el dispositivo de grabación según el estado del audio.
  5. En la devolución de llamada onNuiNeedAudioData, proporcione continuamente datos de audio grabados.
  6. En la devolución de llamada onNuiEventCallback, escuche eventos y obtenga resultados de reconocimiento de voz.
  7. Llame a stopDialog para detener el reconocimiento y escuche el evento EVENT_TRANSCRIBER_COMPLETE para confirmar que el reconocimiento ha finalizado.
  8. Cuando ya no se necesite el reconocimiento de voz, llame a release para liberar los recursos del SDK.

Parámetros de solicitud

Parámetros de conexión y control

Pase una cadena JSON al parámetro parameters de initialize para configurar los siguientes parámetros. Ejemplo: La siguiente cadena JSON es un ejemplo y no incluye todos los parámetros. Agregue parámetros según sea necesario:
{
    "url": "wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference",
    "apikey": "st-****",
    "device_id": "my_device_id",
    "service_mode": "1"
}
  • Descripciones de parámetros
ParámetroTipoObligatorioDescripción
urlstringSíEl punto de conexión. Esto está fijado en wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference. Reemplace {WorkspaceId} con su ID de espacio de trabajo real.
apikeystringSíLa clave API. Recomendamos utilizar una clave API temporal más segura con un periodo de validez corto para reducir el riesgo de filtrar una clave a largo plazo.
service_modestringSíEl modo de operación. Para el reconocimiento de voz en tiempo real, este valor está fijado en "1".
device_idstringSíUna cadena única que identifica al usuario final. Puede configurarla como un ID de usuario dentro de la aplicación o un identificador de dispositivo único generado por el cliente. Este ID se utiliza principalmente para el seguimiento de registros y la resolución de problemas.
debug_pathstringNoLa ruta de almacenamiento para archivos de registro. Este parámetro solo surte efecto si establece save_log en true al llamar a initialize. En este caso, debe especificar una ruta de archivo de registro. De lo contrario, se producirá un error. Se conservan un máximo de dos archivos de registro localmente.
save_wavstringNoEspecifica si se deben guardar archivos de audio para depuración. Los archivos de audio se guardan en debug_path. Valor predeterminado: "false". Valores válidos: - "true": sí - "false": no. Este parámetro solo surte efecto si establece save_log en true al llamar a initialize. También debe establecer debug_path.
max_log_file_sizenumberNoEstablece el tamaño máximo de un archivo de registro en bytes. Este parámetro solo surte efecto si establece save_log en true al llamar a initialize. Valor predeterminado: 104857600 (100 * 1024 * 1024 bytes, o 100 MiB).
log_track_levelnumberNoControla el nivel de filtrado del contenido de registro enviado externamente a través de la devolución de llamada onNuiLogTrackCallback. Valor predeterminado: 2. Valores válidos: - 0: LOG_LEVEL_VERBOSE - 1: LOG_LEVEL_DEBUG - 2: LOG_LEVEL_INFO - 3: LOG_LEVEL_WARNING - 4: LOG_LEVEL_ERROR - 5: LOG_LEVEL_NONE (deshabilita esta función). Nota: log_track_level y level, que se establece mediante initialize, determinan conjuntamente qué registros se envían a la devolución de llamada. Un nivel de registro debe ser mayor o igual tanto a log_track_level como a level para activar la devolución de llamada. Por ejemplo, si log_track_level es 2 (INFO) y level es 3 (WARNING), solo los registros de nivel WARNING o superior (valor >=3) activan la devolución de llamada.

Parámetros de efecto de reconocimiento de voz

Pase una cadena JSON al parámetro params de setParams para configurar los siguientes parámetros. Ejemplo: La siguiente cadena JSON es un ejemplo y no incluye todos los parámetros. Agregue parámetros según sea necesario:
{
    "service_type": 4,
    "nls_config": {
        "model": "paraformer-realtime-v2",
        "sr_format": "pcm",
        "sample_rate": "16000"
    }
}
  • Descripciones de parámetros
Parámetro de nivel 1TipoObligatorioDescripción
service_typeintSíEl tipo de servicio de voz. Para el reconocimiento de voz en tiempo real, este valor está fijado en 4.
nls_configobjectSíEl objeto de configuración principal de reconocimiento de voz, que contiene parámetros clave para la selección del modelo y el control del efecto de reconocimiento.
nls_config.modelstringSíEl modelo de reconocimiento de voz.
nls_config.sr_formatstringSí

El formato del audio a reconocer. Formatos admitidos: pcm, wav y opus.

  • opus: El audio fuente debe estar codificado en PCM. El SDK lo codifica en OPUS.
  • wav/pcm: El audio debe estar codificado en PCM.
nls_config.sample_rateintSíLa frecuencia de muestreo del audio a reconocer, en Hz. Esto varía según el modelo: - paraformer-realtime-v2 admite cualquier frecuencia de muestreo. - paraformer-realtime-8k-v2 solo admite 8000 Hz.
nls_config.disfluency_removal_enabledbooleanNoEspecifica si se deben eliminar las disfluencias, como palabras de relleno. Valor predeterminado: false.
nls_config.language_hintsarray[string]NoEspecifica los códigos de idioma del audio a reconocer. Si el idioma no se puede determinar de antemano, omita este parámetro y el modelo detectará automáticamente el idioma. Códigos de idioma admitidos: - zh: Chino - en: Inglés - ja: Japonés - yue: Cantonés - ko: Coreano - de: Alemán - fr: Francés - ru: Ruso. Este parámetro solo surte efecto para los modelos que admiten múltiples idiomas.
nls_config.semantic_punctuation_enabledbooleanNoEspecifica el modo de segmentación de oraciones. Valor predeterminado: false. Valores válidos: - true: Habilita la segmentación semántica y deshabilita la segmentación VAD. - false: Habilita la segmentación VAD y deshabilita la segmentación semántica. La segmentación semántica es más precisa y es adecuada para la transcripción de reuniones. La segmentación VAD (Detección de Actividad de Voz) tiene menor latencia y es adecuada para la interacción en tiempo real. Este parámetro solo surte efecto para los modelos v2 y posteriores.
nls_config.max_sentence_silenceintNoEl umbral de silencio para la segmentación de oraciones VAD (Detección de Actividad de Voz), en milisegundos. Valor predeterminado: 800. Rango válido: [200, 6000]. Cuando el silencio después de un segmento supera este umbral, el sistema determina que la oración ha terminado. Este parámetro solo surte efecto cuando semantic_punctuation_enabled es false y el modelo es v2 o posterior.
nls_config.multi_threshold_mode_enabledbooleanNoEspecifica si se debe habilitar el modo de prevención de segmentos excesivamente largos. Este modo evita que los segmentos VAD sean demasiado largos. Valor predeterminado: false (deshabilitado). Valores válidos: - true: habilita el modo - false: deshabilita el modo. Este parámetro solo surte efecto cuando semantic_punctuation_enabled es false y el modelo es v2 o posterior.
nls_config.punctuation_prediction_enabledbooleanNoEspecifica si se debe agregar puntuación automáticamente a los resultados de reconocimiento. Valor predeterminado: true. Valores válidos: - true: sí - false: no. Este parámetro solo surte efecto en modelos v2 y posteriores.
nls_config.heartbeatbooleanNoEspecifica si se debe mantener una conexión persistente con el servidor. Valor predeterminado: false. Valores válidos: - true: La conexión permanece activa mientras se envía continuamente audio silencioso. - false: Incluso si se envía continuamente audio silencioso, la conexión expira después de un período de tiempo. El tiempo de espera es un valor predeterminado del servidor y no se puede configurar en el cliente. Este parámetro solo surte efecto en modelos v2 y posteriores.
nls_config.inverse_text_normalization_enabledbooleanNoEspecifica si se debe habilitar la normalización inversa de texto (ITN). Cuando está habilitada, los numerales chinos se convierten a números arábigos. Valor predeterminado: true (habilitado). Valores válidos: - true: habilitado - false: deshabilitado. Este parámetro solo surte efecto en modelos v2 y posteriores.
nls_config.vocabulary_idstringNoEl ID de vocabulario de palabras clave, que mejora la precisión de reconocimiento de palabras específicas. Este parámetro se aplica a modelos v2 y posteriores. Para obtener más información, consulte Palabras clave personalizadas.

Interfaces clave

NativeNui

initialize

Inicializa una instancia del SDK de reconocimiento de voz. No vuelva a inicializar la instancia antes de llamar a release. Esta interfaz bloquea el hilo de llamada. Llámela desde un hilo que no sea de UI.
  • Firma del método
public initialize(callback: INativeNuiCallback,
                  parameters: string,
                  level: number,
                  save_log: boolean = false): number
  • Descripciones de parámetros
ParámetroTipoDescripción
callbackINativeNuiCallbackUna implementación de la interfaz de devolución de llamada de eventos y datos.
parametersstringUna cadena JSON que contiene parámetros de autenticación, conexión y depuración. Consulte Parámetros de conexión y control.
levelnumberControla el nivel de registro del SDK. Los valores válidos están definidos por la enumeración Constants.LogLevel.
save_logbooleanEspecifica si se deben guardar registros locales. Si este parámetro es true, use debug_path en Parámetros de conexión y control para especificar una ruta. También puede usar max_log_file_size para establecer el tamaño del archivo.
  • Valor de retorno

setParams

Establece los parámetros de efecto de reconocimiento de voz en formato JSON. Llame a esta interfaz antes de startDialog.
  • Firma del método
public setParams(params: string): number
  • Descripciones de parámetros
ParámetroTipoDescripción
paramsstringLos parámetros de efecto de reconocimiento de voz.
  • Valor de retorno

startDialog

Inicia el reconocimiento.
  • Firma del método
public startDialog(vad_mode: Constants.VadMode, dialog_params: string): number
  • Descripciones de parámetros
ParámetroTipoDescripción
vad_modeConstants.VadModeEl modo VAD. Este valor está fijado en Constants.VadMode.TYPE_P2T.
dialog_paramsstringSi la clave de API temporal especificada por apikey en Parámetros de conexión y control ha caducado, actualícela aquí. El valor está en formato JSON: typescript { "apikey": "st-****" }
  • Valor de retorno

stopDialog

Detiene el reconocimiento. Después de llamar a esta interfaz, el servidor devuelve el resultado final del reconocimiento y finaliza la tarea.
  • Firma del método
public stopDialog(): number
  • Valor de retorno

cancelDialog

Detiene inmediatamente el reconocimiento sin esperar a que el servidor devuelva el resultado final del reconocimiento.
  • Firma del método
public cancelDialog(): number
  • Valor de retorno

release

Libera todos los recursos internos del SDK. Después de llamar a este método, la instancia del SDK deja de estar disponible. Para volver a utilizarla, llame a initialize para reinicializarla.
  • Firma del método
public release(): number
  • Valor de retorno

GetVersion

Obtiene la información de la versión actual del SDK.
  • Firma del método
public GetVersion(): string
  • Valor de retorno
La información de la versión actual del SDK.

INativeNuiCallback

Escucha eventos, estados de audio, cambios de volumen y registros durante el reconocimiento de voz en tiempo real.

onNuiEventCallback

Escucha eventos de reconocimiento y obtiene resultados de reconocimiento de voz.
  • Firma del método
onNuiEventCallback: (event: Constants.NuiEvent, resultCode: number, arg2: number,
                    kwsResult: KwsResult, asrResult: AsrResult) => void;
  • Descripciones de parámetros
ParámetroTipoDescripción
eventConstants.NuiEventEl evento de devolución de llamada.
resultCodenumberVálido solo cuando ocurre el evento EVENT_ASR_ERROR.
asrResultAsrResultEl resultado del reconocimiento de voz.
kwsResultKwsResultLa función de activación por voz. No necesita utilizar este parámetro.
arg2numberUn parámetro reservado.

onNuiAudioStateChanged

El SDK utiliza esta devolución de llamada para indicar cuándo debe iniciarse o detenerse la grabación.
  • Firma del método
onNuiAudioStateChanged: (state: Constants.AudioState) => void
  • Descripciones de AudioState
EstadoDescripción
STATE_OPENLa interacción comienza. Puede iniciar el dispositivo de grabación.
STATE_PAUSELa interacción está en pausa. Puede pausar la grabación.
STATE_CLOSELa interacción se detiene. Puede detener completamente el dispositivo de grabación.

onNuiAudioRMSChanged

Supervisa el volumen de los datos de audio grabados para su visualización en la interfaz de usuario.
  • Firma del método
onNuiAudioRMSChanged: (val: number) => number
  • Descripciones de parámetros
ParámetroTipoDescripción
valnumberEl volumen de los datos de audio grabados. El rango de salida es generalmente [-160, 0].

onNuiNeedAudioData

Después de que se inicia el reconocimiento, esta devolución de llamada se activa continuamente. Proporcione los datos de audio a reconocer en la devolución de llamada.
  • Firma del método
onNuiNeedAudioData: (buffer: ArrayBuffer) => number
  • Descripciones de parámetros
ParámetroTipoDescripción
bufferArrayBufferLos datos de audio a proporcionar. El SDK utiliza buffer.byteLength como el número de bytes solicitado.
  • Valor de retorno
El número real de bytes proporcionados. Un valor de retorno de <=0 indica un error o ausencia de datos.

onNuiLogTrackCallback

Este callback recibe registros internos detallados del SDK para resolución de problemas y depuración.
onNuiLogTrackCallback: (level: Constants.LogLevel, log: string) => void

Constants.NuiEvent

Los tipos de eventos del SDK de HarmonyOS están definidos por la enumeración Constants.NuiEvent. Los siguientes eventos se aplican al reconocimiento de voz en tiempo real:
EventoDescripción
EVENT_TRANSCRIBER_STARTEDLa tarea se inicia correctamente.
EVENT_VAD_STARTEste evento se activa inmediatamente después de que se inicia la tarea. No indica que se haya detectado el inicio del habla.
EVENT_VAD_ENDSe detecta el final del habla.
EVENT_ASR_PARTIAL_RESULTUn resultado intermedio del reconocimiento de voz.
EVENT_ASR_RESULTUn resultado completo de reconocimiento de voz.
EVENT_ASR_ERRORSe produce un error durante el reconocimiento de voz.
EVENT_MIC_ERROREste evento se activa cuando no se reciben datos de audio durante 2 segundos consecutivos.
EVENT_SENTENCE_STARTSe detecta el inicio de una oración.
EVENT_SENTENCE_ENDSe detecta el final de una oración y se devuelve un resultado de reconocimiento completo.
EVENT_TRANSCRIBER_COMPLETEEl reconocimiento de voz finaliza.

Tipos auxiliares

Constants.LogLevel

Los valores de enumeración para el parámetro level son los siguientes:
ValorDescripción
LOG_LEVEL_VERBOSELos registros más detallados.
LOG_LEVEL_DEBUGRegistros de depuración.
LOG_LEVEL_INFORegistros informativos (predeterminado).
LOG_LEVEL_WARNINGRegistros de advertencia.
LOG_LEVEL_ERRORRegistros de errores.
LOG_LEVEL_NONEDesactiva el registro.

Gestión de dispositivos de audio

A diferencia de Android, que utiliza AudioRecord, HarmonyOS utiliza AudioCapturer de @kit.AudioKit para capturar audio. El ejemplo del producto encapsula esta lógica en la clase de utilidad AudioRecorder.ets, que puede reutilizar directamente.
  • Creación: audio.createAudioCapturer(capturerOptions) crea asíncronamente el captador con una frecuencia de muestreo fija de 16 kHz, profundidad de bits de 16 y un canal (SAMPLE_RATE_16000/CHANNEL_1/SAMPLE_FORMAT_S16LE/ENCODING_TYPE_RAW).
  • Evento de datos: capturer.on('readData', (buffer: ArrayBuffer) => void) obtiene continuamente datos de audio grabados. Almacene los datos en búfer en una cola para que la devolución de llamada onNuiNeedAudioData pueda recuperarlos según sea necesario.
  • Evento de estado: capturer.on('stateChange', (state: audio.AudioState) => void). STATE_RUNNING indica que la grabación ha comenzado y STATE_STOPPED indica que la grabación se ha detenido.
  • Control: start() inicia, stop() detiene y release() libera el captador.
HarmonyOS crea AudioCapturer de forma asíncrona. Llame a start() solo después de que se complete la creación. Por lo tanto, no cree e inicie inmediatamente un grabador cuando ocurra STATE_OPEN. Créelo primero y luego llame a start() en la devolución de llamada STATE_OPEN. El ejemplo crea el grabador durante doInit y lo inicia durante onNuiAudioStateChanged. Cuando ocurra STATE_CLOSE, detenga el grabador pero conserve la instancia para su reutilización. Libérelo en release.

Declaración de permisos

Declare el permiso de micrófono en module.json5 para utilizar la grabación:
{
  "requestPermissions": [
    { "name": "ohos.permission.MICROPHONE" }
  ]
}