• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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    >![](../public_sys-resources/icon-note.gif) **说明:**
79    >SDK调用AI引擎client端接口顺序应遵循AieClientInit-\>AieClientPrepare-\>AieClientSyncProcess/AieClientAsyncProcess-\>AieClientRelease-\>AieClientDestroy,否则调用接口会返回错误码。
80
81
82