1# 唤醒词识别SDK的开发示例<a name="ZH-CN_TOPIC_0000001090776709"></a> 2 31. 在//foundation/ai/engine /interfaces/kits目录中添加唤醒词识别SDK的API接口定义,该接口可用三方应用的调用。如下代码片段即为唤醒词识别定义的API接口示例,其相关代码参考路径为://foundation/ai/engine /interfaces/kits/asr/keyword\_spotting。 4 5 ``` 6 class KWSSdk { 7 public: 8 KWSSdk(); 9 virtual ~KWSSdk(); 10 11 // 定义了创建唤醒词检测工具包的方法 12 int32_t Create(); 13 14 // 定义了同步执行唤醒词检测任务的方法 15 int32_t SyncExecute(const Array<int16_t> &audioInput); 16 17 // 定义了设置唤醒词检测回调器的方法 18 int32_t SetCallback(const std::shared_ptr<KWSCallback> &callback); 19 20 // 定义了销毁唤醒词工具包的方法,释放与插件的会话信息。 21 int32_t Destroy(); 22 }; 23 ``` 24 252. 在//foundation/ai/engine/services/client/algorithm\_sdk的目录中增加SDK中API接口的具体实现,调用client端提供的接口,实现算法插件能力的使用。如下代码片段即为唤醒词识别的API接口中create方法的具体实现示例,更多详细代码可参考://foundation/ai/engine/services/client/algorithm\_sdk/asr/keyword\_spotting。 26 27 ``` 28 int32_t KWSSdk::KWSSdkImpl::Create() 29 { 30 if (kwsHandle_ != INVALID_KWS_HANDLE) { 31 HILOGE("[KWSSdkImpl]The SDK has been created"); 32 return KWS_RETCODE_FAILURE; 33 } 34 if (InitComponents() != RETCODE_SUCCESS) { 35 HILOGE("[KWSSdkImpl]Fail to init sdk components"); 36 return KWS_RETCODE_FAILURE; 37 } 38 // 调用client端提供的接口AieClientInit,实现初始化引擎服务,激活跨进程调用 39 int32_t retCode = AieClientInit(configInfo_, clientInfo_, algorithmInfo_, nullptr); 40 if (retCode != RETCODE_SUCCESS) { 41 HILOGE("[KWSSdkImpl]AieClientInit failed. Error code[%d]", retCode); 42 return KWS_RETCODE_FAILURE; 43 } 44 if (clientInfo_.clientId == INVALID_CLIENT_ID) { 45 HILOGE("[KWSSdkImpl]Fail to allocate client id"); 46 return KWS_RETCODE_FAILURE; 47 } 48 DataInfo inputInfo = { 49 .data = nullptr, 50 .length = 0, 51 }; 52 DataInfo outputInfo = { 53 .data = nullptr, 54 .length = 0, 55 }; 56 // 调用client端提供的接口AieClientPrepare,实现加载算法插件 57 retCode = AieClientPrepare(clientInfo_, algorithmInfo_, inputInfo, outputInfo, nullptr); 58 if (retCode != RETCODE_SUCCESS) { 59 HILOGE("[KWSSdkImpl]AieclientPrepare failed. Error code[%d]", retCode); 60 return KWS_RETCODE_FAILURE; 61 } 62 if (outputInfo.data == nullptr || outputInfo.length <= 0) { 63 HILOGE("[KWSSdkImpl]The data or length of output info is invalid"); 64 return KWS_RETCODE_FAILURE; 65 } 66 MallocPointerGuard<unsigned char> pointerGuard(outputInfo.data); 67 retCode = PluginHelper::UnSerializeHandle(outputInfo, kwsHandle_); 68 if (retCode != RETCODE_SUCCESS) { 69 HILOGE("[KWSSdkImpl]Get handle from inputInfo failed"); 70 return KWS_RETCODE_FAILURE; 71 } 72 return KWS_RETCODE_SUCCESS; 73 } 74 ``` 75 76 上述代码为API接口的具体实现,从上述示例的代码中,SDK中create接口的具体实现即为下述示例代码中create方法,该方法调用了AI引擎框架client端开放接口AieClientInit,AieClientPrepare,从而实现与server端建立连接及加载算法模型的能力。 77 78 > **说明:** 79 >SDK调用AI引擎client端接口顺序应遵循AieClientInit-\>AieClientPrepare-\>AieClientSyncProcess/AieClientAsyncProcess-\>AieClientRelease-\>AieClientDestroy,否则调用接口会返回错误码。 80 81 82