未验证 提交 5355677c 编写于 作者: O openharmony_ci 提交者: Gitee

!3745 【OpenHarmony开源贡献者计划2022】相关格式及表达问题

Merge pull request !3745 from king_he/master
# 概述
AI业务子系统是OpenHarmony提供原生的分布式AI能力的子系统。AI业务子系统提供了统一的AI引擎框架,实现算法能力快速插件化集成。框架中主要包含插件管理、模块管理和通信管理等模块,完成对AI算法能力的生命周期管理和按需部署。插件管理主要实现插件的生命周期管理及插件的按需部署,快速集成AI能力插件;模块管理主要实现任务的调度及管理客户端的实例;通信管理主要实现客户端和服务端之间的跨进程通信及引擎与插件之间的数据传输。后续,会逐步定义统一的AI能力接口,便于AI能力的分布式调用。同时,提供适配不同推理框架层级的统一推理接口。AI引擎框架如下图所示。
AI业务子系统是OpenHarmony提供原生的分布式AI能力的子系统。AI业务子系统提供了统一的AI引擎框架,实现算法能力快速插件化集成。
AI引擎框架主要包含插件管理、模块管理和通信管理模块,完成对AI算法能力的生命周期管理和按需部署。插件管理主要实现插件的生命周期管理及插件的按需部署,快速集成AI能力插件;模块管理主要实现任务的调度及管理客户端的实例;通信管理主要实现客户端和服务端之间的跨进程通信管理及AI服务与插件之间的数据传输。后续,会逐步定义统一的AI能力接口,便于AI能力的分布式调用。同时,框架提供适配不同推理框架层级的统一推理接口。
AI引擎框架结构如下图所示。
**图1** AI引擎框架
......
......@@ -89,7 +89,7 @@ retCode = ProcessDecode(dataInfo, arg1, arg2, arg3) //可以接收任意多个
## 规则:在SDK中,对以编解码返回的出参数据类型,需要进行内存释放,否则会出现内存泄漏
编码得到的通用数据,本质上是将不同类型数据封装在同一块内存中,然后将这块内存的首地址与长度封装到结构体中。通过编码返回到SDK中的出参数据,在插件中申请了内存,但插件无法释放,否则SDK将无法拿到数据;因此SDK在拿到数据之后,需要对内存进行释放
编码得到的通用数据,本质上是将不同类型数据封装在同一块内存中,然后将这块内存的首地址与长度封装到结构体中。通过编码返回到SDK中的出参数据,在插件中申请了内存,但插件无法释放;因此SDK在拿到数据之后,需要对内存进行释放,否则SDK将无法拿到数据
内存释放示例:
......@@ -115,7 +115,7 @@ Server端管理的插件内部接口实现逻辑各不相同,为了统一插
## 规则:plugin需要使用AI引擎提供的统一数据通道
AI Engine在server与插件之间,提供了一个统一的数据通道,用来处理来自SDK的推理请求和来自插件的结果返回;plugin在推理接口中,需按数据通道完成请求数据的获取以及推理结果的封装。
AI引擎在server与插件之间,提供了一个统一的数据通道,用来处理来自SDK的推理请求和来自插件的结果返回;plugin在推理接口中,需按数据通道完成请求数据的获取以及推理结果的封装。
数据通道使用示例:
......@@ -142,4 +142,4 @@ return RETCODE_SUCCESS;
}
```
示例中request和response是数据通道的内容主体server端会将数据封装在request中,传递到插件,插件进行算法处理之后,则需要将结果封装成response进行返回。
示例中request和response是数据通道的内容主体server端会将数据封装在request中,传递到插件,插件进行算法处理之后,则需要将结果封装成response进行返回。
......@@ -3,15 +3,13 @@
## SDK命名规则:领域_关键词<_其他信息1_其他信息2_…>_sdk.so
关于领域,建议使用当前主流简称,比如图片视频相关的使用"cv",语音识别相关的使用“asr”,翻译相关的使用“translation”等,存在其他领域的可增加定义;关键词则需要恰当准确的描述所对应插件的算法能力,比如唤醒词识别,则使用keyword_spotting;对于其他信息,比如插件支持的芯片类型、国内海外等信息,可在关键词与“SDK”之间依次添加,每个信息之间以下划线连接;北向SDK命名,必须以“SDK”结尾。
关于领域,建议使用当前主流简称,比如图片视频相关的使用"cv",语音识别相关的使用“asr”,翻译相关的使用“translation”等,存在其他领域的可增加定义;关键词则需要恰当准确的描述所对应插件的算法能力,比如唤醒词识别,则使用keyword_spotting;对于其他信息,比如插件支持的芯片类型、国内海外等信息,可在关键词与“sdk”之间依次添加,信息之间以下划线连接;SDK命名,必须以“_sdk”结尾。
例如:唤醒词识别插件对应 的SDK,只支持麒麟9000芯片,适用于中国国内地区适用,则对应的SDK命名为:asr_keyword_spotting_kirin9000_china_sdk.so
例如:唤醒词识别插件对应的SDK,只支持麒麟9000芯片,适用于中国国内地区适用,则对应的SDK命名为:asr_keyword_spotting_kirin9000_china_sdk.so
## 插件命名规则:领域_关键词<_其他信息1_其他信息2_…>.so
插件命名的领域、关键词、其他信息等名词解释与要求,均与SDK命名要求保持一致。
插件与SDK存在一一对应的关系,故两者命名在领域、关键词、其他信息上要保持一致,两者唯一的不同之处在于SDK命名多了个“_sdk”结尾;比如插件命名为“asr_keyword_spotting.so”,则对应北向SDK命名为“asr_keyword_spotting_sdk.so”。
插件与SDK存在一一对应的关系,故插件命名的领域、关键词、其他信息等名词解释与要求,均与SDK命名要求保持一致。两者唯一的不同之处在于SDK命名多了个“_sdk”结尾;比如插件命名为“asr_keyword_spotting.so”,则对应SDK命名为“asr_keyword_spotting_sdk.so”。
例如:唤醒词识别插件对应的SDK,只支持麒麟9000芯片,适用于中国国内地区适用,则对应的插件命名为:asr_keyword_spotting_kirin9000_china.so
# 开发实例
开发实例可参考[开源项目中的示例](https://gitee.com/openharmony/aafwk_aafwk_lite/tree/master/frameworks/ability_lite/example)
开发实例可参考[开源项目中的示例](https://gitee.com/openharmony/aafwk_aafwk_lite/tree/master/frameworks/ability_lite/example)
# 搭建环境
- 开发板:Hi3516DV300
- 准备开发板:Hi3516DV300
- [下载源码](../get-code/sourcecode-acquire.md)[下载源码](../get-code/sourcecode-acquire.md)
......
......@@ -7,7 +7,7 @@
- 不带界面的Ability应用,比如:音乐播放器能在后台播放音乐、后台提供计算服务、导航服务的各类应用等。
- 不管是带界面的Ability应用还是不带界面的Ability应用,都要打包成Hap包,最终发布到应用市场,用户通过应用市场下载安装相应的应用。
不管是带界面的Ability应用还是不带界面的Ability应用,都要打包成Hap包,最终发布到应用市场,用户通过应用市场下载安装相应的应用。
## 接口说明
......@@ -17,7 +17,7 @@
| 接口名称 | 接口描述 |
| -------- | -------- |
| Want \*WantParseUri(const char \*uri) | 反序列化接口,由字符串生成Want对象。 |
| const char \*WantToUri(Want want) | 序列化,把Want对象生成字符串。 |
| const char \*WantToUri(Want want) | 序列化接口,把Want对象生成字符串。 |
| void SetWantElement(Want \*want, ElementName element); | 设置ElementName对象。 |
| void SetWantData(Want \*want, const void \*data, uint16_t dataLength) | 设置数据。 |
| bool SetWantSvcIdentity(Want \*want, SvcIdentity sid) | 设置SvcIdentity。 |
......@@ -80,7 +80,7 @@
};
```
2. 调用REGISTER_AA宏将ServiceAbility注册到应用框架中,以便应用框架实例化MyServiceAbility。
2. 调用REGISTER_AA宏将ServiceAbility注册到应用框架中,以便应用框架实例化MyServiceAbility。
```
#include "my_service_ability.h"
......@@ -303,7 +303,7 @@
```
const uint32_t WAIT_TIMEOUT = 30;
sem_init(&g_sem, 0, 0);
std::string installPath = “/storage/bundle/demo.hap”; // hap包的存储路径
std::string installPath = “/storage/bundle/demo.hap”; // Hap包的存储路径
bool result = Install(installPath.c_str(), &installParam, InstallCallback);
struct timespec ts = {};
clock_gettime(CLOCK_REALTIME, &ts);
......@@ -389,7 +389,7 @@
| 命令参数 | 对应的资源文件 | 说明 | 是否可缺省 |
| -------- | -------- | -------- | -------- |
| --mode | - | 为“hap”字段,打包生成hap | 否 |
| --mode | - | 为“hap”字段,打包生成Hap | 否 |
| --json-path | 清单文件config.json | - | 否 |
| --resources-path | 资源文件resources | - | 是 |
| --assets-path | 资源文件assets | - | 是 |
......@@ -397,7 +397,7 @@
| --shared-libs-path | 共享库文件 | 针对系统应用的共享库,特殊情况下使用 | 是 |
| --ability-so-path | 主功能so文件 | - | 是 |
| --index-path | 资源索引 | 资源索引文件由资源生成工具生成,由资源流水线会集成该工具 | 是 |
| --out-path | - | 生成的hap包输出路径,默认为当前目录 | 是 |
| --out-path | - | 生成的Hap包输出路径,默认为当前目录 | 是 |
| --force | - | 是否覆盖原有同名文件,默认为false | 是 |
- 打包示例
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册