Skip to content

feature: add service.ai.od #7

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 134 additions & 0 deletions rfcs/0000-add-ai-od-ability.md
Original file line number Diff line number Diff line change
@@ -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> | 是 | 识别出的物体; |

##### 返回值 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 提案的影响

## 替代选择

还有其他的方案也可以实现这个功能吗?

## 适配策略

如果我们实现了这个提案,有没有什么办法可以帮助开发者更好地适应这个改动?