diff --git a/rfcs/0000-add-ai-od-ability.md b/rfcs/0000-add-ai-od-ability.md new file mode 100644 index 0000000..9576657 --- /dev/null +++ b/rfcs/0000-add-ai-od-ability.md @@ -0,0 +1,134 @@ +- 提案时间: 2023-11-21 +- 影响版本: 1400 +- 相关 Issues: 无 + +## 【必填】概述 + +物体识别(Object Detection, OD)是指用于识别图片中特定类型的物体(人,猫,狗,车等)的轮廓以及包围盒。 + +## 【必填】动机 + +方便开发者更便利的使用AI相关一些能力,降低开发难度,从而可以开发更丰富的快应用; + +## 【必填】API规格和使用案例 + +#### 接口声明 +```javascript +{ "name": "service.ai.od" } +``` + +#### 导入模块 +```javascript +import od from '@service.ai.od' 或 const od = require('@service.ai.od') +``` + +#### 接口定义 +--- +##### od.getProvider() +检查当前设备是否支持OD,获取服务提供商。 + +##### 参数: +无 + +##### 返回值: +字符串,服务提供商的代号,如厂商的英文品牌名称,假如无此服务则返回空字符串; + +##### 代码案例: +```javascript +console.log(od.getProvider()) +``` + +# + + +##### od.detect(object) +对目标图片进行物体识别。 + +##### 参数: +| 参数名 | 类型 | 是否必填 | 说明 | +| :----- | :---- | :--: |:---------------------------------------------------------- | +| data | Object | 是 | 输入的数据资源 | +| config | Object | 否 | 物体识别能力配置 | +| success | Function | 否 | 成功回调函数 | +| fail | Function | 否 | 失败回调函数 | + +###### 参数 - data值: +| 参数名 | 类型 | 是否必填 | 说明 | +| :----- | :---- | :--: |:---------------------------------------------------------- | +| type | String | 是 | 输入的数据资源类型,可以为uri、rawString; | +| content | String | 是 | 与type匹配的资源描述; | + +###### 参数 - data - type值: +| type参数值 | 说明 | +| :-----|:---------------------------------------------------------- | +| uri | content表示数据从文件获取,提供文件的本地路径,类型为String; | +| rawString | content表示数据实际内容,类型为String,表示base64类型图片; | + +###### 参数 - config值: +| 参数名 | 类型 | 是否必填 | 说明 | +| :-----: | :----: | :--: |:----------------------------------------------------------: | +| limit | Number | 否 | 最大识别物体数,默认值为无限制; | + + +##### 返回值: +| 参数名 | 类型 | 是否必填 | 说明 | +| :-----: | :----: | :--: |:----------------------------------------------------------: | +| result | Array\ | 是 | 识别出的物体; | + +##### 返回值 ODResult值: +| 参数名 | 类型 | 是否必填 | 说明 | +| :----- | :---- | :--: |:---------------------------------------------------------- | +| type | String | 是 | 识别出的数据传递方式,与入参data中的type字段定义一致,这里一般为“rawString” | +| content | String | 是 | 识别出的数据描述,与入参data中的content字段含义一致,这里是识别出的图片的URI或者像素点阵数据; | +| contour | Number[] | 是 | 被识别出的物体的不规则轮廓,包含偶数个浮点数,每2个浮点数表示一个轮廓上的点的坐标; | +| boundingBox | Number[] | 是 | 被识别出的物体的不规则包围盒,包含4个浮点数[x, y, w, h],表示包围盒左上顶点坐标和包围盒宽,高; | + + +##### 代码案例: +```javascript +const uri = "internal://tmp/c2e94480-9d45-4666-bf0a-41b41782bb1f/IMG_20230905_171143.jpg" +od.detect({ + data: { + type: 'uri', + content: uri + }, + config: { + limit: 10 + }, + success: (data) => { + const objects = data.result + for(const object of objects){ + const {type, content, contour, boundingBox} = object + } + console.log("OD success") + } +}) +``` + + + +## 【必填】提案人员是否愿意自行实现该功能 + +是:提案人员愿意在提案通过后自行实现该功能; + +## 详细设计 + +可选,请向一个熟悉 hapjs内部实现的人讲解如何在 hapjs中实现这个功能,或讲解实现这一功能需要什么步骤。 + +## 缺陷 + +我们是不是可以不做这个功能,请考虑: + +- 实现这个功能的投入:包括代码的复杂度、代码体积的增加、实现功能投入的人力 +- 这个功能是不是不需要 hapjs提供,使用 hapjs的开发者也可以在应用层实现,甚至实现得更好 +- 对 hapjs既有惯用开发习惯的影响 +- 对已发布版本和现有功能的影响,以及用户进行迁移的成本 +- 对其它未有代码实现的 RFC 提案的影响 + +## 替代选择 + +还有其他的方案也可以实现这个功能吗? + +## 适配策略 + +如果我们实现了这个提案,有没有什么办法可以帮助开发者更好地适应这个改动? \ No newline at end of file