跳转至

命令词信息管理模块(command_info)


1. 概述

用于读取命令词相关的信息。也就是访问保存在资源文件”[60000]{xxx}xxx.xls”中的信息。CI14LP SDK提供多版本命令词信息表格式(COMMAND_INFO_VER ⅔/4,默认使用V4),源代码位于 components\cmd_info\。


2. 使用说明

2.1. 模块初始化

uint32_t cmd_info_init(
        uint32_t cmd_file_addr_in_flash, 
        uint32_t voice_patition_addr, 
        uint8_t model_group_id);

必须在调用本模块所有其他接口之前调用此接口初始化,可以参考SDK示例工程(projects\offline_asr_sample)。注意,每次切换识别模型后,都需要调用一次此接口。

2.2. 查找命令词

这里提供三种查找命令词的方式:

  • 通过字符串查找:
cmd_handle_t cmd_info_find_command_by_string(const char * cmd_string);
  • 通过命令词ID查找:
cmd_handle_t cmd_info_find_command_by_id(uint16_t cmd_id);
  • 通过命令词语义ID查找:
cmd_handle_t cmd_info_find_command_by_semantic_id(uint32_t semantic_id);

以上三个接口返回指向查找到的命令词的句柄,用于本模块的其他接口获取命令词相关的信息。判断句柄是否有效可调用:

uint32_t is_valid_cmd_handle(cmd_handle_t cmd_handle);   //0:无效, 其他非0值:有效

2.3. 获取命令词信息

  • 获取命令词字符串:
char * cmd_info_get_command_string(cmd_handle_t cmd_handle);
  • 获取命令词ID:
uint16_t cmd_info_get_command_id(cmd_handle_t cmd_handle);
  • 获取命令词语义ID:
uint32_t cmd_info_get_semantic_id(cmd_handle_t cmd_handle);
  • 获取命令词最小识别置信度:
int16_t cmd_info_get_cmd_score(cmd_handle_t cmd_handle);

此接口一般被语音识别模块调用,用户一般用不到。

提示

置信度:可以用于调整命令词的识别灵敏度,数值越小越容易被识别,但也越容易被误识别。

  • 查询命令词是否特殊词:
uint32_t cmd_info_is_special_word(cmd_handle_t cmd_handle);

特殊词主要用于某些短命令词是其他长命令词的子字符串时,会影响长命令词的识别效果。比如,有两个命令词: “加热”、”加热两分钟”,当用户说”加热两分钟”的时候,肯定会先识别到前面的”加热”,造成误识别。为了解决这个问题,我们可以把”加热”设置为特殊词,并设置一个等待时间。语音模块在识别到”加热”后,不会立即输出结果,而是等待设定的时间。如果在等待时间内,又识别到了更长的命令词,就把之前的特殊词忽略掉。只有超过设定的等待时间都没有识别到其他命令词,才把该特殊词作为有效结果输出。

  • 查询特殊词的等待时间:
int32_t cmd_info_get_special_wait_count(cmd_handle_t cmd_handle);
  • 查询命令词是否唤醒词:
uint32_t cmd_info_is_wakeup_word(cmd_handle_t cmd_handle);
  • 查询命令词是否组合词:
uint32_t cmd_info_is_combo_word(cmd_handle_t cmd_handle);

组合词的功能是可以和唤醒词连起来说,用户可以一次性说出唤醒词和命令词,减少等待。比如,智能管家的打开空调交互流程为:

用户:      智能管家
语音模块:  我在
用户:      打开空调
语音模块:  好的,打开空调

如果设置”打开空调”为组合词,交互流程可以是:

用户:      智能管家打开空调
语音模块:  好的,打开空调

  • 查询命令词是否期望词/不期望词:
uint32_t cmd_info_is_expected_word(cmd_handle_t cmd_handle);     //1:是期望词
uint32_t cmd_info_is_unexpected_word(cmd_handle_t cmd_handle);   //1:是不期望词

期望词/不期望词用于识别期望逻辑控制:处于”期望”状态时,期望词识别阈值会降低(更容易识别),不期望词则相反。

  • 获取命令词信息中的标记信息:
uint8_t cmd_info_get_cmd_flag(cmd_handle_t cmd_handle);
  • 查询命令词关联的提示音的选择类型:
voice_select_type_t get_voice_select_type(cmd_handle_t cmd_handle);

只对关联了多个选择提示音的命令词有用。结果只有两个可能:”随机选择”(VOICE_SELECT_RANDOM),”用户选择”(VOICE_SELECT_USER)。

2.4. 提示音信息查询

  • 获取命令词对应提示音的起始/结束索引:
uint32_t cmd_info_get_voice_index_from_handle(cmd_handle_t cmd_handle, uint16_t* start_index, uint16_t* end_index);
  • 获取提示音数据的ID号(组合/选择播报会返回多个ID,即打包固件时音频文件名方括号中的数字):
int32_t cmd_info_get_voice_index(uint16_t start_index, uint16_t end_index, uint8_t select_index, uint16_t* id_buffer, int buffer_length);

返回值:0:读取失败,其他非0值:提示音中组合音频文件的数量。

3. API 参考

详见 API参考-Speech-API-自动语音识别 中命令词信息部分。