语音算法对接

概述

专为IoT场景打造的智能语音识别框架,为用户提供数据采集接口,LPM接口(开发中),语音识别算法接口等接口,方便后期接入云端语音识别等框架,从而解决传统硬件设备智能化的痛点。

框架图

  • AP(Application Processor)主要负责应用开发,CP(coprocessor)用来通过处理主cpu的一些工作负荷来使操作提速的辅助处理器,如语音算法。
  • IPC (Inter-Process Communication,异构多核通信
  • voice data:数据内容格式为micm + refn

特性

  • 适用于多核soc,ap负责采集及搬送数据,cp负责离线语音识别及抛出各类事件
  • 提供多种录音数据,方便对接云端语音处理及查找本地算法问题
  • 提供LPM接口,方便增加低功耗管理
  • 接入方式简单,最小只需实现数据采集及语音识别部分算法等接口

接口定义

ai算法初始化

voice_ops_t *voice_ai_init(voice_t *v)

初始化 ai 算法模块

  • 参数:

    • v: voice 句柄
  • 返回值:

    • 返回voice_ops_t类型的指针: 成功, NULL: 失败
typedef struct voice {
    csi_kws_t      *kws;       /* offline alg handle */
    // aui_t          *aui;       /* online  alg handle */
    DBusConnection *conn;      /* DBus connection handle */
    int             watch_rfd;
    void           *watch;
    voice_state_t   state;
    void           *priv;

    voice_ops_t         *ops;

    voice_pcm_param_t       *mic_param;
    voice_pcm_param_t       *ref_param;
    voice_param_t            param;

    int                      fake_wakeup;
    int                      silence_tmout;
    int                      silence_start;
    volatile int             task_running;

    long long                aec_time_stamp;
    long long                vad_time_stamp;
    long long                asr_time_stamp;

    aos_sem_t                sem;
    dev_ringbuf_t            v_ringbuf;
} voice_t;

初始化及去初始化

voice_t *voice_init(voice_evt_t cb, void *priv);
void voice_deinit(voice_t *v);

初始化 ai 算法模块

  • 参数:
    • cb: voice事件
    • priv: 用户私有数
    • v: voice 句柄
  • 返回值:
    • 返回voice_ops_t类型的指针: 成功, NULL: 失败
typedef void (*voice_evt_t)(void *priv, voice_evt_id_t evt_id, void *data, int len);
typedef enum {
    VOICE_ASR_EVT,//asr事件
    VOICE_SILENCE_EVT,//断句事件
    VOICE_DATA_EVT//回流数据到达事件
} voice_evt_id_t;

voice配置参数

int voice_config(voice_t *v, voice_param_t *p);

初始化 ai 算法模块

  • 参数:
    • v: voice 句柄
    • p: voice参数
  • 返回值:
    • 0: 成功 非0:失败
typedef struct {
    int cts_ms;//ai算法每次数据大小,单位(ms)
    int ipc_mode;//与ai算法侧的通信方式,1:ipc
} voice_param_t;

添加及配置mic(ref)

int voice_add_mic(voice_t *v, voice_pcm_param_t *p); //添加麦克风
int voice_add_ref(voice_t *v, voice_pcm_param_t *p); //添加REF

初始化 ai 算法模块

  • 参数:
    • v: voice 句柄
    • p:pcm参数
  • 返回值:
    • 0: 成功 非0:失败
typedef struct {
    char            *pcm_name; //pcm设备名
    unsigned int     rate;//采样率
    int              sample_bits;//采样位数
    int              access;//是否为交错模式,0:非交错 1:交错
    int              channles;//通道总数
    int              channles_sum;//通道总数
    int              period_bytes;//pcm周期数据量(用户不必配置)
} voice_pcm_param_t;

启动(停止)voice

int voice_start(voice_t *v);
int voice_stop(voice_t *v);

初始化 ai 算法模块

  • 参数:
    • v: voice 句柄
  • 返回值:
    • 0: 成功 非0:失败

数据回流控制

int voice_backflow_control(voice_t *v, voice_backflow_id_t id, int flag);

数据回流控制

  • 参数:

    • v: voice 句柄

    • id:数据类型

    • flag: 0:关闭回流,1:打开回流

  • 返回值:

    • 0: 成功 非0:失败
typedef enum {
    VOICE_MIC_DATA,//mic数据
    VOICE_REF_DATA,//ref数据
    VOICE_VAD_DATA,//vad后数据
    VOICE_AEC_DATA,//aec后数据
    VOICE_KWS_DATA,//唤醒词音频,用于云端确认

    VOCIE_BACKFLOW_DATA
} voice_backflow_id_t;

results matching ""

    No results matching ""