# 帮助文档

欢迎来到Graviti AI Services

**格物钛** 致力于帮助AI开发者解决开发过程中遇到的数据问题，从数据搜集、获取到使用，只需简单操作，即可利用Graviti AI Service将数据接入开发Pipeline，高效实现AI落地。

#### 在 [Open Datasets](https://gas.graviti.cn/open-datasets) 中获取、使用公开数据集：

Open Datasets汇集了海量国内外优质公开数据集，详见Open Dataset帮助文档：

{% content-ref url="/pages/-MK9ETAF3vnQuj6ZQdFO" %}
[Open Datasets](/guide/opendataset)
{% endcontent-ref %}

#### 在 **TensorBay** 中体验专业的非结构化数据管理服务：

TensorBay支持数据托管、数据在线可视化、数据版本管理、团队协同等功能，详见TensorBay帮助文档：

{% content-ref url="/pages/-MWOqcfIEzwx5sZewOsM" %}
[TensorBay](/guide/tensorbay)
{% endcontent-ref %}

#### 利用 [开发者工具](https://www.graviti.cn/dev-tools) 使用 Graviti AI Service（GAS）快速接入开发项目：

TensorBay提供Python SDK、CLI和API等多种开发工具，实现数据与pipeline的快速集成，详见开发者工具帮助文档：

{% content-ref url="/pages/-MLCnlrTBgRXldjOYYbu" %}
[开发者工具](/dev-doc/tools)
{% endcontent-ref %}

{% hint style="info" %}

#### 如未能解决您的问题，请点击[此处](https://www.graviti.cn/forum/support)向我们反馈

#### 我们重视每一条反馈，并将积极推动问题解决！

{% endhint %}


# 注册账号

立刻构建您的AI世界

## 注册账号并登录使用 <a href="#id-1" id="id-1"></a>

* 方式一：进入[格物钛官网](https://docs.graviti.cn/www.graviti.cn)，点击右上角登录按钮开始注册。
* 方式二：直接[点击链接](https://account.graviti.cn/sign-in/?callback=https%3A%2F%2Fwww.graviti.cn%2F)注册。
* 方式三：通过微信授权登录，自动注册账号。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeDimup-Bqz4gaM7Ks%2F-MWeDytNaMxoLdHd74q1%2Fimage.png?alt=media\&token=7c8e39db-4f6a-4197-b35e-5444c1c4624a)

## 绑定账号 <a href="#id-2" id="id-2"></a>

用户登录后可在账户信息绑定手机号或邮箱，未绑定用户将无法使用部分产品功能，绑定方法如下：‌

1. 登录账号
2. 点击右上角头像选择个人设置
3. 进入账户信息
4. 绑定您的手机号、邮箱、微信号

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeDimup-Bqz4gaM7Ks%2F-MWeDtwyzoEkWO_a1XeI%2Fimage.png?alt=media\&token=18b9bddf-51a1-463b-861c-afb3745e7850)

## 账号类型和权益 <a href="#id-3" id="id-3"></a>

用户分为开发者版和团队版，每一个版本下还有不同的权益等级，详情请查看[用户权限说明](https://www.graviti.cn/price)。

{% content-ref url="/pages/-MV5fYMtBICOaDvAazVH" %}
[个人设置](/account/personal)
{% endcontent-ref %}

{% content-ref url="/pages/-MVElE4ofWwbNuHy2LxX" %}
[团队设置](/account/team)
{% endcontent-ref %}


# 个人设置

## 添加和编辑个人资料 <a href="#id-1" id="id-1"></a>

> 个人主页上的部分信息（如：头像、昵称）始终处于公开状态，以便用户之间识别身份。

1. 点击右上角空间切换，点击个人空间的【设置】图标，进入个人空间。
2. 进入【个人资料】
3. 编辑信息，点击【更新个人资料】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeL9gzfX60N17kiErh%2Fimage.png?alt=media\&token=da08b81e-8a77-487d-836d-4b36dcf9cf23)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeN1CJDTs9HdA6cAIr%2Fimage.png?alt=media\&token=61e122a5-3663-4068-a1ad-1102c6df3dd2)

## 修改账户信息 <a href="#id-2" id="id-2"></a>

### 绑定账号 <a href="#id-2-1" id="id-2-1"></a>

用户登录后可在账户信息绑定手机号或邮箱，未绑定用户将无法使用部分产品功能，绑定方法如下：‌

1. 点击右上角空间切换，点击个人空间的【设置】图标，进入个人空间。
2. 进入【账户信息】。
3. 绑定手机号、邮箱、微信号。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeL9gzfX60N17kiErh%2Fimage.png?alt=media\&token=da08b81e-8a77-487d-836d-4b36dcf9cf23)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeMbLQTyDRpAr_ZY82%2Fimage.png?alt=media\&token=40d80456-6203-4e6b-9f3a-960ed5335315)

### 换绑账号 <a href="#id-2-2" id="id-2-2"></a>

换绑手机号、邮箱、微信账户，需要进行安全验证。可以选择登陆密码、短信验证和邮箱验证。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeKjEP45RnWt_A8W85%2Fimage.png?alt=media\&token=533cf373-d84a-4d63-8af7-e3a208034d19)

### 修改登录密码 <a href="#id-2-3" id="id-2-3"></a>

通过现有的登录密码、短信、邮箱验证信息修改您的登录密码。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeKGdpZV9N6hbmRt78%2Fimage.png?alt=media\&token=94a87cc0-72c6-4ed8-b876-1d6655013334)

### 注销账号 <a href="#id-2-4" id="id-2-4"></a>

1. 进入【账户信息】。
2. 选择【注销账户】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeK5jU--yVCZtLv5AK%2Fimage.png?alt=media\&token=d27e4611-164d-4e45-8ba3-3d0a046082d8)

{% hint style="danger" %}
账号一旦注销，账号关联的所有数据都将被清除，无法找回，请谨慎操作
{% endhint %}

## 资产信息 <a href="#id-3" id="id-3"></a>

查看数据集托管容量的使用情况，若需扩增容量，可选择升级至专业版。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeJgQeIGYVldrmlojv%2Fimage.png?alt=media\&token=f934e087-cd73-4ef2-a7c5-3bab758d9c2c)

### 查看历史订单 <a href="#id-3-1" id="id-3-1"></a>

1. 点击右侧【我的订单】。
2. 查看订单编号、状态、金额、创建时间及相关操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeJptRVSXKp2PAkf2N%2Fimage.png?alt=media\&token=8e5db662-f8f3-4f7a-bf26-151b3eade028)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MVLn_2Zp3PZ7BYaITdZ%2F-MVLqRBGgsxm4FTV44Gb%2F%E8%AE%A2%E5%8D%95.png?alt=media\&token=890cc4bd-b75a-422f-aa07-53b6a97dfd59)

## 我的团队 <a href="#id-4" id="id-4"></a>

查看已加入或创建的团队数量。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeIrT1dlFXY5XvN1xF%2Fimage.png?alt=media\&token=d762bf28-2e20-49a1-85bf-464bd6fc845c)

### 新建团队 <a href="#id-4-1" id="id-4-1"></a>

1. 点击右侧 【+ 新建团队】，填写团队信息。
2. 邀请成员加入。可以在邀请的同时设置团队权限，也可以后续再进行权限修改操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeJ2r22wUorpuenin_%2Fimage.png?alt=media\&token=d1b3913d-c9e6-427e-8bbd-60d4799b3dab)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeJNtwytniSP-u3RFV%2Fimage.png?alt=media\&token=771c1e5d-55c5-47c1-a3c8-da5467ca499d)

## 账户安全 <a href="#id-5" id="id-5"></a>

查看您的账户近1个月的登录记录。若存在异常，请尽快前往“账户信息”修改您的登录密码。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeHoB5RsVhG2Y57I2E%2F-MWeI4PjG4rYOvyAqyA0%2Fimage.png?alt=media\&token=3b302d19-f1ac-46fa-9b86-2733f3b898ed)


# 团队设置

## 添加和编辑团队资料 <a href="#id-1" id="id-1"></a>

> 团队主页上的部分信息（如：团队头像、名称）始终处于公开状态。

1. 点击右上角空间切换，点击团队空间的【设置】图标，进入团队空间。
2. 进入【团队资料】
3. 编辑信息，点击【更新团队资料】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeG4JhAls_gmFyzlYk%2F-MWeGlBTnUVquSg8un0n%2Fimage.png?alt=media\&token=a839021d-944d-49cd-a85b-8cbba9fa0d5f)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeG4JhAls_gmFyzlYk%2F-MWeH2aSGnEwEjnqsEtn%2Fimage.png?alt=media\&token=0c56700b-f44b-40ae-a215-6275182099b6)

## 添加团队成员 <a href="#id-2" id="id-2"></a>

点击【团队成员】，查看已使用的席位数量。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeG4JhAls_gmFyzlYk%2F-MWeHM4cGEmztri1DAZh%2Fimage.png?alt=media\&token=b387f2c6-e97a-489e-ab27-b18ef5a934f5)

添加团队成员：

1. 点击【邀请成员】。
2. 输入用户手机号或邮箱。
3. 设置用户在团队中的权限：普通成员或管理员。
4. 点击【邀请】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeG4JhAls_gmFyzlYk%2F-MWeHk_bEsbtGkzh8rzM%2Fimage.png?alt=media\&token=0384eda6-d75a-417f-bcc2-b9c424581c9c)


# 开发者工具

**格物钛** 为开发者提供Python SDK、CLI与Open API等多种开发工具以及完整的文档与使用案例，让您的数据与Pipeline快速集成。

#### Python SDK

{% content-ref url="/pages/-MVswAwqM06e9u14wCwN" %}
[Broken mention](broken://pages/-MVswAwqM06e9u14wCwN)
{% endcontent-ref %}

#### CLI

{% content-ref url="/pages/-MVswIfz4EGfHC2OrLee" %}
[Broken mention](broken://pages/-MVswIfz4EGfHC2OrLee)
{% endcontent-ref %}

#### Open API

{% content-ref url="/pages/-Mci0JfhCvZU4PH3GiIh" %}
[Open API](/dev-doc/tools/api-center)
{% endcontent-ref %}


# Open API

## Api Overview

### 关于dataset的操作

| api                                                                                                                         | description   |
| --------------------------------------------------------------------------------------------------------------------------- | ------------- |
| [ListAuthStorageConfig](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listauthstorageconfig)           | 获取授权配置列表      |
| [ListStorageConfigs](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#liststorageconfigs)                 | 获取配置列表        |
| [CreateStorageConfigOSS](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createstorageconfigoss)         | 创建OSS存储配置     |
| [CreateStorageConfigS3](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createstorageconfigs3)           | 创建S3存储配置      |
| [CreateStorageConfigAzure](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createstorageconfigazure)     | 创建Azure存储配置   |
| [CreateStorageConfigLocalFs](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createstorageconfiglocalfs) | 创建本地存储配置      |
| [DeleteStorageConfig](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#deletestorageconfig)               | 删除配置          |
| [CreateDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createdataset)                           | 创建dataset     |
| [DeleteDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#deletedataset)                           | 删除数据集         |
| [UpdateDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#updatedataset)                           | 更新数据集         |
| [ListDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listdataset)                               | 获取dataset列表   |
| [GetDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#getdataset)                                 | 获取dataset     |
| [CreateBranch](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createbranch)                             | 创建分支          |
| [DeleteBranch](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#deletebranch)                             | 删除分支          |
| [ListBranches](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listbranch)                               | 获取分支列表        |
| [CreateDraft](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createdraft)                               | 创建draft       |
| [UpdateDraft](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#updatedraft)                               | 更新draft       |
| [ListDraft](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listdraft)                                   | 获取draft列表     |
| [CommitDataset](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#commitdataset)                           | 提交dataset     |
| [ListCommit](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listcommit)                                 | 获取commit列表    |
| [CreateTag](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createtag)                                   | 创建tag         |
| [DeleteTag](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#deletetag)                                   | 删除tag         |
| [ListTag](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listtag)                                       | 获取tag列表       |
| [UpdateNote](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#updatenote)                                 | 更新数据集note信息   |
| [GetNote](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#getnote)                                       | 获取数据集note信息   |
| [GetUser](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#getuser)                                       | 获取用户信息        |
| [ListBenchmarks](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listbenchmarks)                         | 获取benchmark列表 |
| [CreateEvaluation](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createevaluation)                     | 创建评估          |
| [ListEvaluations](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listevaluations)                       | 获取评估列表        |
| [GetEvaluationResult](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#getevaluationresult)               | 获取评估结果        |
| [CreateOrder](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createorder)                               | 创建订单          |
| [CreateTask](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#createtask)                                 | 创建任务          |
| [DeleteTask](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#deletetask)                                 | 删除任务          |
| [StopTask](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#stoptask)                                     | 停止任务          |
| [GetTask](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#gettask)                                       | 获取任务          |
| [ListTasks](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#listtasks)                                   | 获取任务列表        |
| [RetryTask](https://docs.graviti.cn/dev-doc/tools/api-center/dataset-operation#retrytask)                                   | 重试任务          |

### 关于data的操作

| api                                                                                                        | description      |
| ---------------------------------------------------------------------------------------------------------- | ---------------- |
| [GetPolicy](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getpolicy)                     | 获取数据上传令牌         |
| [PutCallback](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#putcallback)                 | 上传回调             |
| [MultiPutCallback](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#multicallback)          | 批量上传回调           |
| [CreateSegment](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#createsegment)             | 创建segment        |
| [DeleteSegment](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#deletesegment)             | 删除segment        |
| [ListSegment](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listSegment)                 | 获取segment        |
| [UploadLabelCatalog](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#uploadlabelcatalog)   | 更新label catalog  |
| [GetLabelCatalog](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getlabelcatalog)         | 获取labelcatalog   |
| [UploadSensor](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#uploadsensor)               | 上传sensor         |
| [DeleteSensor](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#deletesensor)               | 删除sensor         |
| [ListSensor](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listsensor)                   | 获取list sensor    |
| [ListData](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listdata)                       | 获取data           |
| [ListDataDetails](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listdatadetails)         | 获取data详情         |
| [ListDataUri](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listdatauri)                 | 获取数据的url         |
| [ListMaskUrls](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listmaskurls)               | 获取标注url          |
| [GetDataUrls](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getdataurls)                 | 根据path获取数据的url   |
| [GetTotalSize](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#gettotalsize)               | 获取所有文件大小         |
| [ListCloudFiles](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listcloudfiles)           | 获取云端文件列表         |
| [GetCloudFileUrl](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getcloudfileurl)         | 获取云端文件url        |
| [CloudCallback](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#cloudcallback)             | 云端回调             |
| [UploadLabel](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#uploadlabel)                 | 更新label          |
| [ListLabel](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listlabel)                     | 获取数据集的标注标签信息     |
| [MultiUploadLabel](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#multiuploadlabel)       | 批量更新label        |
| [GetLabelStatistics](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getlabelstatistics)   | 获取label数据        |
| [ConvertLabelFromAli](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#convertlabelfromali) | 从阿里转换数据          |
| [DeleteData](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#deletedata)                   | 删除数据             |
| [OperateData](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#operatedata)                 | 操作数据             |
| [DeleteFrame](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#deleteframe)                 | 删除数据帧            |
| [GetDiff](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getdiff)                         | 获取两版本差异          |
| [ListSegmentDiffs](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listsegmentdiffs)       | 获取两版本segment差异列表 |
| [GetSegmentDiff](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#getsegmentdiff)           | 获取两版本segment差异   |
| [ListDataDiffs](https://docs.graviti.cn/dev-doc/tools/api-center/data-operation#listdatadiffs)             | 获取两版本数据差异        |

## Common

### 公共参数

文档中存在的一些公共参数

| 名称              | 描述                                                                                  | 值                                                     |
| --------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------- |
| service         | api请求地址前缀                                                                           | <https://gas.graviti.cn/gatewayv2/tensorbay-open-api> |
| your\_accesskey | 用户申请得到的accesskey, 可进入[GAS开发者中心](https://docs.graviti.cn/dev-doc/tools/api-center)获取 |                                                       |

### HTTP Headers

此模块主要介绍http的公共请求头和响应头的详细说明

#### 公共请求头（Common Request Headers）

| 名称           | 类型     | 描述                                         |
| ------------ | ------ | ------------------------------------------ |
| Content-Type | string | RFC2616中定义的HTTP请求内容类型。默认值：application/json |
| X-Token      | string | 用户申请得到的accesskey                           |

#### 公共响应头（Common Response Headers）

| 名称           | 类型     | 描述                                                                                                 |
| ------------ | ------ | -------------------------------------------------------------------------------------------------- |
| X-Request-Id | string | X-Request-Id是由graviti创建，并唯一标识这个response的UUID。如果在使用graviti服务时遇到问题，可以凭借该内容联系graviti工作人员，快速定位问题。默认值：无 |

### Error code description

#### 错误码返回格式

```
{
  "code": "error_code",
  "message": "***"
}
```

当请求发生错误的时候，服务端会返回此类格式的错误信息。 譬如获取数据集时发生404错误。

```
# 响应状态
HttpStatus 404
# 响应结果
{
    "code": "ResourceNotExist", 
    "message": "dataset not exist!"
}
```

#### 错误码

| code                 | description              |
| -------------------- | ------------------------ |
| AccessDenied         | 请求被拒绝，缺失权限...            |
| InvalidParamsValue   | 无效的请求参数，比如参数格式不对，比如造成不幂等 |
| NameConflict         | 命名冲突                     |
| RequestParamsMissing | 必传的某个参数缺失                |
| ResourceNotExist     | 请求资源时，找不到资源              |
| SystemError          | 系统错误                     |

#### 模糊查询

**对于支持模糊查询的api，遵循以下规则**

1. 支持mysql通配符查询，如%, \_等通配符
2. 若无mysql通配符，默认%{模糊查询}%,前后模糊匹配
3. 若查询字段中含有mysql通配符，自动模糊匹配失效。
4. 若仅希望通配符当作普通字符串，需要进行转义处理，此时退化为非模糊匹配。若仍需要模糊匹配，需手动构造通配符查询。

**例： result： graviti\_1, great\_graviti\_1, graviti%1**

1. name = graviti, 返回结果graviti\_1, great\_graviti\_1, graviti%1
2. name = graviti\\\_%, 返回结果graviti\_1, great\_graviti\_1
3. name = graviti\\\_, 返回结果无
4. name = graviti%, 返回graviti\_1，graviti%1
5. name = graviti\\%%, 返回graviti%1
6. name = graviti\\%, 返回无
7. name = graviti\\%1, 返回graviti%1
8. name = %graviti, 返回无


# Dataset Operation

### ListAuthStorageConfig

**获取授权配置列表**

获取授权配置的列表

**请求路径**

> **GET** /v1/auth-storage-configs

**请求参数**

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>否</td><td>配置名</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/auth-storage-configs?name=aws_1&limit=1&offset=0' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "configs": [
        {
            "name": "aws_1",
            "type": "s3",
            "endpoint": "s3.cn-northwest-1.amazonaws.com.cn",
            "accesskeyId": "AKIKU7KYZCWGOTEV5GNE",
            "bucketName": "graviti-210415"
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListStorageConfigs

**获取配置列表**

**请求路径**

> **GET** /v1/storage-configs

**请求参数**

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>否</td><td>配置名</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/storage-configs?limit=1&offset=0' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "configs":[
        {
            "name":"AliCloud-oss-cn-shanghai",
            "filePath":"",
            "type":"oss",
            "isGravitiStorage":true
        }
    ],
    "offset":0,
    "recordSize":1,
    "totalCount":1
}
```

### CreateStorageConfigOSS

**创建OSS存储配置**

**请求路径**

> **POST** /v1/storage-configs/oss

**请求参数**

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>配置名称</td></tr><tr><td>filePath</td><td>string</td><td>是</td><td>文件存储路径</td></tr><tr><td>accesskeyId</td><td>string</td><td>是</td><td>accesskey id</td></tr><tr><td>accesskeySecret</td><td>string</td><td>是</td><td>accesskey secret</td></tr><tr><td>endpoint</td><td>string</td><td>是</td><td>Oss 的节点</td></tr><tr><td>bucketName</td><td>string</td><td>是</td><td>oss 的 bucket 名</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/storage-configs/oss' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "name": "configName",
   "filePath": "car",
   "accesskeyId": "AFIAU57BYHCWGOTEAV9GNE",
   "accesskeySecret": "secret",
   "endpoint": "oss-sn-hangzhou.aliyuncs.com",
   "bucketName": "testBucket"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateStorageConfigS3

**创建S3存储配置**

**请求路径**

> **POST** /v1/storage-configs/s3

**请求参数**

**Body**

<table><thead><tr><th width="211.9345554898482">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>配置名称</td></tr><tr><td>filePath</td><td>string</td><td>是</td><td>文件存储路径</td></tr><tr><td>accesskeyId</td><td>string</td><td>是</td><td>accesskey id</td></tr><tr><td>accesskeySecret</td><td>string</td><td>是</td><td>accesskey secret</td></tr><tr><td>endpoint</td><td>string</td><td>是</td><td>S3 的节点</td></tr><tr><td>bucketName</td><td>string</td><td>是</td><td>S3 的 bucket 名</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/storage-configs/s3' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "name": "configName",
   "filePath": "car",
   "accesskeyId": "AFIAU57BYHCWGOTEAV9GNE",
   "accesskeySecret": "secret",
   "endpoint": "s3-sn-hangzhou.aliyuncs.com",
   "bucketName": "testBucket"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateStorageConfigAzure

**创建Azure存储配置**

**请求路径**

> **POST** /v1/storage-configs/azure

**请求参数**

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>配置名称</td></tr><tr><td>filePath</td><td>string</td><td>是</td><td>文件存储路径</td></tr><tr><td>accesskeyId</td><td>string</td><td>是</td><td>Azure 的 account name</td></tr><tr><td>accesskeySecret</td><td>string</td><td>是</td><td>azure 的 account key</td></tr><tr><td>containerName</td><td>string</td><td>是</td><td>Azure 的 container 名</td></tr><tr><td>accountType</td><td>string</td><td>是</td><td>Azure 的 accountType</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/storage-configs/azure' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "name": "configName",
   "filePath": "car",
   "accesskeyId": "AFIAU57BYHCWGOTEAV9GNE",
   "accesskeySecret": "secret",
   "containerName": "test_container",
   "accountType": "Azure_china"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateStorageConfigLocalFs

**创建本地文件系统存储配置**

**请求路径**

> **POST** /v1/storage-configs/local

**请求参数**

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>配置名称</td></tr><tr><td>filePath</td><td>string</td><td>是</td><td>文件存储路径</td></tr><tr><td>endpoint</td><td>string</td><td>是</td><td>存储节点</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/storage-configs/local' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "name": "configName",
   "filePath": "car",
   "endpoint": "192.168.1.1:8888"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### DeleteStorageConfig

**删除storage config**

> **DELETE** /v1/storage-configs/{name}

**Path**

| 名称   | 是否必须 | 描述       |
| ---- | ---- | -------- |
| name | 是    | config 名 |

**请求示例**

```
curl --location --request DELETE '{service}/v1/storage-configs/configName' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateDataset

**创建数据集**

创建tensorbay数据集，默认支持版本管理，数据集名称不可重复

**请求路径**

> **POST** /v1/datasets

**请求参数**

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>数据集名字</td></tr><tr><td>alias</td><td>string</td><td>否</td><td>数据集别名</td></tr><tr><td>type</td><td>int</td><td>否</td><td>默认是0，0-普通数据集,1-融合数据集</td></tr><tr><td>configName</td><td>string</td><td>否</td><td>云配置名，根据对应配置创建数据集</td></tr><tr><td>isPublic</td><td>bool</td><td>否</td><td>数据集是否公开, 默认不公开</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "name": "my first dataset",
   "alias": "dataset alias",
   "type": 0,
   "configName": "example config name",
   "isPublic": true
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{
    "id": "154e35bae8954f09969ef8c9445efd2c"
}
```

* **id**: 创建的data set的ID

### DeleteDataset

**删除dataset**

> **DELETE** /v1/datasets/{id}

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### UpdateDataset

**更新dataset信息**

> **PATCH** /v1/datasets/{id}

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>否</td><td>dataset 名称, 如果传值不可为“”空值</td></tr><tr><td>alias</td><td>string</td><td>否</td><td>数据集别名</td></tr><tr><td>isPublic</td><td>bool</td><td>否</td><td>数据集是否公开，true 对应公开， false 对应私有</td></tr><tr><td>defaultBranch</td><td>string</td><td>否</td><td>数据集默认分支名</td></tr></tbody></table>

**请求示例**

```
curl --location --request PATCH '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c' \
--header 'x-token: {your_accesskey}'\
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "my dataset",
    "alias": "datasetAlias",
    "isPublic": false,
    "defaultBranch": "main"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListDataset

**获取数据集列表**

返回用户拥有的数据集列表：

* 个人用户获取个人账户下的数据集列表
* 团队用户获取所在企业下的数据集

**请求路径**

> **GET** /v1/datasets

**请求参数**

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>name</td><td>string</td><td>否</td><td>数据集名称</td></tr><tr><td>needFuzzyQuery</td><td>bool</td><td>否</td><td>默认false 若为true，则支持数据集名称模糊搜索</td></tr><tr><td>needTeamDataset</td><td>bool</td><td>否</td><td>默认false，当用户为团队用户且该值为true，则返回整个团队的数据集</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets?offset=0&limit=10'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "datasets": [
      {
        "id": "154e35bae8954f09969ef8c9445efd2c",
        "name": "my-great-data-set",
        "alias": "dataset alias",
        "defaultBranch": "main",
        "type": 0,
        "updateTime": 1604977282,
        "owner": "",
        "commitId": "00000000000000000000000000000000",
        "coverUrl": "https://example.com/image.jpg",
        "dataSize": 100,
        "dataCount": 10,
        "tabs": {
          "labelType": [{
            "id":"06181d4e05484c1fa011f585a9e255cf", 
            "name":"BOX2D"
            }
          ]
        }
      }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

* **datasets**: 数据集列表
  * **id**: 数据集id
  * **name**: 数据集名称
  * **alias**: 数据集别名
  * **defaultBranch**: 默认分支名
  * **type**: 数据集类型，0-普通数据集，1-融合数据集
  * **owner**: 数据集所有者
  * **commitId**: 该数据集最新的提交 ID
  * **coverUrl**: 封面路径
  * **dataCount**: 默认分支上最新提交的数据数量
  * **dataSize**: 默认分支上最新提交的数据大小
  * **updateTime**: 时间戳，更新时间
  * **tabs**: 标签字典，键为类型，值为标签数组

### GetDataset

**请求路径**

> **GET** /v1/datasets/{id}

**请求参数**

**PATH**

| 名称 | 是否必须 | 描述         |
| -- | ---- | ---------- |
| id | 是    | dataset id |

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "name": "my-great-data-set",
    "alias": "dataset alias",
    "coverUrl": "https://example.com/image.jpg",
    "type": 1,
    "defaultBranch": "main",
    "commitId": "00000000000000000000000000000000",
    "updateTime": 1604977282,
    "owner": "",
    "isPublic": false,
    "configName": "exampleConfigName"
}
```

### CreateBranch

**创建branch**

创建数据集新branch

**请求路径**

> **POST** /v1/datasets/{id}/branches

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>创建的branch名称</td></tr><tr><td>commit</td><td>string</td><td>是</td><td>从哪个commit切出branch, commit 可为 commit id, commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/branches' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "name": main2,
  "commit": "fde63f357daf46088639e9f57fd81cad"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{}
```

### DeleteBranch

**删除branch**

删除数据集branch

**请求路径**

> **DELETE** /v1/datasets/{id}/branches

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>branch名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/branches' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "name": main2
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListBranches

**获取branch列表**

获取数据集的branch列表

**请求路径**

> **GET** /v1/datasets/{id}/branches

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>name</td><td>string</td><td>否</td><td>分支名</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/branches?limit=1&offset=0' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "branches": [
        {
            "name": "main",
            "commitId": "fde63f357daf46088639e9f57fd81cad",
            "parentCommitId": "f68b1375454f459b8a486b8d1f4d9ddb",
            "title": "first commit",
            "description": "desc",
            "committer": {
                "name": "graviti",
                "date": 1616579313
            }
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### CreateDraft

**创建数据集草稿**

创建tensorbay数据集草稿, 目前仅支持一个分支上创建一个数据集草稿

**请求路径**

> **POST** /v1/datasets/{id}/drafts

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>title</td><td>string</td><td>是</td><td>草稿名称</td></tr><tr><td>branchName</td><td>string</td><td>否</td><td>branch 名称，缺省branch为main</td></tr><tr><td>description</td><td>string</td><td>否</td><td>草稿描述</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/drafts' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "title": "my first draft",
  "branchName": "main"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "draftNumber": 1
}
```

* **draftNumber**: 草稿编号

### UpdateDraft

**更新数据集草稿**

**请求路径**

> **PATCH** /v1/datasets/{id}/drafts/{draftNumber}

**请求参数**

**Path**

| 名称          | 是否必须 | 描述    |
| ----------- | ---- | ----- |
| id          | 是    | 数据集ID |
| draftNumber | 是    | 草稿编号  |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>title</td><td>string</td><td>否</td><td>草稿名称</td></tr><tr><td>description</td><td>string</td><td>否</td><td>草稿描述</td></tr><tr><td>status</td><td>string</td><td>否</td><td>草稿状态, OPEN 或者 CLOSED</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/drafts/1' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "title": "my first draft",
  "description": "desc change",
  "status": "OPEN"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListDraft

**获取数据集草稿列表**

获取数据集的草稿列表

**请求路径**

> **GET** /v1/datasets/{id}/drafts

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>branchName</td><td>string</td><td>否</td><td>基于数据分支名进行筛选</td></tr><tr><td>status</td><td>string</td><td>否</td><td>基于状态进行筛选，支持 "OPEN", "COMMITTED", "CLOSED" 和 "ALL"，默认为"OPEN"</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/drafts?limit=1&offset=0' \
--header 'x-token: {your_accesskey}'  
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "drafts": [
    {
      "branchName": "main",
      "title": "my first draft",
      "number": 1,
      "description": "desc",
      "status": "OPEN",
      "parentCommitId": "00000000000000000000000000000000",
      "author": "aaa",
      "updateAt": 1616579313
    }
  ],
  "offset": 0,
  "recordSize": 1,
  "totalCount": 10
}
```

### CommitDataset

**提交数据集**

将待提交状态的数据集更新为已提交状态，数据集一旦发布之后，该数据集不可再修改。

**请求路径**

> **POST** /v1/datasets/{id}/commits

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>title</td><td>string</td><td>是</td><td>提交信息,字符数量应小于255</td></tr><tr><td>description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>tag</td><td>string</td><td>否</td><td>数据集版本标签，字符数量应大于2小于80</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c'\
--header 'x-token: {your_accesskey}'\
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": "1",
  "title": "checkout a new version dataset",
  "description": "some desc",
  "tag": "v1.0"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "commitId": "fde63f357daf46088639e9f57fd81cad"
}
```

### ListCommit

**获取commit列表**

获取数据集的commit列表

**请求路径**

> **GET** /v1/datasets/{id}/commits

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name, 缺省为默认branch</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/commits?commit=main&limit=1&offset=0' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "commits": [
    {
      "parentCommitId": "0d213a06a85d46fa8662946bdb1afe7e",
      "commitId": "fde63f357daf46088639e9f57fd81cad",
      "title": "checkout a new version dataset",
      "description": "some desc",
      "dataCount": 10,
      "committer": {
        "date": 1617268600,
        "name": "graviti"
      }
    }
  ],
  "offset": 0,
  "recordSize": 1,
  "totalCount": 10
}
```

### CreateTag

**创建tag**

创建tag

**请求路径**

> **POST** /v1/datasets/{id}/tags

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>name</td><td>string</td><td>是</td><td>tag 名称,字符数量应大于2小于80</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/tags' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "commit": "fde63f357daf46088639e9f57fd81cad",
  "name": "v1"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{}
```

### DeleteTag

**删除tag**

删除tag

**请求路径**

> **DELETE** /v1/datasets/{id}/tags

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>是</td><td>tag 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/tags' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "name": "v1"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListTag

**获取tag**

获取数据集的tag列表

**请求路径**

> **GET** /v1/datasets/{id}/tags

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>name</td><td>string</td><td>否</td><td>tag 名称,若存在，返回该tag信息</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/tags?name=v1&limit=1&offset=0' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "tags": [
        {
            "name": "v1",
            "commitId": "fde63f357daf46088639e9f57fd81cad",
            "parentCommitId": "f68b1375454f459b8a486b8d1f4d9ddb",
            "title": "first commit",
            "description": "some desc",
            "committer": {
                "name": "graviti",
                "date": 1617268600
            }
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### **U**pdateNote

**更新数据集notes** 更新数据集note **请求路径**

> **PATCH** /v1/datasets/{id}/notes

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="241">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>draft 序号</td></tr><tr><td>binPointCloudFields</td><td>string[]</td><td>否</td><td>bin格式点云的维度名称</td></tr><tr><td>isContinuous</td><td>bool</td><td>否</td><td>是否连续</td></tr></tbody></table>

**请求示例**

```
curl --location --request PATCH '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/notes' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": 1,
  "fileFormat": {
    "draftNumber": 1,
    "binPointCloudFields": [
       "X",
       "Y",
       "Z",
       "Intensity"
    ],
    "isContinuous": true
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetNote

**获取note**

获取数据集的note

**请求路径**

> **GET** /v1/datasets/{id}/notes

**请求参数** **Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>当commit不为空且正确时，查询该commit的data数据</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/notes?draftNumber=1' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "isContinuous": true，
    "binPointCloudFields": [
        "X",
        "Y",
        "Z",
        "Intensity"
    ]
}
```

### GetUser

**获取用户信息**

**请求路径**

> **GET** /v1/users

**请求示例**

```
curl --location --request GET '{service}/v1/users' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "id":"f74836a28f2051d97d60944c48b766d1",
    "nickname":"Graviti",
    "email":null,
    "mobile":"1234567890",
    "description":"",
    "team":{
      "id":"xxx",
      "name":"teamName",
      "email":"team email",
      "description":"team desc"
    }
}
```

### ListBenchmarks

**获取benchmark列表**

**请求路径**

> **GET** /v1/benchmarks

**请求参数**

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/benchmarks' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "benchmarks":[
        {
            "name":"test",
            "benchmarkId":"675284b0926b4b96a725ef3fed77d0aa"
        }
    ],
    "offset":0,
    "recordSize":1,
    "totalCount":1
}
```

### CreateEvaluation

**创建评估**

**请求路径**

> **POST** /v1/benchmarks/{benchmarkId}/evaluations

**请求参数**

**Path**

| 名称          | 是否必须 | 描述           |
| ----------- | ---- | ------------ |
| benchmarkId | 是    | Benchmark ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>datasetId</td><td>string</td><td>是</td><td>数据集Id</td></tr><tr><td>commitId</td><td>string</td><td>是</td><td>commit Id</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/benchmarks/675284b0926b4b96a725ef3fed77d0aa/evaluations' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "datasetId": "11df9efe26644d0d99c566325779b415",
   "commitId": "ce3be905ba0f465c84c9fc39e53a89f8"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{
    "evaluationId": "154e35bae8954f09969ef8c9445efd2c"
}
```

### ListEvaluations

**获取评估列表**

**请求路径**

> **GET** /v1/benchmarks/{benchmarkId}/evaluations

**请求参数**

**Path**

| 名称          | 是否必须 | 描述           |
| ----------- | ---- | ------------ |
| benchmarkId | 是    | Benchmark ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/benchmarks/675284b0926b4b96a725ef3fed77d0aa/evaluations' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "evaluations":[
        {
            "name":"",
            "evaluationId":"aa50f8a172bc4064abab4d98a1283080",
            "number":0,
            "createdAt":1647353362,
            "finishedAt":null,
            "author":"Graviti",
            "status":"failed"
        }
    ],
    "offset":0,
    "recordSize":1,
    "totalCount":1
}
```

### GetEvaluationResult

**获取评估结果**

**请求路径**

> **GET** /v1/benchmarks/{benchmarkId}/evaluations/{evaluationId}/results

**请求参数**

**Path**

| 名称           | 是否必须 | 描述           |
| ------------ | ---- | ------------ |
| benchmarkId  | 是    | Benchmark ID |
| evaluationId | 是    | 评估 ID        |

**请求示例**

```
curl --location --request GET '{service}/v1/benchmarks/675284b0926b4b96a725ef3fed77d0aa/evaluations/aa50f8a172bc4064abab4d98a1283080/results' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "result":{
        "categories":{
        },
        "overall":{
        }
    }
}
```

### CreateOrder

**创建订单(团队账户可用)**

**请求路径**

> **POST** /v1/orders

**请求参数**

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>datasetId</td><td>string</td><td>是</td><td>数据集Id</td></tr><tr><td>commitId</td><td>string</td><td>是</td><td>提交 ID</td></tr><tr><td>name</td><td>string</td><td>是</td><td>需求订单名称</td></tr><tr><td>deliveryTime</td><td>string</td><td>是</td><td>交付时间 例如 2021-12-14</td></tr><tr><td>labelType</td><td>string</td><td>是</td><td>标注类型 例如 BOX2D</td></tr><tr><td>serviceProvider</td><td>string</td><td>否</td><td>服务商名称 例如 格物钛</td></tr><tr><td>requirementDocumentUrl</td><td>string</td><td>否</td><td>需求文档地址</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/orders' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "datasetId": "11df9efe26644d0d99c566325779b415",
   "commitId": "ce3be905ba0f465c84c9fc39e53a89f8",
   "name": "order name",
   "deliveryTime": "2022-02-22",
   "labelType": "BOX2D"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{
    "id": "154e35bae8954f09969ef8c9445efd2c"
}
```

### CreateTask

**创建任务**

**请求路径**

> **POST** /v1/datasets/{id}/jobs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="231">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>title</td><td>string</td><td>是</td><td>任务标题</td></tr><tr><td>jobType</td><td>string</td><td>是</td><td>任务类型 squashAndMerge,basicSearch</td></tr><tr><td>description</td><td>string</td><td>否</td><td>任务描述</td></tr><tr><td>maxRetries</td><td>int</td><td>否</td><td>任务最大重试次数</td></tr><tr><td>arguments</td><td>map</td><td>否</td><td>任务参数 squashAndMerge</td></tr><tr><td>├-sourceBranchName</td><td>string</td><td>是</td><td>源分支</td></tr><tr><td>├-targetBranchName</td><td>string</td><td>是</td><td>目标分支</td></tr><tr><td>├-strategy</td><td>string</td><td>否</td><td>当不是用已有操作时移动重名时的策略，可选项有：abort，override 和 skip，缺省为 abort</td></tr><tr><td>├-title</td><td>string</td><td>是</td><td>标题</td></tr><tr><td>├-description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>arguments</td><td>map</td><td>否</td><td>任务参数 basicSearch</td></tr><tr><td>├-commit</td><td>string</td><td>是</td><td>commit ID</td></tr><tr><td>├-tag</td><td>string</td><td>否</td><td>tag名</td></tr><tr><td>├-branch</td><td>string</td><td>否</td><td>分支名</td></tr><tr><td>├-draft</td><td>string</td><td>否</td><td>草稿编号</td></tr><tr><td>├-unit</td><td>string</td><td>是</td><td>搜索单位 file, frame</td></tr><tr><td>├-segmentNames</td><td>string[]</td><td>是</td><td>segment 名字列表</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/4a9e62ea88fd47b9b4b5f6bbbfe8ef64/jobs' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
   "title": "taskTitle",
   "jobType": "squashAndMerge",
   "arguments": {
     "sourceBranchName":"main",
     "targetBranchName":"test",
     "title":"argTitle"
   }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{
    "jobId":"7e412ceb61c943178e70fa7b032a9d10",
    "createdAt":1647489812
}
```

### DeleteTask

**删除Job**

**请求路径**

> **DELETE** /v1/datasets/{id}/jobs/{taskId}

**请求参数** **Path**

| 名称     | 是否必须 | 描述     |
| ------ | ---- | ------ |
| id     | 是    | 数据集ID  |
| taskId | 是    | job ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>jobType</td><td>string</td><td>否</td><td>任务类型 squashAndMerge,basicSearch</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/jobs/7e412ceb61c943178e70fa7b032a9d10' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### StopTask

**中止Job**

**请求路径**

> **POST** /v1/datasets/{id}/jobs/{taskId}/abort

**请求参数** **Path**

| 名称     | 是否必须 | 描述     |
| ------ | ---- | ------ |
| id     | 是    | 数据集ID  |
| taskId | 是    | job ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>jobType</td><td>string</td><td>否</td><td>任务类型 squashAndMerge,basicSearch</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/jobs/7e412ceb61c943178e70fa7b032a9d10/abort' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetTask

**获取job详情**

**请求路径**

> **GET** /v1/datasets/{id}/jobs/{taskId}

**请求参数**

**Path**

| 名称     | 是否必须 | 描述     |
| ------ | ---- | ------ |
| id     | 是    | 数据集ID  |
| taskId | 是    | job ID |

**Query**

<table><thead><tr><th width="154.7142857142857">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>jobType</td><td>string</td><td>否</td><td>任务类型 squashAndMerge,basicSearch</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/jobs/7e412ceb61c943178e70fa7b032a9d10' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "title":"task title",
    "jobId":"7e412ceb61c943178e70fa7b032a9d10",
    "jobType":"squashAndMerge",
    "arguments":{
        "description":"argDesc",
        "sourceBranchName":"branch1",
        "strategy":"abort",
        "targetBranchName":"main",
        "title":"argTitle"
    },
    "createdAt":1647489813,
    "startedAt":1647489813,
    "status":"FAILED",
    "errorMessage":"",
    "description":"task desc ",
    "result":{
        "draftNumber":4
    }
}
```

### ListTasks

**获取job列表**

**请求路径**

> **GET** /v1/datasets/{id}/jobs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>jobType</td><td>string</td><td>否</td><td>任务类型 squashAndMerge,basicSearch</td></tr><tr><td>status</td><td>string</td><td>否</td><td>Job状态, FAILED, SUCCESS</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>需大于0，默认128，单次最多获取128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/jobs' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "jobs":[
        {
            "title":"task title",
            "jobId":"7e412ceb61c943178e70fa7b032a9d10",
            "jobType":"squashAndMerge",
            "arguments":{
                "description":"argDesc",
                "sourceBranchName":"branch1",
                "strategy":"abort",
                "targetBranchName":"main",
                "title":"argTitle"
            },
            "createdAt":1647489813,
            "startedAt":1647489813,
            "status":"FAILED",
            "errorMessage":"",
            "description":"task desc ",
            "result":{
                "draftNumber":4
            }
        }
    ],
    "offset":0,
    "recordSize":128,
    "totalCount":1
}
```

### RetryTask

**重试Job**

**请求路径**

> **POST** /v1/datasets/{id}/jobs/{taskId}/retry

**请求参数** **Path**

| 名称     | 是否必须 | 描述     |
| ------ | ---- | ------ |
| id     | 是    | 数据集ID  |
| taskId | 是    | job ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>jobType</td><td>string</td><td>否</td><td>任务类型 squashAndMerge,basicSearch</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/jobs/7e412ceb61c943178e70fa7b032a9d10/retry' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```


# Data Operation

### UploadData

**上传数据到数据集**

用户往数据集中上传数据。

1. 获取上传数据凭证
2. 直传数据到oss

#### GetPolicy

获取上传凭证

**请求路径**

> GET /v1/datasets/{id}/policies

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th width="150">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>数据集分割区</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>expired</td><td>int</td><td>否</td><td>令牌过期时间，以秒为单位，不可为负，默认60, 大于300会按照300处理</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/policies?expired=60&draftNumber=1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
	"result": {
		"OSSAccessKeyId": "OSSACCESSKEYID",
		"Signature": "QbkCDeZtX37gb2zoemel3VCxz3k=",
		"policy": "eyJjb25kaXRpb25zIjpbWyJzdGFydHMtd2l0aCIsIiRrZXkiLCI4ZjgzNWVlOWNmZWIwZDRlZjBkMmQyODJmOTdlNzM1OS9jOTQ4YTY0NC03NTJjLTRkOTItOTI3Yi1mNjkwYzYyZGM5Y2YvIl1dLCJleHBpcmF0aW9uIjoiMjAyMC0xMS0xM1QwMzozNjo1OVoifQ==",
		"success_action_status": "200",
        "multipleUploadLimit": 10
	},
	"extra": {
        "backendType": "oss",
		"host": "https://content-store-fat-version.oss-cn-qingdao.aliyuncs.com",
        "objectPrefix": ""
	},
	"expireAt": 1605238559
}
```

***

#### 根据获取的凭证前端直传

获取的result直接反序列化，进行oss直传即可，extra host是访问地址

**请求路径**

> POST 源自从policy接口获取的result字段"extra"中的"host"

**请求参数**

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>OSSAccessKeyId</td><td>string</td><td>是</td><td>与之前获取的凭证返回值OSSAccessKeyId一致</td></tr><tr><td>Signature</td><td>string</td><td>是</td><td>与之前获取的凭证返回值Signature一致</td></tr><tr><td>policy</td><td>string</td><td>是</td><td>与之前的获取凭证返回的policy一致</td></tr><tr><td>key</td><td>string</td><td>是</td><td>之前的获取凭证返回的objectPrefix + 计算文件的cheksum值。用sha1加密算法获取文件checksum值</td></tr><tr><td>file</td><td>file</td><td>是</td><td>文件</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST 'https://content-store-version.oss-cn-qingdao.aliyuncs.com' \
--form 'OSSAccessKeyId=OSSACCESSKEYID' \
--form 'Signature=jVbcWO5v4Ujm7duQX+gqb0UBT2E=' \
--form 'policy=eyJjb25kaXRpb25zIjpbWyJzdGFydHMtd2l0aCIsIiRrZXkiLCJlNWEyN2FlOGI3NDM4N2NlMjA4YTI2YjVjMzBjZGI2MS9mNDhjOGY3ZC0xOGVmLTQ2OGEtYjA2ZS0yNzg5MzQ3MDVhNTMvLnNlZ21lbnQvZGF5VGVzdC9kYXlTZXF1ZW5jZTAxLy5zZWdtZW50X2VuZC8iXV0sImV4cGlyYXRpb24iOiIyMDIwLTEyLTE0VDA5OjAwOjI1WiJ9' \
--form 'key={objectPrefix}{checksum}' \
--form 'file=@/{localFile}'
```

**返回结果**

```
# 响应状态
HttpStatus 204
# 响应结果
返回为空
{}
```

***

#### PutCallback

上传完毕回调

**请求路径**

> PUT /v1/datasets/{id}/callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>checksum</td><td>string</td><td>是</td><td>上传的文件的checksum,用sha1加密算法获取文件checksum值</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>远程的文件路径，例如a.jpg</td></tr><tr><td>sensorName</td><td>string</td><td>否</td><td>融合类数据上传必传，传感器名称</td></tr><tr><td>frameId</td><td>string</td><td>否</td><td>融合类数据上传必传,帧id, ulid格式，参考 https://github.com/oklog/ulid</td></tr><tr><td>timestamp</td><td>float</td><td>否</td><td>融合类数据上传非必传</td></tr><tr><td>label</td><td>map</td><td>否</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr><tr><td>fileSize</td><td>int</td><td>否</td><td>文件大小, 若未传，服务端将计算文件大小</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/callback' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": "1",
  "remotePath": "car1.jpg",
  "checksum": "b9676b075dff6d3333bbebb7cdd154f3631bb926",
  "frameId": "01D78XYFJ1PRM1WPBCBT3VHMNV",
  "segmentName": "car",
  "sensorName": "camera_car",
  "timestamp": 1532402934,
  "label":{},
  "fileSize": 10
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

#### MultiPutCallback

上传完毕批量回调

**请求路径**

> PUT /v1/datasets/{id}/multi/callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>objects</td><td>[]object</td><td>是</td><td>批量回调的object</td></tr><tr><td>  ├─checksum</td><td>string</td><td>是</td><td>上传的文件的checksum,用sha1加密算法获取文件checksum值</td></tr><tr><td>  ├─remotePath</td><td>string</td><td>是</td><td>远程的文件路径，例如a.jpg</td></tr><tr><td>  ├─sensorName</td><td>string</td><td>否</td><td>融合类数据上传必传，传感器名称</td></tr><tr><td>  ├─frameId</td><td>string</td><td>否</td><td>融合类数据上传必传,帧id, ulid格式，参考 https://github.com/oklog/ulid</td></tr><tr><td>  ├─timestamp</td><td>float</td><td>否</td><td>融合类数据上传非必传</td></tr><tr><td>  ├─label</td><td>map</td><td>否</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr><tr><td>  ├─fileSize</td><td>int</td><td>否</td><td>文件大小, 若未传，服务端将计算文件大小</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/callback' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": "1",
  "segmentName": "car",
  "objects": [
        {
          "remotePath": "car1.jpg",
          "checksum": "b9676b075dff6d3333bbebb7cdd154f3631bb926",
          "frameId": "01D78XYFJ1PRM1WPBCBT3VHMNV",
          "sensorName": "camera_car",
          "timestamp": 1532402934,
          "label":{},
          "fileSize": 10
        }
  ]
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### CreateSegment

**创建segment**

> **POST** /v1/datasets/{id}/segments

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>move</td><td>bool</td><td>否</td><td>从已有剪切创建</td></tr><tr><td>copy</td><td>bool</td><td>否</td><td>从已有复制创建</td></tr><tr><td>multipleMove</td><td>bool</td><td>否</td><td>从多个已有剪切创建</td></tr><tr><td>multipleCopy</td><td>bool</td><td>否</td><td>从多个已有复制创建</td></tr></tbody></table>

**Body**

<table><thead><tr><th width="239">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>name</td><td>string</td><td>否</td><td>segment 名称, 当不是用已有操作时 不可为null,name中不可包含".","\"</td></tr><tr><td>description</td><td>string</td><td>否</td><td>segment 描述</td></tr><tr><td>strategy</td><td>string</td><td>否</td><td>当不是用已有操作时移动重名时的策略，可选项有：abort，override 和 skip，缺省为 abort</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>目标数据分段名, 从已有单个创建时使用</td></tr><tr><td>segmentNames</td><td>string[]</td><td>否</td><td>目标数据分段名, 从已有多个创建时使用</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 从已有单个创建时使用且必须</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 从已有多个创建时使用且必须</td></tr><tr><td>  ├─ segmentName</td><td>string[]</td><td>否</td><td>分区名 列表</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
        "draftNumber":1,
        "name": "graviti",
        "description": "this is a segment"
    }'
```

**返回结果**

```
# 响应状态
HttpStatus 201
# 响应结果
{}
```

### DeleteSegment

**删除Segment**

> **DELETE** /v1/datasets/{id}/segments

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber":1,
    "segmentName": "car",
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListSegment

**获取数据集segment**

> **GET** /v1/datasets/{id}/segments

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认update_at（更新时间）, 目前支持create_at（创建时间）和update_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments?commit=v1&offset=0&limit=2'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
{
  "segments": [
    {
        "name": "car",
        "description": "this is car"
    },
    {
        "name": "graviti",
        "description": "this is a segment"
    }
  ],
  "offset": 0,
  "recordSize": 2,
  "totalCount": 10
}
```

### UploadLabelCatalog

**上传labelCatalog**

> **PUT** /v1/datasets/{id}/labels/catalogs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="235">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>catalog</td><td>map</td><td>是</td><td>标注类型。<br><strong>key:</strong><br>CLASSIFICATION: 分类标注<br>BOX2D: 2D 框标注<br>BOX3D: 3D 框标注<br>POLYGON2D: 2D 多边形标注<br>POLYLINE2D: 2D 折线标注<br>KEYPOINTS2D: 2D 关键点标注<br>CUBOID2D: 2D 立体框标注<br>SENTENCE: 语音转写标注<br><strong>以上标注类型，每类标注类型都有自己的结构，具体可看示例或参考</strong><a href="https://tensorbay-python-sdk.graviti.com/en/latest/reference/label_format/index.html"><strong>标签格式</strong></a><strong>，请严格遵循该标注类型格式传值</strong></td></tr><tr><td>├─description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>├─categoryDelimiter</td><td>string</td><td>否</td><td>用于分割category父子关系的分割符，缺省为不支持父子关系，推荐分隔符为"."</td></tr><tr><td>├─isTracking</td><td>bool</td><td>否</td><td>是否是追踪</td></tr><tr><td>├─categories</td><td>object[]</td><td>否</td><td>item 类型: object，category 列表，包含所有 category 信息</td></tr><tr><td>       ├─name</td><td>string</td><td>是</td><td>category 名称</td></tr><tr><td>       ├─description</td><td>string</td><td>否</td><td>category 描述</td></tr><tr><td>├─attributes</td><td>object[]</td><td>否</td><td>item 类型，包含属性相关信息</td></tr><tr><td>      ├─name</td><td>string</td><td>是</td><td>attribute 名称</td></tr><tr><td>      ├─type</td><td>string/string[]</td><td>否</td><td>attribute type:<strong>string, boolean, integer, number, array, null</strong>,例如"interger", ["integer", "null"]</td></tr><tr><td>      ├─minimum</td><td>float</td><td>否</td><td>属性值最小值，当属性为数字时该字段定义了其最小值(闭区间)</td></tr><tr><td>      ├─maximum</td><td>float</td><td>否</td><td>属性值最大值，当属性为数字时该字段定义了其最大值(闭区间)</td></tr><tr><td>      ├─description</td><td>string</td><td>否</td><td>属性描述</td></tr><tr><td>      ├─enum</td><td>string[]</td><td>否</td><td>属性值选项，表示该属性所有的可能的选项</td></tr><tr><td>      ├─parentCategories</td><td>string[]</td><td>否</td><td>关联类别，表示该属性隶属于哪些类别，为空则表示全局属性</td></tr><tr><td>      ├─items</td><td>object[]</td><td>否</td><td>item类型,多选属性定义，(当"type"字段为"array"时，表示多选属性)</td></tr><tr><td>            ├─type</td><td>string/string[]</td><td>否</td><td>多选属性值类型:<strong>string, boolean, integer, number, array, null</strong>,例如"interger", ["integer", "null"]</td></tr><tr><td>            ├─minimum</td><td>float</td><td>否</td><td>多选属性值最小值(闭区间)</td></tr><tr><td>            ├─maximum</td><td>float</td><td>否</td><td>多选属性值最大值(闭区间)</td></tr><tr><td>            ├─enum</td><td>string[]</td><td>否</td><td>多选属性值选项，表示该属性所有的可能的选项</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/catalogs'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "draftNumber": 1,
  "BOX2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "BOX3D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "CLASSIFICATION": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog"
  },
  "CUBOID2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "KEYPOINTS2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false,
    "keypoints": [
      {
        "description": "this is key point",
        "names": [
          "ear",
          "leg",
          "mouse"
        ],
        "number": 3,
        "parentCategories": [],
        "skeleton": [
          [
            0,
            1
          ],
          [
            1,
            2
          ]
        ],
        "visible": "1"
      }
    ]
  },
  "POLYGON2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "POLYLINE2D": {
    "attributes": [
      {
        "description": "attribute 'traffic_light_color' is a multiple choice attribute",
        "items": {
          "enum": [
            "unknown",
            "red",
            "yellow",
            "green"
          ]
        },
        "name": "traffic_light_color",
        "parentCategories": [
          "traffic_light"
        ],
        "type": "array"
      },
      {
        "description": "attribute 'visibility' is a float value between 0 to 1",
        "maximum": 1,
        "minimum": 0,
        "name": "visibility",
        "type": "number"
      },
      {
        "description": "this is color",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "name": "color",
        "parentCategories": [
          "car"
        ],
        "type": "string"
      }
    ],
    "categories": [
      {
        "description": "this is a car",
        "name": "car"
      }
    ],
    "categoryDelimiter": ".",
    "description": "this is a description of label catalog",
    "isTracking": false
  },
  "SENTENCE": {
    "attributes": [
      {
        "description": "this is a description of attribute",
        "enum": [
          "red",
          "blue",
          "green"
        ],
        "items": {
          "enum": [
            "red",
            "blue",
            "green"
          ],
          "maximum": 10,
          "minimum": 0,
          "type": {}
        },
        "maximum": 10,
        "minimum": 0,
        "name": "color",
        "parentCategories": [],
        "type": {}
      }
    ],
    "description": "this is a description of label catalog",
    "isSample": false,
    "lexicon": "[[\"啊\", \"aa\", \"a1\"], [\"阿婆\": \"aa\", \"a1\", \"p\", \"o2\"], [\"爱\", \"aa\", \"ai4\"], [\"爱祖国\",\"aa\", \"ai4\", \"z\", \"u3\", \"g\", \"uo2\"]]",
    "sampleRate": 32
  }
}'
```

**返回结果**

```
HttpStatus 200
{}
```

### GetLabelCatalog

**获取数据集标签目录**

> **GET** /v1/datasets/{id}/labels/catalogs

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/catalogs?commit=v1'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "catalog": {
    "BOX2D": {
      "attributes": [
        {
          "name": "color"
        }
      ],
      "categories": [
        {
          "description": "hello",
          "name": "car"
        }
      ]
    }
  }
}
```

### UploadSensor

**上传sensor**

> **POST** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th width="248.79397659696906">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>name</td><td>string</td><td>是</td><td>sensor 名称</td></tr><tr><td>type</td><td>string</td><td>是</td><td>sensor 类型</td></tr><tr><td>description</td><td>string</td><td>否</td><td>描述</td></tr><tr><td>extrinsics</td><td>object</td><td>否</td><td>sensor 外参</td></tr><tr><td>├─rotation</td><td>object</td><td>否</td><td>旋转矩阵</td></tr><tr><td>       ├─w</td><td>float</td><td>是</td><td>w</td></tr><tr><td>       ├─x</td><td>float</td><td>是</td><td>x</td></tr><tr><td>       ├─y</td><td>float</td><td>是</td><td>y</td></tr><tr><td>       ├─z</td><td>float</td><td>是</td><td>z</td></tr><tr><td>├─translation</td><td>object</td><td>否</td><td>平移矩阵</td></tr><tr><td>       ├─x</td><td>float</td><td>是</td><td>x</td></tr><tr><td>       ├─y</td><td>float</td><td>是</td><td>y</td></tr><tr><td>       ├─z</td><td>float</td><td>是</td><td>z</td></tr><tr><td>intrinsics</td><td>object</td><td>否</td><td>sensr 内参（仅相机类设备需要提供内参）</td></tr><tr><td>├─cameraMatrix</td><td>object</td><td>否</td><td></td></tr><tr><td>       ├─cx</td><td>float</td><td>是</td><td>cx</td></tr><tr><td>       ├─cy</td><td>float</td><td>是</td><td>cy</td></tr><tr><td>       ├─fx</td><td>float</td><td>是</td><td>fx</td></tr><tr><td>       ├─fy</td><td>float</td><td>是</td><td>fy</td></tr><tr><td>       ├─skew</td><td>float</td><td>否</td><td>skew</td></tr><tr><td>├─distortionCoefficients</td><td>object</td><td>否</td><td>畸变系数 (p1, p2, k1, k2, k3,还可以有"k4", "k5", "k6"等等，给的越多计算越精确)</td></tr><tr><td>       ├─p1</td><td>float</td><td>否</td><td>p1</td></tr><tr><td>       ├─p2</td><td>float</td><td>否</td><td>p2</td></tr><tr><td>       ├─k1</td><td>float</td><td>否</td><td>k1</td></tr><tr><td>       ├─k2</td><td>float</td><td>否</td><td>k2</td></tr><tr><td>       ├─k3</td><td>float</td><td>否</td><td>k3</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "description": "This is a example camera sensor",
  "extrinsics": {
    "rotation": {
      "w": 0.6924185592174665,
      "x": -0.7031619420114925,
      "y": -0.11648342771943819,
      "z": 0.11203317912370753
    },
    "translation": {
      "x": 1.03569100218,
      "y": 0.484795032713,
      "z": 1.59097014818
    }
  },
  "intrinsics": {
    "cameraMatrix": {
      "cx": 1256.7414812095406,
      "cy": 492.7757465151356,
      "fx": 1256.7414812095406,
      "fy": 792.1125740759628,
      "skew": 122.7757465151356
    },
    "distortionCoefficients": {
      "k1": 0.12,
      "k2": 0.33,
      "k3": 0.13,
      "k4": 0.93,
      "k5": 0.23,
      "p1": 1,
      "p2": 0.3
    }
  },
  "name": "camera_01",
  "segmentName": "car",
  "type": "CAMERA"
}'
```

**返回结果**

```
HttpStatus 200
{}
```

### DeleteSensor

**删除sensor**

> **DELETE** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>sensorName</td><td>string</td><td>是</td><td>sensor 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "car",
    "sensorName": "sensor1",
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListSensor

**获取sensor**

> **GET** /v1/datasets/{id}/sensors

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/sensors?segmentName=car&commit=v1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "sensors": [
        {
            "name": "sensor1",
            "type": "camera",
            "extrinsics": {
                "rotation": {
                    "w": 1.1,
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                },
                "translation": {
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                }
            },
            "intrinsics": {
                "cameraMatrix": {
                    "cx": 1.1,
                    "cy": 1.2,
                    "fx": 1.1,
                    "fy": 1.2,
                    "skew": 1.3
                },
                "distortionCoefficient": {
                    "k1": 1.4,
                    "k2": 1.5,
                    "k3": 1.6,
                    "k4": 1.7,
                    "k5": 1.8,
                    "k6": 1.9,
                    "p1": 1.2,
                    "p2": 1.3
                }
            },
            "description": "this is a sensor"
        },
        {
            "name": "sensor2",
            "type": "camera",
            "extrinsics": {
                "rotation": {
                    "w": 1.1,
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                },
                "translation": {
                    "x": 1.2,
                    "y": 1.3,
                    "z": 1.4
                }
            },
            "intrinsics": {
                "cameraMatrix": {
                    "cx": 1.1,
                    "cy": 1.2,
                    "fx": 1.1,
                    "fy": 1.2,
                    "skew": 1.3
                },
                "distortionCoefficient": {
                    "k1": 1.4,
                    "k2": 1.5,
                    "k3": 1.6,
                    "k4": 1.7,
                    "k5": 1.8,
                    "k6": 1.9,
                    "p1": 1.2,
                    "p2": 1.3
                }
            },
            "description": "this is a sensor"
        }
    ]
}
```

### ListData

**获取数据集数据列表**

> **GET** /v1/datasets/{id}/data

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data?draftNumber=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

普通数据集

```
{
    "segmentName": "car",
    "type": 0,
    "data": [{"remotePath": "car.jpg."}],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListDataDetails

**获取数据集数据详情列表**

> **GET** /v1/datasets/{id}/data/details

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径名</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/details?draftNumber=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

普通数据集

```
{
    "segmentName": "car",
    "type": 0,
    "dataDetails": [{"remotePath": "car.jpg."}],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
{
    "segmentName": "car",
    "type": 1,
    "dataDetails": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListDataUri

**获取数据资源地址**

> **GET** /v1/datasets/{id}/data/urls

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径，若传值，则查询具体此数据的url</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>数据所在分区</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网地址</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认按照名字（remotePath）排序, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/urls?draftNumber=1&remotePath=graviti.jpg&segmentName=car' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "offset": 0,
    "recordSize": 5,
    "totalCount": 5,
    "segmentName": "car",
    "urls": [
        {
            "remotePath": "第二段_00000010.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
        },
        {
            "remotePath": "第二段_00040820.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040820.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DihdFjHDtE3xEyIx3eGbTmN%2B%2Bzc%3D&versionId=CAEQPRiBgMD_pOmEshciIGFjYjVjY2FjYmZkMzRjYjVhZTQ5ZjQxZWMwMzhkOTMx"
        },
        {
            "remotePath": "第二段_00040890.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040890.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=pwhm9liDx9%2BbDp2VlPghd1Kw0as%3D&versionId=CAEQPRiBgMD0pemEshciIGExZDdlOTBjMmQxMDQxMmFiM2QxMTAzNmU3N2I5ODFk"
        },
        {
            "remotePath": "第二段_00040900.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040900.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=GpvY%2BJqbX7qKA70E7t58bRVn%2FcI%3D&versionId=CAEQPRiBgMC9p.mEshciIGY2YzIzNGZmM2EyZDQwMzZiODc4MzNmMmVlY2E0MTAy"
        },
        {
            "remotePath": "第二段_00040940.jpg",
            "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00040940.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=TguAbiIM0pjWFse1S0MQRUbMuBg%3D&versionId=CAEQPRiBgIDLqemEshciIGM2YmRkZGJlNmY2OTQ5NmViNTEzMDg0NjFmNjczNmYw"
        }
    ]
}
```

融合数据集

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "第二段_00000010.jpg",
                    "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### ListMaskUrls

**获取标注url列表**

> **GET** /v1/datasets/{id}/masks/urls

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据路径名</td></tr><tr><td>maskType</td><td>string</td><td>是</td><td>mask 标注类型，可选项有 "SEMANTIC_MASK", "INSTANCE_MASK" 和 "PANOPTIC_MASK"</td></tr><tr><td>isInternal</td><td>bool</td><td>否</td><td>是否返回内网上传地址</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最高128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/masks/urls?draftNumber=1&segmentName=car&maskType=SEMANTIC_MASK'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "offset": 0,
    "recordSize": 5,
    "totalCount": 5,
    "segmentName": "car",
    "urls": ["url1","url2"]
}
```

融合数据集

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segmentName": "car",
    "type": 1,
    "data": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "frameIndex": 1,
            "frame": [
                {
                    "sensorname": "camera_car",
                    "remotePath": "第二段_00000010.jpg",
                    "url": "https://content-store-dev-version.oss-cn-qingdao.aliyuncs.com/61457d9174d2367811a2adae3ad94eae%2F63bedc17-8b4f-423f-893c-42b9ceff028e%2F%E7%AC%AC%E4%BA%8C%E6%AE%B5_00000010.jpg?Expires=1611304780&OSSAccessKeyId=OSSACCESSKEYID&Signature=DJbZOXSF1FSBQT4wEv69O%2B3OhyI%3D&versionId=CAEQPRiBgMD1o.mEshciIDk4ZmZkMWM2NmQ5ZTQ1NWRhNTBmZDZjNzJjNjM4OGRl"
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### GetDataUrls

**根据path获取数据资源地址**

> **POST** /v1/datasets/{id}/data/urls-by-paths

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>remotePaths</td><td>map</td><td>是</td><td>根据数据分段名分组的数据路径，键为数据分段名，值为数据路径列表</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data/urls-by-paths' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "commit":"main",
  "remotePaths":{
    "segment1":["cat.png","dog.png"]
  }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "urls":{
    "segment1":{
      cat.png":"https://content-store-prod-version.oss-cn-shanghai.aliyuncs.com/d984afcf439bf3d8.jpg"
    }
  }
}
```

### GetTotalSize

**获取所有文件大小**

> **GET** /v1/datasets/{id}/total-size

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/total-size?commit=main' \
--header 'x-token: {your_accesskey}' 
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "totalSize":66712051577
}
```

### ListCloudFiles

**获取云端文件列表**

> **GET** /v1/cloud/{configName}/files

**请求参数**

**Path**

| 名称         | 是否必须 | 描述       |
| ---------- | ---- | -------- |
| configName | 是    | 授权云存储配置名 |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>prefix</td><td>string</td><td>否</td><td>授权云存储前缀名</td></tr><tr><td>marker</td><td>string</td><td>否</td><td>翻页标示符</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>查询结果的数量</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/cloud/aws1/files'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "cloudFiles": ["xxxx","yyyy"],
  "truncated": false,
  "nextMarker": "zzzz"
}
```

### GetCloudFileUrl

**获取云端文件列表**

> **GET** /v1/cloud/{configName}/files/urls

**请求参数**

**Path**

| 名称         | 是否必须 | 描述       |
| ---------- | ---- | -------- |
| configName | 是    | 授权云存储配置名 |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>filePath</td><td>string</td><td>是</td><td>数据远端路径</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/cloud/aws1/files/urls?filePath=xxx'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "url":"example.com/example.jpg"
}
```

### CloudCallback

**获取云端文件列表**

> **PUT** /v1/datasets/{id}/multi/cloud-callback

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>segmentName</td><td>string</td><td>是</td><td>数据分段名</td></tr><tr><td>deleteSource</td><td>bool</td><td>是</td><td>是否删除源文件</td></tr><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>objects</td><td>object[]</td><td>是</td><td>对应的数据信息</td></tr><tr><td>├─cloudPath</td><td>string</td><td>是</td><td>数据所在云存储路径</td></tr><tr><td>├─remotePath</td><td>string</td><td>是</td><td>数据远端路径</td></tr><tr><td>├─sensorName</td><td>string</td><td>否</td><td>传感器名称，融合类数据上传必传</td></tr><tr><td>├─frameId</td><td>string</td><td>是</td><td>融合数据帧 ID, ulid 格式，参考 https://github.com/oklog/ulid, 融合类数据上传必传</td></tr><tr><td>├─label</td><td>map</td><td>是</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/4a9e62ea88fd47b9b4b5f6bbbfe8ef64/multi/cloud-callback'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "segmentName": "car",
  "draftNumber": 1,
  "objects":[
    {
      "label": {
        "BOX2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box2d": {
              "xmax": 10,
              "xmin": 1,
              "ymax": 18,
              "ymin": 6
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "BOX3D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box3d": {
              "rotation": {
                "w": 1,
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "size": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "translation": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              }
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "CLASSIFICATION": {
          "attributes": {
            "color": "blue"
          },
          "category": "car"
        },
        "CUBOID2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "cuboid2d": {
              "back": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ],
              "front": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ]
            },
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "KEYPOINTS2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "keypoints2d": [
              {
                "v": 1.3,
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYGON2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polygon2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYLINE2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polyline2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "SENTENCE": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "phone": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "sentence": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "spell": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ]
          }
        ]
      }
    }
  ]
}
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### UploadLabel

**上传标签**

> **PUT** /v1/datasets/{id}/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>对应的资源</td></tr><tr><td>label</td><td>map</td><td>是</td><td>标签。<br>key:<br>CLASSIFICATION: 分类标注<br>BOX2D: 2D 框标注<br>BOX3D: 3D 框标注<br>POLYGON2D: 2D 多边形标注<br>POLYLINE2D: 2D 折线标注<br>KEYPOINTS2D: 2D 关键点标注<br>CUBOID2D: 2D 立体框标注<br>SENTENCE: 语音转写标注<br><strong>每种key对应的value格式内容请参考请求示例，请严格按照对应格式传递参数</strong></td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "remotePath": "car1.jpg",
  "segmentName": "car",
  "draftNumber": 1,
  "label": {
    "BOX2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "box2d": {
          "xmax": 10,
          "xmin": 1,
          "ymax": 18,
          "ymin": 6
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "BOX3D": [
      {
        "attributes": {
          "color": "blue"
        },
        "box3d": {
          "rotation": {
            "w": 1,
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          },
          "size": {
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          },
          "translation": {
            "x": 1.1,
            "y": 1.2,
            "z": 1.3
          }
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "CLASSIFICATION": {
      "attributes": {
        "color": "blue"
      },
      "category": "car"
    },
    "CUBOID2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "cuboid2d": {
          "back": [
            {
              "x": 1,
              "y": 2
            },
            {
              "x": 1.1,
              "y": 2.1
            },
            {
              "x": 1.2,
              "y": 2.2
            },
            {
              "x": 1.3,
              "y": 2.3
            }
          ],
          "front": [
            {
              "x": 1,
              "y": 2
            },
            {
              "x": 1.1,
              "y": 2.1
            },
            {
              "x": 1.2,
              "y": 2.2
            },
            {
              "x": 1.3,
              "y": 2.3
            }
          ]
        },
        "instance": "400a7ec7faa643e38e7ab220463bc4b5"
      }
    ],
    "KEYPOINTS2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "keypoints2d": [
          {
            "v": 1.3,
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "POLYGON2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "polygon2d": [
          {
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "POLYLINE2D": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "polyline2d": [
          {
            "x": 1.1,
            "y": 1.2
          }
        ]
      }
    ],
    "SENTENCE": [
      {
        "attributes": {
          "color": "blue"
        },
        "category": "car",
        "instance": "400a7ec7faa643e38e7ab220463bc4b5",
        "phone": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ],
        "sentence": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ],
        "spell": [
          {
            "begin": "b",
            "end": "e",
            "text": "hello"
          }
        ]
      }
    ]
  }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### ListLabel

**获取数据集标签**

> **GET** /v1/datasets/{id}/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>remotePath</td></tr><tr><td>sortBy</td><td>string</td><td>否</td><td>排序的字段，默认updated_at（更新时间）, 目前支持created_at（创建时间）和updated_at,传入其他内容会返回InvalidParamsValue</td></tr><tr><td>orderBy</td><td>string</td><td>否</td><td>默认desc（倒序），合法内容为asc（顺序）和desc</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels?draftNumber=1&offset=0&limit=1&segmentName=car'\
--header 'x-token: {your_accesskey}'
```

**返回结果** 普通数据集

```
# 响应状态
HttpStatus 200
{
    "segmentName": "car",
    "type": 0,
    "labels": [
        {
           "remotePath": "data_car.jpg",
           "label": {
           
           } 
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

融合数据集

```
# 响应状态
HttpStatus 200
{
    "segmentName": "car"
    "type": 1,
    "labels": [
        {
            "frameId": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
            "order": 1,
            "frame": [
                {
                    "sensorName": "camera_car",
                    "remotePath": "fusion_data_car2.jpg",
                    "timestamp":1609430400,
                    "label": {
                    
                    }
                },
                 {
                    "sensorname": "camera_car",
                    "remotePath": "fusion_data_car3.jpg",
                    "timestamp":1609430401,
                    "label": {
                        
                    }
                }
            ]
        }
    ],
    "offset": 0,
    "recordSize": 1,
    "totalCount": 1
}
```

### MultiUploadLabel

**批量上传标签**

> **PUT** /v1/datasets/{id}/multi/data/labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>objects</td><td>object[]</td><td>是</td><td>对应的数据信息</td></tr><tr><td>├─remotePath</td><td>string</td><td>是</td><td>对应的资源</td></tr><tr><td>├─label</td><td>map</td><td>是</td><td>该文件的标注标签信息，具体可参考uploadLabel</td></tr></tbody></table>

**请求示例**

```
curl --location --request PUT '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/multi/data/labels' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
  "segmentName": "car",
  "draftNumber": 1,
  "objects":[
    {
      "remotePath": "car1.jpg",
      "label": {
        "BOX2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box2d": {
              "xmax": 10,
              "xmin": 1,
              "ymax": 18,
              "ymin": 6
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "BOX3D": [
          {
            "attributes": {
              "color": "blue"
            },
            "box3d": {
              "rotation": {
                "w": 1,
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "size": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              },
              "translation": {
                "x": 1.1,
                "y": 1.2,
                "z": 1.3
              }
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "CLASSIFICATION": {
          "attributes": {
            "color": "blue"
          },
          "category": "car"
        },
        "CUBOID2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "cuboid2d": {
              "back": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ],
              "front": [
                {
                  "x": 1,
                  "y": 2
                },
                {
                  "x": 1.1,
                  "y": 2.1
                },
                {
                  "x": 1.2,
                  "y": 2.2
                },
                {
                  "x": 1.3,
                  "y": 2.3
                }
              ]
            },
            "instance": "400a7ec7faa643e38e7ab220463bc4b5"
          }
        ],
        "KEYPOINTS2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "keypoints2d": [
              {
                "v": 1.3,
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYGON2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polygon2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "POLYLINE2D": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "polyline2d": [
              {
                "x": 1.1,
                "y": 1.2
              }
            ]
          }
        ],
        "SENTENCE": [
          {
            "attributes": {
              "color": "blue"
            },
            "category": "car",
            "instance": "400a7ec7faa643e38e7ab220463bc4b5",
            "phone": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "sentence": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ],
            "spell": [
              {
                "begin": "b",
                "end": "e",
                "text": "hello"
              }
            ]
          }
        ]
      }
    }
  ]
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetLabelStatistics

**获取数据集标签数据**

> **GET** /v1/datasets/{id}/labels/statistics

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>否</td><td>草稿编号,draft和commit二者必须存在一个，但不可全部存在</td></tr><tr><td>commit</td><td>string</td><td>否</td><td>commit id 或者 commit tag 或者 branch name</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/labels/statistics?commit=v1'\
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "labelStatistics": {
    "CLASSIFICATION":{
        "attributes":null,
        "categories":[
            {
                "attributes":null,
                "name":"0",
                "quantity":6903
            }
        ],
        "quantity":69999
    }
  }
}
```

### ConvertLabelFromAli

**从阿里转换标签数据**

> **POST** /v1/datasets/{id}/convert-labels

**请求参数**

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>commit</td><td>string</td><td>是</td><td>提交 ID</td></tr><tr><td>labelUrl</td><td>string</td><td>是</td><td>标签下载链接</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/convert-labels'\
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "commit": "ajhfk2hjk3h89u3i',
    "labelUrl": "https://abc.xyz/ajdfls"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
  "taskId":"6d3a420485984e37abd10436fc4c41de"
}
```

### DeleteData

**删除data**

> **DELETE** /v1/datasets/{id}/data

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>remotePath</td><td>string</td><td>是</td><td>需要删除的数据远端的路径列表</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/segments' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "remotePath": "car1.jpg"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### OperateData

**操作data**

> **POST** /v1/datasets/{id}/data

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>move</td><td>bool</td><td>否</td><td>从已有剪切创建</td></tr><tr><td>copy</td><td>bool</td><td>否</td><td>从已有复制创建</td></tr><tr><td>multipleMove</td><td>bool</td><td>否</td><td>从多个已有剪切创建</td></tr><tr><td>multipleCopy</td><td>bool</td><td>否</td><td>从多个已有复制创建</td></tr></tbody></table>

**Body**

<table><thead><tr><th width="224.7142857142857">名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>否</td><td>segment 名称,</td></tr><tr><td>strategy</td><td>string</td><td>否</td><td>移动重名时的策略，可选项有：abort，override 和 skip，缺省为 abort</td></tr><tr><td>remotePath</td><td>string</td><td>否</td><td>数据远端路径, 单个操作时使用</td></tr><tr><td>remotePaths</td><td>string[]</td><td>否</td><td>数据远端路径列表, 多个操作时使用</td></tr><tr><td>source</td><td>object</td><td>是</td><td>来源数据, 单个操作时使用</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ remotePath</td><td>string</td><td>否</td><td>数据远端路径</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr><tr><td>source</td><td>object</td><td>否</td><td>来源数据分段, 多个操作时使用</td></tr><tr><td>  ├─ segmentName</td><td>string</td><td>否</td><td>分区名</td></tr><tr><td>  ├─ remotePaths</td><td>string[]</td><td>否</td><td>数据远端路径列表</td></tr><tr><td>  ├─ id</td><td>string</td><td>否</td><td>数据集id</td></tr><tr><td>  ├─ draftNumber</td><td>int</td><td>否</td><td>草稿编号</td></tr><tr><td>  ├─ commit</td><td>string</td><td>否</td><td>commitId或者commit的tag</td></tr></tbody></table>

**请求示例**

```
curl --location --request POST '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/data?copy=true' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "remotePath": "car1.jpg",
    "source":{
      "remotePath": "carold.jpg",      
      "draftNumber": 1,
      "segmentName": "test",
      "remotePath": "car1.jpg",
      "id": "154e35bae8954f09969ef8c9445efd2c"
    }
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### DeleteFrame

**删除frame**

> **DELETE** /v1/datasets/{id}/frames

**Path**

| 名称 | 是否必须 | 描述    |
| -- | ---- | ----- |
| id | 是    | 数据集ID |

**Body**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>draftNumber</td><td>int</td><td>是</td><td>草稿编号</td></tr><tr><td>segmentName</td><td>string</td><td>是</td><td>segment 名称</td></tr><tr><td>frameId</td><td>string</td><td>是</td><td>需要删除的融合数据帧的 ULID</td></tr></tbody></table>

**请求示例**

```
curl --location --request DELETE '{service}/v1/datasets/154e35bae8954f09969ef8c9445efd2c/frames' \
--header 'x-token: {your_accesskey}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "draftNumber": 1,
    "segmentName": "test",
    "frameId": "00000009RGDGYHFNXRR8QF2DHJ"
}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{}
```

### GetDiff

**获取两版本差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "action":"",
    "segments":{
        "stats":{
            "total":1,
            "additions":0,
            "deletions":0,
            "modifications":1
        }
    },
    "notes":{
        "action":""
    },
    "catalog":{
        "action":""
    },
    "data":{
        "stats":{
            "total":13,
            "additions":0,
            "deletions":13,
            "modifications":0
        }
    }
}
```

### ListSegmentDiffs

**获取两版本segment差异列表**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr></tbody></table>

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "segments":[
        {
            "name":"v1.0-mini_scene-0061",
            "action":"modify",
            "data":{
                "stats":{
                    "total":13,
                    "additions":0,
                    "deletions":13,
                    "modifications":0
                }
            },
            "sensor":{
                "action":""
            }
        }
    ],
    "offset":0,
    "recordSize":1,
    "totalCount":1
}
```

### GetSegmentDiff

**获取两版本segment差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments/{segmentName}

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr><tr><td>segmentName</td><td>是</td><td>数据分段名</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments/v1.0-mini_scene-0061' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "name":"v1.0-mini_scene-0061",
    "action":"modified",
    "data":{
        "stats":{
            "total":13,
            "additions":0,
            "deletions":13,
            "modifications":0
        }
    },
    "sensor":{
        "action":""
    }
}
```

### ListDataDiffs

**获取两版本数据差异**

> **GET** /v1/datasets/{id}/diffs/{baseHead}/segments/{segmentName}/data

**请求参数**

**Path**

<table><thead><tr><th>名称</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>id</td><td>是</td><td>数据集ID</td></tr><tr><td>baseHead</td><td>是</td><td>格式为 commit-commitId/draft-draftNumber...commit-commitId/draft-draftNumber,<br>后者没传默认找父提交，目前只需要支持与父提交的比较</td></tr><tr><td>segmentName</td><td>是</td><td>数据分段名</td></tr></tbody></table>

**Query**

<table><thead><tr><th>名称</th><th width="150">类型</th><th width="150">是否必须</th><th>描述</th></tr></thead><tbody><tr><td>limit</td><td>int</td><td>否</td><td>默认128，单次最多128</td></tr><tr><td>offset</td><td>int</td><td>否</td><td>默认0</td></tr></tbody></table>

**请求示例**

```
curl --location --request GET '{service}/v1/datasets/11df9efe26644d0d99c566325779b415/diffs/draft-1/segments/v1.0-mini_scene-0061/data' \
--header 'x-token: {your_accesskey}'
```

**返回结果**

```
# 响应状态
HttpStatus 200
# 响应结果
{
    "data":[
        {
            "remotePath":"n015-2018-07-24-11-22-45+0800__CAM_BACK_LEFT__1532402927647423.jpg",
            "action":"delete",
            "file":{
                "action":"delete"
            },
            "label":{
                "action":"unmodify"
            }
        }
    ],
    "offset":0,
    "recordSize":13,
    "totalCount":13
}
```


# 示例演示

格物钛帮助中心提供了示例作为您的快速入门指南，帮助您学习如何进行模型训练和数据挖掘。

### 模型训练

本示例将在线训练一个基于MNIST数据集的分类模型, 帮助您快速了解格物钛数据平台。

{% content-ref url="/pages/XSqE5rOpjjpiGBgiHvds" %}
[模型训练](/dev-doc/tools/shi-li-yan-shi/mo-xing-xun-lian)
{% endcontent-ref %}

### **数据挖掘**

基于TensorBay Action平台，本示例将搭建一个整合数据爬取、数据转化、数据提取和数据分析四步骤的工作流。

{% content-ref url="/pages/mOAJoU9r8Ieln9RwXgmK" %}
[数据挖掘](/dev-doc/tools/shi-li-yan-shi/shu-ju-wa-jue)
{% endcontent-ref %}


# 模型训练

本示例将在线训练一个基于MNIST数据集的分类模型, 帮助您快速了解格物钛数据平台

#### 1. 准备数据

a. 进入公开数据集，搜索并fork `MNIST` 数据集到自己的空间中&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FpnYXm1Q1ZgXzWFUTgT80%2Ffork.png?alt=media\&token=3e369107-5074-4afe-932b-7b029a058961)

#### 2. 配置密钥

a. 点击导航栏中的开发者工具，新建accesskey并复制 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F6Ipv58nVPveD0C09QD3u%2Faccesskey.png?alt=media\&token=8f1e15f0-3ea4-4bd2-addf-1ae8d2fc06fc)

b. 进入之前fork的`MNIST`数据集

c. 进入设置->自动化配置->新建密钥 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FihukKUtQGyhH3AE9taih%2Fconfig.png?alt=media\&token=1a18f7b7-0ded-4834-b322-9bfb5964bc0a)

d. 新建密钥，密钥名为`accesskey`, 密钥值为a步骤复制的accesskey&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FihukKUtQGyhH3AE9taih%2Fconfig.png?alt=media\&token=1a18f7b7-0ded-4834-b322-9bfb5964bc0a)

#### 3. 创建训练评估工作流

a. 点击自动化->新建工作流&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F2uAlLTmoalfHVzUMLlso%2Fworkflow.png?alt=media\&token=c0e0fbfb-9c4a-4790-ba88-5b010916ce4e)

b. 使用下列yaml文件新建工作流

```
tasks:
  #  新建一个数据集用于保存训练完的模型
  createModelDataset:
    script:
      # 本task运行所依赖性的镜像名, 支持公开的镜像仓库
      image: hub.graviti.cn/algorithm/mnist:0.7

      # 使用python3运行下面source后对应的脚本
      command: [python3]

      source: |
        import logging
        import os
        from tensorbay import GAS
        logging.basicConfig(level=logging.INFO)
        dataset_name = "MNIST_MODEL"
        ACCESS_KEY = os.environ.get("secret.accesskey")
        gas = GAS(ACCESS_KEY)
        try:
            gas.create_dataset(dataset_name)
            logging.info(f"Created dataset {dataset_name} Successfully")
        except:
            logging.info(f"{dataset_name} aleady exists.")
  #  训练一个简单的mnist模型, 并使用输出模型文件进行预测
  training:
    dependencies:
      - createModelDataset
    script:
      image: hub.graviti.cn/algorithm/mnist:0.7
      command: [python3]
      source: |
        import logging
        import os

        import torch
        from PIL import Image
        from tensorbay import GAS
        from tensorbay.dataset import Dataset as TensorBayDataset
        from tensorbay.dataset.data import Data
        from torch import nn
        from torch.utils.data import DataLoader, Dataset
        from torchvision import transforms

        logging.basicConfig(level=logging.INFO)


        # 搭建网络架构
        class NeuralNetwork(nn.Module):
            def __init__(self):
                super(NeuralNetwork, self).__init__()
                self.flatten = nn.Flatten()
                self.linear_relu_stack = nn.Sequential(
                    nn.Linear(28 * 28, 512), nn.ReLU(), nn.Linear(512, 512), nn.ReLU(), nn.Linear(512, 10)
                )

            def forward(self, x):
                x = self.flatten(x)
                logits = self.linear_relu_stack(x)
                return logits


        # 从Graviti平台中读取数据集
        class MNISTSegment(Dataset):
            """class for wrapping a MNIST segment."""

            def __init__(self, dataset, segment_name, transform):
                super().__init__()
                self.dataset = dataset
                self.segment = self.dataset[segment_name]
                self.category_to_index = self.dataset.catalog.classification.get_category_to_index()
                self.transform = transform

            def __len__(self):
                return len(self.segment)

            def __getitem__(self, idx):
                data = self.segment[idx]
                with data.open() as fp:
                    image_tensor = self.transform(Image.open(fp))

                return image_tensor, self.category_to_index[data.label.classification.category]


        def train(dataloader, model, loss_fn, optimizer):
            size = len(dataloader.dataset)
            model.train()
            for batch, (X, y) in enumerate(dataloader):
                X, y = X.to(device), y.to(device)

                # Compute prediction error
                pred = model(X)
                loss = loss_fn(pred, y)

                # Backpropagation
                optimizer.zero_grad()
                loss.backward()
                optimizer.step()

                if batch % 100 == 0:
                    loss, current = loss.item(), batch * len(X)
                    logging.info(f"loss: {loss:>7f}  [{current:>5d}/{size:>5d}]")


        def test(dataloader, model, loss_fn):
            size = len(dataloader.dataset)
            num_batches = len(dataloader)
            model.eval()
            test_loss, correct = 0, 0
            with torch.no_grad():
                for X, y in dataloader:
                    X, y = X.to(device), y.to(device)
                    pred = model(X)
                    test_loss += loss_fn(pred, y).item()
                    correct += (pred.argmax(1) == y).type(torch.float).sum().item()
            test_loss /= num_batches
            correct /= size
            logging.info(f"Test Error: \n Accuracy: {(100*correct):>0.1f}%, Avg loss: {test_loss:>8f} \n")

        if __name__ == "__main__":
            BTACH_SIZE = 64
            EPOCHS = 3
            ACCESS_KEY = os.environ.get("secret.accesskey")
            gas = GAS(ACCESS_KEY)
            mnist_dataset = TensorBayDataset("MNIST", gas)
            mnist_dataset.enable_cache()
            to_tensor = transforms.ToTensor()
            normalization = transforms.Normalize(mean=[0.485], std=[0.229])
            my_transforms = transforms.Compose([to_tensor, normalization])

            train_segment = MNISTSegment(mnist_dataset, segment_name="train", transform=my_transforms)
            test_segment = MNISTSegment(mnist_dataset, segment_name="test", transform=my_transforms)
            train_dataloader = DataLoader(train_segment, batch_size=BTACH_SIZE, num_workers=10)
            test_dataloader = DataLoader(test_segment, batch_size=BTACH_SIZE, num_workers=10)

            device = "cuda" if torch.cuda.is_available() else "cpu"
            logging.info(f"Using {device} device")

            model = NeuralNetwork().to(device)
            logging.info(model)
            loss_fn = nn.CrossEntropyLoss()
            optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)

            for epoch in range(EPOCHS):
                logging.info(f"Epoch {epoch+1}\n-------------------------------")
                train(train_dataloader, model, loss_fn, optimizer)
                test(test_dataloader, model, loss_fn)
            logging.info("Done!")

            torch.save(model.state_dict(), "model.pth")
            logging.info("Saved PyTorch Model State to model.pth")

            # 上传模型文件
            model_dataset = TensorBayDataset("MNIST_MODEL")
            segment = model_dataset.create_segment("model")
            segment.append(Data("./model.pth"))
            dataset_client = gas.upload_dataset(model_dataset)
            dataset_client.commit("upload mnist model file")
            logging.info("Uploaded model!")
  evaluate:
    dependencies:
      - training
    script:
      image: hub.graviti.cn/algorithm/mnist:0.7
      command: [python3]
      source: |
        import logging
        import os
        from concurrent.futures import ThreadPoolExecutor

        import torch
        from PIL import Image
        from tensorbay import GAS
        from tensorbay.dataset import Dataset as TensorBayDataset
        from tensorbay.dataset.data import Data
        from tensorbay.label import Classification
        from torch import nn
        from torchvision import transforms

        logging.basicConfig(level=logging.INFO)


        # 搭建网络结构
        class NeuralNetwork(nn.Module):
            def __init__(self):
                super(NeuralNetwork, self).__init__()
                self.flatten = nn.Flatten()
                self.linear_relu_stack = nn.Sequential(
                    nn.Linear(28 * 28, 512), nn.ReLU(), nn.Linear(512, 512), nn.ReLU(), nn.Linear(512, 10)
                )

            def forward(self, x):
                x = self.flatten(x)
                logits = self.linear_relu_stack(x)
                return logits



        def upload_label(model, segment_client, data):
            with data.open() as fp:
                image_tensor = my_transforms(Image.open(fp))
            pred = model(image_tensor)
            pred_data = Data(data.path)
            pred_data.label.classification = Classification(str(int(pred[0].argmax(0))))
            segment_client.upload_label(pred_data)


        if __name__ == "__main__":
            BTACH_SIZE = 64
            EPOCHS = 3
            ACCESS_KEY = os.environ.get("secret.accesskey")
            gas = GAS(ACCESS_KEY)
            to_tensor = transforms.ToTensor()
            normalization = transforms.Normalize(mean=[0.485], std=[0.229])
            my_transforms = transforms.Compose([to_tensor, normalization])
            model_dataset = TensorBayDataset("MNIST_MODEL", gas)
            data = model_dataset[0][0]
            with open(f"./model.pth", "wb") as fp:  # 本地存储数据的路径
                fp.write(data.open().read())
            model = NeuralNetwork()
            model.load_state_dict(torch.load("model.pth", map_location=torch.device("cpu")))
            logging.info(model)

            mnist_dataset = TensorBayDataset("MNIST", gas)
            mnist_dataset.enable_cache()
            mnist_dataset_client = gas.get_dataset("MNIST")
            mnist_dataset_client.create_branch("training")
            mnist_dataset_client.create_draft("update label")

            for segment in mnist_dataset:
                segment_client = mnist_dataset_client.get_segment(segment.name)
                with ThreadPoolExecutor(10) as executor:
                    for data in segment:
                        executor.submit(upload_label, model, segment_client, data)
            mnist_dataset_client.commit("update label")
```

#### 4. 开始训练

a. 进入自动化，选择创建好的工作流，点击运行&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FRVqLWs2rKeGCRwvFzHRe%2Frun_workflow.png?alt=media\&token=dd180802-e959-419a-9b66-90d67886c6aa)

#### 5. 查看结果

a. 查看工作流运行日志&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F8U2ZOsxocJvK4H4klMGk%2Frun_log.png?alt=media\&token=e3587029-c05e-48c8-95c1-50f514ca870c)

b. 进入名为`training`的分支查看模型预测效果，查看diff可视化及分布变化 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FPi7PRsB1Dy86C2hLpT0V%2Fcommit_log.png?alt=media\&token=94a6432a-8b40-47b5-8452-0982c5bd6685)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FDR7AW9w3WSWe3yGXZnG0%2Fdiff.png?alt=media\&token=02f198dc-a292-4c2f-ac9a-50d198d7a5eb)

c. 查看保存的训练模型&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FsXrLQziOfW1KPyn1TmeI%2Fmodel.png?alt=media\&token=55b2c637-bf09-4ef9-aa84-e876fed64940)


# 数据挖掘

基于TensorBay Action平台，本示例将搭建一个整合数据爬取、数据转化、数据提取和数据分析四步骤的工作流，帮助您快速了解格物钛数据平台

#### 1.新建数据集

a. 进入TensorBay，在个人或团队账户下，点击【新建数据集】&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FjaowMz3MQqMYNVSi3PWj%2FCreateDataset.png?alt=media\&token=85f34828-6bd7-4833-91b6-1276c4934d08)

#### 2.配置密钥

a. 点击导航栏中的【开发者工具】，点击【新建AccessKey】并复制accesskey &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Ft4feKmKNj5XeFcgNL32z%2Faccesskey.png?alt=media\&token=4eb5bda1-7b0d-409d-9d4f-29a801f8a1e2)

b. 在新建数据集界面，点击【设置】->【自动化配置】->【新建密钥】 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FX5jgj3Wuocjo6qIM5YOa%2Fconfig.png?alt=media\&token=0e0059d2-8d5d-4b70-af70-509269ad6445)

c. 新建密钥，密钥名为`accesskey`, 密钥值为a步骤复制的accesskey&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F1IhdGdUXWcJisE55hRmg%2Faccesskey2.png?alt=media\&token=e815b892-a02a-46a9-9287-0d3bb77f811b)

#### 3.创建工作流

a. 在新建数据集详情页，点击【自动化】->【新建工作流】 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fn5I1YTZosalHOsdiijnX%2Fworkflow.png?alt=media\&token=75e00ecc-e718-4a43-9fe3-78eceb56e5f6)

b. 填写工作流名称（注： Workflow名称只能包含小写字母、数字以及减号，名称不得少于2位字符且首位不能为减号。） &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FInOPsz6WlIS010nt3oYy%2Fworkflow_name.png?alt=media\&token=05c95b61-1ac1-4972-8a77-3ff26e374034)

c. 选择工作流触发机制【Trigger】（默认manual）&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F6Wz8uHO2JEYgsEazBOXg%2Fworkflow_trigger.png?alt=media\&token=fb3a5ffc-ee62-400b-9647-5e0d9b6546c3)

d. 设置工作流参数【Parameters】（注：本次示例参数来源于镜像设置的命令行参数，用以调整爬取论文的月份，默认为1。）

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FLeDrqXMgaG1vPImUEB3H%2Fworkflow_parameter.png?alt=media\&token=2e30f747-ee0f-49b3-80b0-766307d24abc)

e. 选择实例配置【Instance】 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F9oiPAS19h5I2Qr4ZGEoj%2Fworkflow_instance.png?alt=media\&token=38fd4efc-a30c-4443-99df-a8c2c16c060e)

f. 复制下列内容建立YAML文件

```
# 一个workflow由多个task构成，它们可以串行或并行运行.
tasks:
  # 本workflow包括四个task，分别为：scraper,pdf2txt,parser,statistics
  scraper:
    container:
         # 本task运行所依赖性的镜像名, 支持公开及私有的镜像仓库
      image: hub.graviti.cn/miner/scraper:2.3

      # 镜像运行后执行`./archive/run.py {{workflow.parameters.month}}`这条命令
      command: [python3]
      args: ["./archive/run.py", "{{workflow.parameters.month}}"]
  pdf2txt:
    # pdf2txt依赖于scraper，即仅在scraper运行结束后才开始运行
    dependencies:
      - scraper
    container:
      image: hub.graviti.cn/miner/pdf2txt:2.0
      command: [python3]
      args: ["pdf2txt.py"]
  parser:
    # parser依赖于pdf2txt，即仅在pdf2txt运行结束后才开始运行
    dependencies:
      - pdf2txt
    container:
      image: hub.graviti.cn/miner/parser:2.0
      command: [python3]
      args: ["parser.py"]
  statistics:
    # statistics依赖于parser, 即仅在parser运行结束后才开始运行
    dependencies:
      - parser
    container:
      image: hub.graviti.cn/miner/statistics:2.0
      command: [python3]
      args: ["statistics.py"]
```

&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FM8jTaQk1P5DuhQ8Y3JE3%2Fworkflow_yaml.png?alt=media\&token=5d5b8f04-7eaa-4aeb-8ea6-97069f1f331e)

g. 点击【发布】后并点击【确定】&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FD1RPKAhsNstk2ESDqIgA%2Fworkflow_public.png?alt=media\&token=9e5c95b3-cf4a-4a2b-bf48-d5c57ccbdaab)

#### 4.运行工作流

a. 点击【自动化】，回到工作流界面。选择刚创建好的工作流并点击【运行工作流】 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FpobONVNo2wahcMmurWqA%2Fworkflow_run.png?alt=media\&token=a7a3ea06-4739-488a-a79c-0ea9200971f9)

b. 调整参数，比如将month对应参数调整成10（月份），并点击【运行】&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F0ZGurFkvqVToZVtmcFsM%2Fworkflow_run_para.png?alt=media\&token=64443b9b-d896-4986-a815-99084cd6556e)

#### 5.查看结果

a. 在工作流详情页，点击【用户日志】查看工作流运行日志&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F0yKd9a8iICP8zoLA4If4%2Fworkflow_log.png?alt=media\&token=5740bfeb-634d-44b4-b617-bc1ee603b326)

b. 在数据集详情页，点击【概要】->【数据预览】查看统计结果 &#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F45RKbLSRA3ilrpq6GMCd%2Foutcome1.png?alt=media\&token=256cc268-c4d0-438f-9a41-2b7ee19b2367)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYqaRW3GCQV8WPkDyLVPN%2Foutcome2.png?alt=media\&token=9b6a1f26-5138-4444-9419-2566984ee6a6)


# TensorBay

## TensorBay 是什么？ <a href="#id-1" id="id-1"></a>

TensorBay是云端非结构化数据管理平台，为AI开发者与开发团队提供数据托管、版本管理、数据可视化、团队协作等SaaS服务，支持通过开发者工具直接管理、使用数据，与您的Pipeline轻松集成。

## 如何进入TensorBay <a href="#id-2" id="id-2"></a>

首先进[格物钛官网](https://www.graviti.cn/)，点击上方导航栏中的【产品】，进入TensorBay介绍主页，可以了解到TensorBay的各项主要功能，点击【免费使用】即刻体验TensorBay为您的算法工作带来的便捷高效。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYsRCmUk9fvblCLUUBc%2F-MYsTogO1i381qH7WXWJ%2F1.png?alt=media\&token=dc38190d-0d3c-41f7-9340-639f94822638)

开始使用TensorBay前，需要注册Graviti用户账号。若您还未注册Graviti账号，可通过绑定手机号或微信号的方式注册。若您已注册，可使用Graviti账号直接登录。

账号详情请查看：

{% content-ref url="/pages/-MR3w6ocqsXDNSOH8AZl" %}
[注册账号](/account)
{% endcontent-ref %}

## TensorBay功能概览 <a href="#id-3" id="id-3"></a>

* **数据托管**

TensorBay提供集中的AI数据托管服务，统一管理原始数据、标注数据与meta信息；支持主流公有云存储的授权管理，避免数据迁移；使用开发者工具实现数据的灵活上传和读取使用，便捷管理大量数据。

{% content-ref url="/pages/-MWSde6OncKl1OKYrLD\_" %}
[新建数据集](/guide/tensorbay/data/create)
{% endcontent-ref %}

* **数据版本管理**

TensorBay提供清晰可追溯的数据版本管理工具，支持原数据与标注数据的版本管理，轻松追溯数据的版本迭代，无需再为数据版本追溯而烦恼。

{% content-ref url="/pages/-MWTwpDTHZ1jkXGiySfi" %}
[数据版本管理](/guide/tensorbay/version)
{% endcontent-ref %}

* **数据在线可视化**

TensorBay提供实时在线数据可视化组件，兼容主流数据格式与标注数据，多种数据分布查看方式，快速掌握数据细节，数据调试方便省力。

{% content-ref url="/pages/-MWU3pooiEGESIqcVIfx" %}
[Pharos 数据可视化](/guide/tensorbay/visualization)
{% endcontent-ref %}

* **团队数据协同管理**

TensorBay为团队提供协同数据管理，团队成员角色、数据集权限灵活设置，安全的同步与分享数据，避免数据的反复复制与迁移，高效协作加速AI开发。

{% content-ref url="/pages/-MWU98FNcG0isRpPVbLm" %}
[团队协作](/guide/tensorbay/collaboration)
{% endcontent-ref %}

* **开发者工具**

TensorBay提供易用的开发者工具以及详细的文档说明，实现数据快速接入Pipeline，在开发端直接使用TensorBay中的数据和管理服务。

{% content-ref url="/pages/-MLCnlrTBgRXldjOYYbu" %}
[开发者工具](/dev-doc/tools)
{% endcontent-ref %}


# TensorBay 适用于算法研究的各个阶段

## 数据集管理从0到1 <a href="#id-1" id="id-1"></a>

* 在TensorBay中，可通过以下三种方式管理自有数据：

1. 上传自定义数据集，托管在TensorBay中；
2. 将托管在其他云服务上的数据集转存到TensorBay上；
3. 授权TensorBay读取和管理您在其他云服务上的数据。

{% content-ref url="/pages/-MWSde6OncKl1OKYrLD\_" %}
[新建数据集](/guide/tensorbay/data/create)
{% endcontent-ref %}

{% content-ref url="/pages/-MWTrNbO2kD-IMDSp3hQ" %}
[管理云服务上的数据](/guide/tensorbay/data/authorize)
{% endcontent-ref %}

* 如果您还没有可用的数据集，**Open Datasets** 提供海量优质的[公开数据集](https://www.graviti.cn/open-datasets)，部分数据集支持 [Fork](/guide/tensorbay/data/fork) 功能，直接云端读取，无需下载，省去数据结构转换，即刻使用。
* 完成创建数据集后，可使用**可视化功能**，在线预览数据集、查看数据集标注标签分布等，快速使用TensorBay管理您的数据集。

## 在算法研究中使用数据集 <a href="#id-2" id="id-2"></a>

* 通过开发者工具，使用[Python SDK、CLI或Open API来创建数据集](/dev-doc/tools)、读取数据和标注，在pipline中使用数据集。TensorBay提供了可直接复制的代码示例，附在每个功能的对应页面，方便随时查阅。
* 通过开发者工具，可以直接上传、发布数据集，轻松实现数据集的迭代。此功能将在数据清洗与备份的流程中提高您的效率，只要完成了数据集发布，就可以在未来快捷地选用最合适的数据集版本。

## 加速数据集准备与版本管理 <a href="#id-3" id="id-3"></a>

* 如果只有原数据文件，且正在为**数据标注、管理标注信息**苦恼，可以使用应用中的[GroundTruth Tool](https://app.gitbook.com/@grobot/s/gas-docs/~/drafts/-MYiY5W_19QMcY3TcX9C/apps/teragood-tools)或[Teragood Service](https://app.gitbook.com/@grobot/s/gas-docs/~/drafts/-MYiY5W_19QMcY3TcX9C/apps/teragood-service)进行数据标注。团队版支持多人同时标注，事半功倍。
* 面对**数据集太小**或存在严重的**数据分布不平衡**的问题，难以满足研究需求，可尝试[合并数据集](/guide/tensorbay/data/merge)或[根据标签筛选并新建数据集](/guide/tensorbay/data/filter)，缩短数据集的准备时间。
* 如果需要进行**数据清洗**，强烈建议使用TensorBay强大的[数据版本管理](/guide/tensorbay/version)功能，不仅可以发布不同版本的数据，还能随时回退至任一已发布的版本，获得真正的清晰、可追溯的版本管理体验。


# 概念说明

## TensorBay版本管理

版本管理是TensorBay的主要功能，它可以帮助团队、个人进行数据开发的版本管理，完美解决难以比较数据修改内容、合并数据、取消修改、对一份数据进行并行开发、以及难以追溯数据开发生命周期等痛点问题。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MjgcYFVQsYkXl94MJgt%2F-Mjgcns6czOp-VcotXmX%2Fimage%20\(4\).png?alt=media\&token=12992ddb-7259-4805-8a78-4d6808b8e2c0)

## Dataset

Dataset是TensorBay定义的用于快速迭代高质量数据集的特殊数据格式以及进行版本管理、团队管理以及数据编辑等操作的基本对象。

## Commit

Commit的概念与Git类似，它记录了Dataset在某一时间点的快照。通过某个Dataset的历史全部Commits就可以对其所有迭代内容进行管理和追溯。针对Dataset的编辑必须Commit Draft后才能生效。

## Branch

Branch是一系列Commits的一个引用位置。每个Dataset都会默认创建一个Main Branch，在对Dataset进行版本管理时，必须选定一个Branch。在Branch下对数据集进行修改后，Branch会自动更新到最新的Commit。

## Tag

类似于Git的Tag的概念，用户可以对数据版本信息进行标记，方便版本查找和溯源。

## Draft

编辑Dataset的工作区，只有在新建Draft后才可以对Dataset进行数据层面的修改（数据修改、数据集信息修改）。用户可以选择Dataset内的任意一个Branch来创建新Draft。


# 快速入门 - 开发者版

## 进入TensorBay <a href="#id-1" id="id-1"></a>

* 新用户初次注册、登陆Graviti AI Service 平台(简称 GAS 平台)，将会免费获得100GB数据存储空间的开发者社区版账号；老用户可直接登录进入自己的GAS控制台 ，开始使用TensorBay功能。您还可以邀请您的团队成员使用TensorBay进行协作，详情可查看[：](https://docs.graviti.cn/guide/tensorbay/collaboration)

{% content-ref url="/pages/-MWU98FNcG0isRpPVbLm" %}
[团队协作](/guide/tensorbay/collaboration)
{% endcontent-ref %}

### GAS控制台 <a href="#id-1-1" id="id-1-1"></a>

登陆后，进入您的GAS控制台，将包含以下功能：

* **各功能模块：**&#x5305;括数据托管、版本管理、数据可视化、团队协同和开发者工具。
* **数据使用概况：**&#x5305;括数据集的数量，数据托管和授权存储使用的容量，以及数据使用流量。
* **切换工作空间：**&#x53F3;侧导航栏将展示您当前的工作空间及相关信息，您可以通过顶部栏导航栏切换当前的工作空间。

{% hint style="info" %}
个人空间和所加入的不同的团队空间中的数据以及权限互相独立，无法互通。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FQAXCXHmLrjReTilITTSe%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112152549.png?alt=media\&token=9fb7527e-3562-4070-a6f0-340528c66002)

* **活动日志：**
  * 查看TensorBay上的操作历史，包括对数据集、数据等的操作信息。
  * 分享数据集权限后，可以查看到分享后其他用户对数据集的操作历史。
  * 快速进入最近使用的数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FbjNM6xYOPDmh89GRgAaz%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112153650.png?alt=media\&token=c93604cc-caf7-4012-ae7d-23fd69d2a1b9)

## 快速新建数据集 <a href="#id-2" id="id-2"></a>

* 通过GAS主页的快速导航【新建】或顶部导航栏【我的数据集】点击进入您的TensorBay空间，选择【新建数据集】开始数据之旅。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F847xc3dJuYfaHMHjgTCe%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112153817.png?alt=media\&token=22fd3797-790d-4e92-96b2-c5eeb62e9bc3)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F0Tt1K0JqUirZFHKacgxJ%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112153910.png?alt=media\&token=639ea62f-0ab1-437c-8271-a4fcca22da6e)

* 进入【新建数据集】页面，填写数据集名称，选择数据集的存储配置以及可见范围，即可创建新的数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FAMt1zLShVm78tAuPVAxU%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112154100.png?alt=media\&token=4d5b20ec-ced7-4d13-b49e-8d62fe9dc83d)

* 更多关于新建数据集及存储配置的信息，详情请查看：

{% content-ref url="/pages/-MWSde6OncKl1OKYrLD\_" %}
[新建数据集](/guide/tensorbay/data/create)
{% endcontent-ref %}

* 【确认创建】数据集后，将自动创建Draft1，并将Draft1建在默认分支(main)上。然后进入【上传数据】，创建Segment，即可将数据上传至指定Segment中，支持本地上传和开发者工具上传两种方式。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FMSGqy6so2nPVe3JOG9KT%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112154507.png?alt=media\&token=75348a86-5b68-429f-a112-ef680443c467)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FiJGCAtbtwcajfDOQCHOZ%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112154548.png?alt=media\&token=81222cb4-da3b-4d0b-ab23-9179c067a224)

* 点击【确定】，进入版本信息页面。填写**commit信息**和**Tag**，对当前数据创建版本。仅Commit后的数据集可用于标注、训练等数据的后续使用。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FprJ8INkSuPHi2mQ3UIX0%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112155136.png?alt=media\&token=db45bb9f-ddbf-4f48-86a4-be72b8545a41)

* 点击【commit】，新建数据集成功。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FBXkJo5trfa1Wmm3YgC8U%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112155228.png?alt=media\&token=5182035a-e5f5-463a-96cb-b07e30f12d02)

## 数据集版本管理 <a href="#id-3" id="id-3"></a>

* 点击【立即前往】，或者点击您的数据集，进入数据集详情页。您可查看该数据集所有的Commit版本以及数据集的详情信息。在左侧版本列表中点击【查看所有Tags】，进入commits记录页面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FJUMvfgHH5E4abKuUdGF4%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112160639.png?alt=media\&token=cb53f042-4bac-4aa3-af2d-a82bc9cc77e8)

* 在Commits记录中，您可以查看所有的历史版本信息；点击版本右侧的<img src="https://lh5.googleusercontent.com/yS-3cPqnTYcW01_tpJP36tK_TsaedSX3tsB7n-zRdmDLxmiElp_2iWV1smBlyL4r9bQ96YAsbW06tXf3Ni0YI7-xPPQaBcqQHUbI59uK_Fn_00ekHSSKLVwSJG2MPJPgrEIpI0Wq=s0" alt="" data-size="line">可以进入数据详情页看到该版本的详细数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FUprwnqTZACO39ifUjvVO%2F%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20220112160743.png?alt=media\&token=84c723f6-1201-46a7-b187-f9791264f54b)

* 通过版本管理，您可以便捷地对您需要的数据版本进行Commit，并详细查看所有历史Commit的数据以及数据集信息，详情请查看：

{% content-ref url="/pages/-MWTwpDTHZ1jkXGiySfi" %}
[数据版本管理](/guide/tensorbay/version)
{% endcontent-ref %}

## 使用TensorBay上的数据 <a href="#id-4" id="id-4"></a>

* 通过开发者工具，包括Python SDK、CLI与Open API，读取您的在TensorBay上准备的数据集，与您的Pipeline快速集成。

{% content-ref url="/pages/-MWUBpTrcMvPUyNWXhPg" %}
[如何与Pipeline集成](/guide/tensorbay/pipeline)
{% endcontent-ref %}


# 快速入门 - 团队版

## 进入TensorBay <a href="#id-1" id="id-1"></a>

* 登录您的账户，在右上方导航栏中切换您的工作空间，切换到您需要进入的团队空间。如果您还没有任何团队空间，可以选择【创建团队】或者联系您的团队管理员申请加入您的团队空间。具体团队协作可查看[：](/guide/tensorbay/collaboration)

{% content-ref url="/pages/-MWU98FNcG0isRpPVbLm" %}
[团队协作](/guide/tensorbay/collaboration)
{% endcontent-ref %}

## 创建您的团队空间 <a href="#id-2" id="id-2"></a>

* 在GAS控制台首页或顶部导航栏您的空间列表中，点击【新建团队】进入团队创建页面，详情可见[创建团队空间](/guide/tensorbay/collaboration/create)。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F94XBI3PSIcMsdwYx2KjW%2F1a464cb298b26f029a23a22b0b31b4f.png?alt=media\&token=8549d580-1618-46a9-867d-c6b1495b5c11)

{% content-ref url="/pages/-MWU9NDPoGxjbX8fN1vH" %}
[创建团队空间](/guide/tensorbay/collaboration/create)
{% endcontent-ref %}

* 进入【新建团队】页面，填写您的团队信息，并邀请您的团队成员加入团队。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FFkrnpgAwNsqPrF6FOWze%2F2bbf47b9fa3605db39546715098c7b3.png?alt=media\&token=b0710ad1-4602-45b5-afab-bafb48071176)

* 点击【下一步】，填写团队信息。团队创建者默认为该团队的超级管理员，您可以在【团队信息】页面添加团队成员。您也可以点击【稍后进行】，跳过填写团队信息的步骤。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Ft2aPijw3L6P1D0A9Vsxa%2Fbccfca53b5d6f578bf89d9e2a4c2454.png?alt=media\&token=a17d6e5f-469a-4cf1-b5bf-8c1a89190367)

* 您可以对该团队的人员和数据进行管理，包括团队资料管理、团队成员管理、团队资产管理等，详情可见[：](/guide/tensorbay/collaboration/manage)

{% content-ref url="/pages/-MWUAA1fBV9ISayqDQ9M" %}
[资料/成员管理](/guide/tensorbay/collaboration/manage)
{% endcontent-ref %}

* 团队创建成功后，将进入您的团队空间首页，您可在此清晰地了解当前团队的数据使用概况，即数据集的数量，数据托管和授权存储使用的容量，以及数据使用流量。

{% hint style="info" %}
您的个人工作空间和所加入的不同的团队工作空间中的数据以及权限互相独立，无法互通使用。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FW7E1LReP869ZrEclqUGH%2F3780910216d21210d770616f029a834.png?alt=media\&token=abf655cb-6a86-4dd8-8f05-2cee63d92759)

* 在团队空间主页和团队数据集主页，可以查看您和您的团队成员在TensorBay团队空间上的所有操作历史，包括对团队数据集、团队数据的操作详情。

{% content-ref url="/pages/-MYsv-O9e6k2jFM4vtjn" %}
[团队活动日志](/guide/tensorbay/collaboration/log)
{% endcontent-ref %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FdsVEqyIWmk27cVtqThQ3%2Ff36431c9e8733b13e4aa8b105ea418f.png?alt=media\&token=c665608b-127d-4e74-9b7b-74957fc56b68)

## 快速新建团队数据集 <a href="#id-3" id="id-3"></a>

* 您可通过首页的快速导航【新建】或顶部导航栏【团队数据集】点击进入您团队的TensorBay空间，选择【新建数据集】开始您的团队的数据之旅。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fd2UnrRbIL1mAOc0ghM8G%2Fbfcb71203f3116ce30869561524fe50.png?alt=media\&token=252e1092-239d-4359-b294-4353edc0ce06)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FlWyXFBzehNjv6D1JZ8D4%2F1b69cad443032ee6b402f159f0de3b7.png?alt=media\&token=f777e00e-5bbe-4b16-8ba8-c12275abf501)

* 进入【新建数据集】页面，填写数据集名称，选择数据集的存储配置以及可见范围，即可创建新的团队数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FIM5z54Z7DrbjWeohkhC2%2F85753d244339d014dcdde1b708cfd60.png?alt=media\&token=e0635210-bfb8-44b9-b815-90a7700e391c)

* 更多关于新建数据集及存储配置的信息，详情请查看：

{% content-ref url="/pages/-MWSde6OncKl1OKYrLD\_" %}
[新建数据集](/guide/tensorbay/data/create)
{% endcontent-ref %}

* 【确认创建】数据集后，将自动创建Draft-1，并将Draft-1建在默认分支(main)上。然后进入【上传数据】，创建Segment，即可将数据上传至指定Segment中，支持本地上传和开发者工具上传两种方式。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FHoyG1ZSGbIRcdyZg8NHT%2F152bacdf0b39f9d692dc480f0db52e5.png?alt=media\&token=cf0012f3-839b-46ef-94eb-c4b1a7614c6c)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FWoymZLOdxtiWUPypSw5o%2F03e402a1e1b184f5e6048406b11b1cd.png?alt=media\&token=6db85974-fdf3-4e76-8f69-ee1c8076c907)

* 点击【确定】，进入版本信息页面。填写**commit信息**和**Tag**，对当前数据创建版本。仅Commit后的数据集可用于标注、训练等数据的后续使用。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F6h6iWxeYszrfMGwA9HYH%2F2290146bf30e4db153adfc415ed25c2.png?alt=media\&token=4131e05b-2a1d-4118-a339-d04e77c4d960)

* 点击【commit】，新建数据集成功。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FVxBDGGTNGdfJnrrBNwuv%2F8ecb2a4fb4238d1460e5960cde85fee.png?alt=media\&token=e0cc0817-0f27-4d38-ad10-df10128b583d)

## 数据集版本管理 <a href="#id-4" id="id-4"></a>

* 每次完成【Commit】后，将进入团队数据集详情页，在左侧版本列表中点击【查看所有Tags】，可浏览所有的Commits记录。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FRCO0Hik2RxfGSNikpCIo%2Fc9c4a205de37c3868589b944f33f258.png?alt=media\&token=003fa74f-b74d-45d4-a6c7-a33c9db4cb3e)

* 在Commits记录中，您可以查看所有的历史版本信息；点击版本右侧的<img src="https://lh5.googleusercontent.com/yS-3cPqnTYcW01_tpJP36tK_TsaedSX3tsB7n-zRdmDLxmiElp_2iWV1smBlyL4r9bQ96YAsbW06tXf3Ni0YI7-xPPQaBcqQHUbI59uK_Fn_00ekHSSKLVwSJG2MPJPgrEIpI0Wq=s0" alt="" data-size="line">可以进入数据详情页看到该版本的详细数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FUCWtHgBNsLUwAEvUWFLm%2Faab45d64b7c29073a034066e882a2e5.png?alt=media\&token=940676ec-ac4e-4a33-bbaa-8fa74cca19d3)

* 通过版本管理，您可以便捷地对您需要的数据版本进行Commit，并详细查看所有历史Commit的数据以及数据集信息，详情请查看：

{% content-ref url="/pages/-MWTwpDTHZ1jkXGiySfi" %}
[数据版本管理](/guide/tensorbay/version)
{% endcontent-ref %}

## 使用TensorBay上的数据 <a href="#id-5" id="id-5"></a>

* 您和您的团队成员，可通过开发者工具，包括Python SDK、CLI与Open API，读取您的在TensorBay上准备的数据集，与您的Pipeline快速集成。

{% content-ref url="/pages/-MWUBpTrcMvPUyNWXhPg" %}
[如何与Pipeline集成](/guide/tensorbay/pipeline)
{% endcontent-ref %}


# 数据集准备

TensorBay为您提供多种方式快速准备您的数据集，您可选择您需要的方式完成创建数据集。

* 直接创建新的数据集

{% content-ref url="/pages/-MWSde6OncKl1OKYrLD\_" %}
[新建数据集](/guide/tensorbay/data/create)
{% endcontent-ref %}

* 通过云存储授权的方式高效地管理云端数据

{% content-ref url="/pages/-MWTrNbO2kD-IMDSp3hQ" %}
[管理云服务上的数据](/guide/tensorbay/data/authorize)
{% endcontent-ref %}

* 在已有的数据集中通过筛选数据创建新的数据集

{% content-ref url="/pages/-MWTuv-6QotRKpZJWYq6" %}
[利用数据集筛选快速新建](/guide/tensorbay/data/filter)
{% endcontent-ref %}

* 通过合并已有数据集创建新的数据集

{% content-ref url="/pages/-MWTvc6LNV7VXjv1wo2R" %}
[数据合并拆分及复制移动](/guide/tensorbay/data/merge)
{% endcontent-ref %}

* 通过Fork公开数据集创建新的数据集

{% content-ref url="/pages/-MWTwA3J7wOyGexlgLzK" %}
[通过Fork使用公开数据集](/guide/tensorbay/data/fork)
{% endcontent-ref %}

TensorBay支持两种数据集存储方式：

* 默认存储：您的数据将存储在TensorBay云端存储（阿里云OSS）中，并且为每位注册用户提供100GB的免费存储空间。
* 授权云存储：如果您的数据原本存储在其他公有云存储中，您可以通过公有云的授权使用方式，将权限关联的密钥提供给TensorBay，授权TensorBay管理您的云端数据。通过[管理授权配置](/guide/tensorbay/data/authorize#4)轻松托管云端数据。


# 新建数据集

您可使用【格物钛存储】的方式，将数据上传至TensorBay；也可使用【授权存储】的方式，授权TensorBay管理您存储在其他云服务器上的数据。

## 新建数据集 <a href="#id-1" id="id-1"></a>

* 在顶部导航栏点击【我的数据集】（个人开发者）或【团队数据集】（团队开发者），选择【新建数据集】下拉框中的【新建数据集】进行数据集新建。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FZNlGvtS8MfQviPAQDwim%2Fimage.png?alt=media\&token=e39eed94-60b6-4302-bc9b-6cde3fe9e38a)

### 创建名称&别名 <a href="#id-1-1" id="id-1-1"></a>

* 填写数据集名称、别名（选填），系统将根据数据集名称生成该数据集的URL。数据集名称和别名均可更改。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FTAxnpxYOpR4O2uS5zuKd%2Fimage.png?alt=media\&token=f39e50ab-265e-4222-90ed-2638216a3cda)

### 选择存储配置 <a href="#id-1-2" id="id-1-2"></a>

* 选择【存储配置】，选择或创建您的数据存储方式，并将数据上传至对应的存储空间（注意：这将占用您的格物钛存储或授权存储空间）

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FuU868n0T232KboNSLfVJ%2Fimage.png?alt=media\&token=b0abecf5-32e9-45d4-88c9-d76c0bd80d0d)

### 新增数据存储配置

* 若下拉栏中的存储配置不符合您的存储需求，可以点击【新增数据存储配置】新增存储方式。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FjXYmPzVI4yvUEkirB7BE%2Fimage.png?alt=media\&token=6f3106e9-7d72-4bb2-a8af-b4e20a840c9b)

* **个人开发者**仅支持选择【格物钛存储】，并且选择存储区域，将数据上传至您在TensorBay上的私有存储空间（注意：这将占用您的默认存储空间）

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fq2BEbk385owHjUbc0aQM%2Fimage.png?alt=media\&token=4ed91b79-3471-4143-8bd1-6d4df18a8573)

* 除了【格物钛存储】，**团队开发者**也支持选择【授权存储】，TensorBay将通过授权方式读取和管理您在其他云服务器上的数据，该操作不占用您的默认存储空间，但会占用授权存储空间。在填写相应配置信息后，支持通过授权方式使用您在阿里云OSS、亚马逊S3以及Azure Blob上的数据。详情请参照[如何管理您在云存储上的数据](/guide/tensorbay/data/authorize)。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F452mB80lJiwUYf2243JU%2Fimage.png?alt=media\&token=0c1cd38b-1772-45f9-9ce2-96159dbe0bd8)

{% content-ref url="/pages/-MWTrNbO2kD-IMDSp3hQ" %}
[管理云服务上的数据](/guide/tensorbay/data/authorize)
{% endcontent-ref %}

### 选择可见范围 <a href="#id-1-3" id="id-1-3"></a>

* 选择【公开】，则表示您的数据集的数据将对社区用户开放，任何人都可以搜索、查看、查询和Fork此公开数据集中的所有数据。格物钛支持您对开源社区的贡献，将为您公开的数据集提供不限额的免费存储容量。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FVd56RoIjfm6egfSDKawh%2Fimage.png?alt=media\&token=f45ed9f7-5840-4f0c-8f92-ce97c600f871)

* 选择【私有】，则表示这是您的私有数据集，任何人将无权访问，仅您可以控制数据集的查看和使用权限。若您创建私有的团队数据集，则默认您的团队成员可搜索和查看您所创建的数据集的基本信息，您可以控制哪些团队成员可查看、使用、编辑或管理您所创建的团队数据集的数据。

## 添加数据 <a href="#id-2" id="id-2"></a>

* 数据集新建成功后，会自动默认新建一个main Branch，并在此branch上默认新建一个draft，并进入【上传数据界面】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FJgIgUE8zoFpCI7N4jL6c%2Fimage.png?alt=media\&token=333c356c-7c8b-4552-bd76-be8ad90288fd)

* 您可以将数据上传至指定Segment中（文件上传需先新建segment），数据上传支持【本地上传】、【通过开发者工具上传】这两种方式。
* 您也可以点击【跳过】，直接进入【Commit Draft】界面。

### 本地上传 <a href="#id-3-1" id="id-3-1"></a>

* 选择【本地上传】，您可将本地文件夹拖入页面中，或在本地目录中选择多个需要上传的数据。数据添加完成后点击【开始传输】，TensorBay则会将数据从您的本地读取后直传至您的私有云存储空间中。在传输未完成前，请不要离开传输界面，否则会造成剩余数据传输失败。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FhoFYlSWbtWuiQA2aMwEI%2Fimage.png?alt=media\&token=b14b8af4-152f-41ac-91c3-66227dd8ec77)

### **通过开发者工具上传** <a href="#id-3-2" id="id-3-2"></a>

* **开发者工具上传：**&#x53EF;以通过Python SDK或Open API的方式上传数据文件以及标注数据。该方式支持融合数据集、连续数据以及标注数据的上传、编辑和数据管理。详情可见如何使用[开发者工具](/dev-doc/tools)。

{% content-ref url="/pages/-MLCnlrTBgRXldjOYYbu" %}
[开发者工具](/dev-doc/tools)
{% endcontent-ref %}

## Commit Draft <a href="#id-4" id="id-4"></a>

* 完成数据上传后，点击【确定】进入【Commit Draft】界面。输入Commit 标题、描述（选填）、Tag作为该版本的说明，点击【Commit】发布新的版本，完成Commit操作。发布后该版本将不再接受修改。

{% hint style="info" %}
仅 Commit 后的数据集基本可用于标注、训练等数据的后续使用。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FtbGhc7KZbAtlZJ3j8txJ%2Fimage.png?alt=media\&token=18aa0928-8974-4de2-807b-5a75063750e7)

* 如果暂时不想将该Draft发布为新版本，您可点击【跳过】，数据集将保留【Draft】版本，回到数据集详情页，您可通过【管理数据】进入【数据列表】继续修改如上传数据、删除数据等；或通过【编辑】进入Draft列表页面，选择Draft，对数据、数据集信息进行修改。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FUUbY4IPgco3F1D477862%2Fimage.png?alt=media\&token=af03995f-72bd-4a8e-899e-ecf44633f1c2)

* 通过【管理数据】进入【数据列表】对数据集信息进行修改及查看,支持用户在当前页面查看数据集信息，进行搜索，查看Catalog, 新建draft来编辑数据以及用当前搜索结果创建新数据集等操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5c-vLs5O098Of8s8c%2F-Mi5d1uijVbDO9lINDUB%2F220496048a43aac74d45d2cdf2331c0.png?alt=media\&token=71735166-c9ae-4ba7-b0f0-ff8096ca6fb1)


# 管理云服务上的数据

您可以通过云存储授权的方式使用TensorBay高效地管理您的云端数据。

## 添加数据存储配置 <a href="#id-1" id="id-1"></a>

在开发者版个人空间中您可进行【格物钛存储】配置管理，在团队空间中仅团队的超级管理员或管理员可对团队数据集的【格物钛存储】配置及【授权存储】配置进行管理。

* 配置入口一：点击顶部导航栏【我的数据集】（个人开发者）或【团队数据集】（团队开发者）列表界面，点击右侧工具栏<img src="https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWc3otOEq16p9GQPFAv%2F-MWc4LFkPjZqS9a_urYA%2F%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_16166538925094.png?alt=media&amp;token=260a6da8-d51c-43ef-9d19-bd46351df241" alt="" data-size="line">进入数据存储配置列表界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcD_YKcMNT7xlUSIZ2%2F-MWcH1Oq8GOi3pjxLENu%2F1.jpg?alt=media\&token=1cb5156a-a4fa-4598-8ce3-89f0039554de)

* 您可以在数据存储配置列表页面管理当前工作空间的存储配置信息。点击【新建配置】则进入新建配置界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FCxIh9R3TqHWTufZkXuW1%2Fimage.png?alt=media\&token=83d19c23-6d01-4930-aef8-ca84cb8f7de3)

* 配置入口二：点击【创建数据集】，点击【新增数据存储配置】，进入新增配置界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FV2E8DZ3qTdtA3QSts41j%2Fimage.png?alt=media\&token=e987a493-e5d8-4feb-9ec5-59a3ab3d1ae8)

* 进入【新建数据存储配置】，个人开发者仅支持【格物钛存储】，可以选择不同的区域来存储您在TensorBay上的数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FuHOSdg4LSHaEr96bsJPr%2Fimage.png?alt=media\&token=afd2755f-e36b-4194-af21-a4d8e4549282)

* 团队开发者可以选择【格物钛存储】或【授权存储】。
  * 【格物钛存储】需选择不同的区域来存储您在Tensorbay上的数据。
  * 【授权存储】需填写配置名称，选择您的云存储服务商，填写相关授权信息后，点击【完成】。Tensorbay与云存储服务商成功校验相关配置和授权密钥的正确性后可保存授权信息。目前支持通过授权使用阿里云oss、Amazon S3、Azure Blob上的数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fx9izZJBB3tIFNRn47btB%2F1647597725\(1\).png?alt=media\&token=19547da8-8da2-410e-ae9b-218e2cd26afd)

* 对于存储在阿里云oss上的数据，您也可以选择通过**授权RAM**进行数据授权。

{% content-ref url="/pages/GwkTfwYdgsNo6B8ywwV1" %}
[阿里云oss用户授权RAM](/guide/tensorbay/data/authorize/a-li-yun-oss-yong-hu-shou-quan-ram)
{% endcontent-ref %}

## 管理数据存储配置 <a href="#id-3" id="id-3"></a>

* 您可以在数据配置列表对云储存配置进行管理。选择您需要修改的配置，点击最右侧的 <img src="https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhHg6mJVxlGd9pkWnfo%2F-MhI4bZJ9LL2slkZNsHt%2FWX20210817-154935%402x.png?alt=media&amp;token=c2968c53-078c-4151-a932-cdb91206a3d4" alt="" data-size="line"> 选择您要进行的操作。
  * 格物钛存储支持【设为默认】和【删除】操作
  * 授权存储支持【修改配置】、【设为默认】和【删除】操作。
* 请注意，管理数据存储配置仅限开发者用户和团队超级管理员或管理员操作，团队普通成员仅可查看不可修改。

#### 管理格物钛存储配置

* 点击【设为默认】可将该存储配置设为您的默认配置，后续新建数据集时，存储配置默认显示为此配置。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FgOuoPeD9sNIZcmnOFGvY%2Fimage.png?alt=media\&token=cdd3ed84-add9-4991-962f-22f897f11a4d)

* 点击【删除】可删除该默认存储配置，删除默认存储配置将不会影响通过此配置所创建的数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F7Mh4xaEEfbBnGsCYEqQ7%2Fimage.png?alt=media\&token=f9c53ebf-4c1c-44e2-943c-45118085d21a)

#### 管理授权存储配置

仅团队超级管理员或管理员有权对授权存储配置进行操作

* 点击【设为默认】可将该存储配置设为您的默认配置，后续新建数据集时，存储配置默认显示为此配置。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FDPsxjmIUE4zsZUHTnKoh%2Fimage.png?alt=media\&token=20bdbf38-0736-48bc-81c3-65169d57b6e9)

* 点击【删除】可删除该授权存储配置。
* 请注意，若删除授权存储的配置，则无法在创建数据集时使用。建议确认目前没有正在使用该配置的数据集时，选择删除该配置。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F2sVqurJDdR1hG4bhX30r%2Fimage.png?alt=media\&token=cd8bd470-9d8d-47ee-bfa4-1e467762d7c7)

* 点击【修改配置】进入授权存储配置更新页面，您可以修改Accesskey ID或Accesskey Secret（取决于不同云存储服务上），修改完成后选择【确定】保存您的更改。配置修改后将重新校验您的配置和授权信息是否正确。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FIe2VkFM0mRbBExcfydG4%2Fimage.png?alt=media\&token=ad6b7996-4e20-4b3d-8c15-788fb6a4c3b2)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FXkrQB74TIR3tgumtvfXz%2Fimage.png?alt=media\&token=81a24f71-914c-49f0-98a0-6be32e7cfcdd)


# 阿里云oss用户授权RAM

您可以通过授权RAM方式进行授权存储，可以有效提高数据安全性。

## 生成RAM UID

* 选择**存储配置商**为**阿里云OSS**，**配置方式**为**授权RAM**

![](https://lh6.googleusercontent.com/47hQ-d7-T0E9JQbbQpIw_Vc7uoDtrM-Y0Oo0F1McYWKzQ82WIkhRYgSUxWHkLR1dC2aCfEMqwO6MyUC9vxeIqyrq0Gp3FHxjQJf4uD3vLiy2odO6XrmeYcnao9sDf5RaS1XJ6-yn)

* 复制格物钛平台为您生成的**RAM UID**

![](https://lh5.googleusercontent.com/lYLEu1B2fRMzMUbBxijb3Lrqv8XaLsdyteoIFXYdQz6abQLHJrNGPkpth9zOXe-LnCuNrlJE-kMvpQrn1ZT0DpM0Xw9RZi2k2AvJsVehNnj2YDVtrqWRzt5Q7RXMdRD9WPsyVDer)

## **阿里云授权配置**

### **进入阿里云平台**

* 登录阿里云账号，进入[阿里云oss控制台](https://oss.console.aliyun.com/?spm=a2c4g.11186623.0.0.4e4e28736TGbJq)。

![](https://lh3.googleusercontent.com/O16ldnYdpS6FxwRCZ_4FT6v6ZGa-Sgz3SX8RcGWRyV8OrGjSm6Il_m2AO_BqWze58-P5cexgxDgyYFac5lefySSaph-ckl50sKIscaBXzf9tarI8KSnnOtct2cFDFOiCWtZpjoKv)

### **进入授权页面**

**方法一：**

* 点击对象存储中左侧【Bucket列表】，选择**目标Bucket名称**，点击进入文件管理页面。

![](https://lh5.googleusercontent.com/8rtZgawfkbIjc1j87in7OnXlm6bX1yL4U58-9iX4U7c4F9n2rIONKQlWlv5Sgs8KStW6czSo-EoNqAW9FDxNA3spSLfrdRnhhgkF7FEjRAKiYLt8a1KxkseYT1Yrcqu0lbtU78G2)

* 进入文件管理页面，点击【授权】。

![](https://lh6.googleusercontent.com/I1Q1-e5oVZE9LFZAE6Rz9sjZE3nm7_-Srjlfga9edYw9FGFDrJ5i19-14_H89DBMpLJEkNpyCw_Cesbnr9GmjLnlnI0FCTbHkUsHipFzZaUaxPciGDaQZQD6csIeY5Rpm83bsxw1)

* 进入授权页面，点击【新增授权】，进行新增授权配置操作。

#### 方法二：

* 进入文件管理页面，点击左侧【权限管理】，切换至权限管理页面。在**Bucket授权策略**模块，点击【设置】，进入授权策略设置页面。

![](https://lh4.googleusercontent.com/AispGUpP7RNn2bx6uyg_x2bDzP7GNtlxhieBXuAeExasv6BTFpRJdnMaikHDQET6tvloogdNU7HFiL-dAAQg3mzoi2770JSd5s5AGOgJo8O7aLrvNmQRQWa00KkLywsg_SdqSHAL)

* 点击【新增授权】，进行新增授权配置操作。

![](https://lh6.googleusercontent.com/jcFn2GmL0VbmjcdSFlQVL4gkfNCWgtpX_pAUvxPMPH2BtPw_qDEr7v6YoyHTZFjGW8RqDyKFd7Bw61xAI56O7b78fvZJLuKQ0xdUVm4omssw24DEk0e7VsSYOLHCMMVqASGwbMaK)

### 填写授权策略

* 在新增授权的对话框中，填写授权策略。
  * **授权资源**请选择**指定资源**，并填写指定资源路径
  * **授权用户**请选择**其他账号**，并填写您在格物钛平台复制的**RAM UID**
  * **授权操作**请选择**完全控制**
  * **授权条件**：不要勾选访问条件。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FyozHLZZcLK8de6Lse4v6%2F1647593682\(1\).png?alt=media\&token=e7722c45-a48b-4043-a986-db625a8b2ca8)

* 点击【确定】，新增的授权信息将展现在授权页面中。确认授权信息无误后，您可以记录以下配置信息：Bucket Region, Bucket name, File path，以便进行后续配置。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F7RMJVz1M1NoCneL6Tron%2F1647593030.png?alt=media\&token=ded94ea3-2cb1-4a13-8425-8801d07e9712)

## **填写配置信息**

* 回到格物钛平台，在授权存储配置页面继续填写您的配置信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FWjfbQTPOEjDgJq6KNV8b%2F1647593214\(1\).png?alt=media\&token=77384dbd-fb0f-4c80-89b0-503d74955f51)

* 确认配置信息无误后，点击【确定】，等待平台进行配置验证。


# 利用数据集筛选快速新建

在TensorBay中，您可以在已创建的数据集列表中通过筛选现有的数据，快速创建新的数据集，该操作将不会重复复制数据，无需担心数据量，操作快捷，节约大量存储成本。您在筛选操作中也可以通过可视化组件在线查看数据详情，标签分布等数据信息。

* 在TensorBay数据集列表页，在创建数据集的下拉框中选取【Create by filter】，选择您需要筛选的数据集。
* 代码示例：

```
def init(params: dict):
    # 进行初始化工作，可以返回一个函数或None
    return None

def run(data: dict, func=None) -> bool:
    # 执行判断操作，data传入的是一个数据集文件相关的数据，func时init返回的函数
    # 如果通过筛选返回True，否则返回False
    return True

def teardown():
    # 执行清理工作，没有返回值
    pass
```

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcPjGIY508nhWtzoDA%2F-MWcQ0t8c8CmCDHCToOo%2F1.jpg?alt=media\&token=c721a288-0aa7-475b-90fa-b535d66b05d3)

## 输入筛选条件

在数据信息筛选条件框中，你可以根据筛选数据需求填写【数据名称】。也支持在【Segment 列表】中单选和多选segment。如果您需要的筛选数据集类型为融合数据集，可以选择有无数据标注的选项。根据此选项，可以在【标注信息条件筛选】框中进行进一步的标注信息筛选。

![](https://lh5.googleusercontent.com/2RGuBbLpB-NIO4Ms_nlG9v4qcdEV_489zkZywXZ7gRj-qoL-izi3gLcaQ-JPFWhBM288-1VACbjjtUjRDofvKVo7MU9Ixa64ys0WuvhzxdqfgtlFnNa7V2PoLVaC26yQUBXMLksD)

* 点击请选择，选择需要搜索的基本信息，目前Box2D基础信息包括：Segment，数据名称，数据大小和是否包含标注。 点击添加【搜索条件】，添加其他搜索条件；点击搜索条件右上角，删除搜索条件。

![](https://lh4.googleusercontent.com/lYK-bOB0ZYyaLXiddu3e_XCS_D7ZmQosVM1NajLrP5TEMm1kMX9QFCnNvLy5-DBspcgRy5q5SPpujRwlhbg4HbEIPS4ficcz7tk3KEkPgRmN1hoFfVzL92E0lnAdL7mAruHsAXWE)

## 查看搜索记录

### 查看记录首页

* 点击【搜索记录】，您可以查看过去您使用过的搜索记录的状态。

【未保存】：首次搜索，此时搜索结果未保存，不能新建数据集。&#x20;

【保存进度】：选中搜索结果，点击保存后，开始对搜索结果进行保存。&#x20;

【已保存】：第二次搜索，此时结果全量展示并保存，可以用此结果新建数据集。

![](https://lh3.googleusercontent.com/oaLKrCYw6N3X42Kct2ep5Cr5j4aMq0DO_atlvC5YD1JDpr-SgljDI9Rdpo5Ir5AGuYEzz77O9MZCxOSISRX9MlnFAECCOmUhlIpzikmzspKZS1f9_js9W6vwCGfKHcExHl8sxniQ)

### 选中搜索记录

* 【未保存】记录：选中未保存的搜索记录，您可以在搜索栏查看搜索条件，在数据列表页查看文件数量及大小并预览100条搜索结果。

![](https://lh3.googleusercontent.com/VpEeN1HWKA5QDmdXNYq1bsLU7v9HRQ7uCHXXEca6DhM_rtoivjNEXjZyAi5HH8kmzJh4Um2-DYZElV1HegHTTehScjrv3HP1Ew4t09FEdqVpei8HMjrzjGkLuYeH9kC4e9WeR2C1)

* 【已保存】记录：选中已保存的搜索记录，您可以在搜索栏查看搜索条件，在数据列表页查看文件数量及大小并查看全量搜索结果。

![](https://lh4.googleusercontent.com/vJtj2OkkOrSba-mIO434TnpOqcUjbfSd8sgT6cJbg1aLo53IqWYzPp7IU2Dg7QvgdGR0SKa7vPflNJlHt9-ORItdVJk8LgFws4wWuItLIWjfbW-v9dQ9bXQmxqNIWHpE0z8QwWn6)

## 使用标签筛选数据 <a href="#id-1" id="id-1"></a>

* 选择某个需要筛选的数据集后，将进入【数据列表】界面，您可以在左侧下拉框中选择您需要数据管理的版本。

![](https://lh6.googleusercontent.com/3-CdZkKzLZER3J9pneTJvUHyHHp9xfGKPuDt02ET3jS3GJSezaoGSkelTQlLB_rVWgcZ5R6UOWj0gIN8jRmQk2-Gw0XysdGEu6yjFW4yhHnKC9iII72cGBySqSX0PxpDj1AkhINc)

* 确定需要管理的版本后，您可以筛选该数据集的Segment，标注类型以及标注标签，得到数据集中符合筛选条件的数据，筛选后的数据将更新在右侧的数据列表中。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5dQ5yxbxXUOKDwTHy%2F-Mi5jSFs9aB1AJgpCgnb%2Fb83745e040cc958d762f6a4d036f0ac.png?alt=media\&token=457b7cd6-aae1-487d-bb80-b0f5d07cc30b)

## 查看数据详情 <a href="#id-2" id="id-2"></a>

* 在【数据列表】页，您也可以通过右侧可视化中在线预览数据及查看具体的标注情况，使用详情请参考[可视化插件指南](/guide/tensorbay/visualization/visualization-widgets)。

![](https://lh6.googleusercontent.com/syfwphjWyfokrmnxArOaKiFym5js3UGoNaCYi0n68mYlFT_sRKTXBb4i4p4AHxn5_pYs1gomz8sx0kIGCmBbaLFcRGu1KAGRfphxC8GwDSZQ2irZKEd-_nPhzvoXoQinRkfyEkDT)

{% content-ref url="/pages/-MWU48zXlRgfjJ5o6rWo" %}
[Pharos 使用指南](/guide/tensorbay/visualization/visualization-widgets)
{% endcontent-ref %}

## 查看标签分布 <a href="#id-3" id="id-3"></a>

* 在【数据列表】页，您也可以在【查看模式】的下拉框中选择【统计指标】来查看各标注类型、标注标签的分布情况。

![](https://lh6.googleusercontent.com/klgZGjKFrCjB7EWT6haEwam8ruWUlAkErs5XoXAhctwCQzfKLAyza5nCeXDgxOlOBv63ApFWyXxWOhEdgfe_hL6NI1INCnc9fGUiy8jTmqA-cupB5i0y-UTtT0Lz1E6WD8LXV5xw)

## 通过搜索快速新建数据集 <a href="#id-4" id="id-4"></a>

* 初次数据筛选完成后，搜索记录为【未保存】状态，此时您可以，在数据列表页查看文件数量及大小并预览100条搜索结果。

![](https://lh3.googleusercontent.com/ayQXbfNTGfH7_mZabhGYh7Xq4z7nx0wRzImZ8EKqw30NE-tI_9LX2NXAwoAOCgl5UnXEXphLhwI-jKrbM7ywIiSqpGtLQDTb_qjyPj679b4-Dl64PSiNioUOWCn3yxa-SPOlawhT)

* 如果您希望用此搜索结果新建数据集，请先对搜索结果进行保存，已保存的搜索结果新建数据集。 选中您需要保存的搜索记录，点击【保存】按钮，对搜索结果进行保存。

![](https://lh4.googleusercontent.com/f7ttMovfC0EmzpN_Tb0qbANQ3NvYNAlS9bgJ6JAalTFx4-QfM6DLisVkWo-bK2MHeKEJHX1G1brW6i32MUfcbHOVpULLTZ607fIdvaa8_CcFyakUDLg7DqC4qu6yyfEmrpwVzDHY)

* 保存完成后，搜索记录状态变更为已保存。选择【用此结果新建数据集】。

![](https://lh3.googleusercontent.com/bPfsCl3GYUrvEH8u9MMG3tzPRM9Y_dMDEzH_lVXKvnLXAlk1VK_S-j_mX1E1Doilij2g5lr8V8rZCISQhvpiQKyLBCXfe4xiLpM5VWCVnIEiqKNwyEVffbmNPXVspXBCrdo_dKHp)

* 填写数据集名称并设置可见范围（公开或者私有）后，选择【确认创建】完成数据集创建。注：您可以在此界面看到已选数据和数据来源。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5dQ5yxbxXUOKDwTHy%2F-Mi5mj3fbFvg-z_S2ESU%2Fc9bc88685a9d88d35ff917939d571b9.png?alt=media\&token=768e1b8e-daa7-421a-b237-41766007aa98)

* 数据集创建完成后，将转跳至新创建的数据集的详情页，可查看通过筛选创建的数据集。

## **高级搜索**

除了可以使用基础筛选条件（segment名称、标注类型和有无标注）以外，融合数据集和普通数据集支持自定义高级搜索功能。您可以通过制定GitHub URL的方式获取文件，并以该文件作为筛选方法，对数据进行筛选。

* 在数据集详情页中，点击【管理数据】，进入【数据列表】页面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiKpEu7EjQeNv5GD01E%2F-MiL2H_SRyFEADH2nIYB%2F27fa2ad4364b5fae8063e4cde17d2d8.png?alt=media\&token=cbdb83b6-1130-42f4-b4b0-c3cae9578b8d)

* 点击左上角【搜索】，再点击【高级搜索】选项
* 左下角会显示【高级搜索GitHub Repo Link】窗口。将您需要上传的文件链接复制入弹窗中，并点击【搜索】执行筛选。\
  注：填写链接需遵循https协议，即链接需用https开头，地址和revision之间需用“:”分割。
* 代码示例：

```
def init(params: dict):
    # 进行初始化工作，可以返回一个函数或None
    return None

def run(data: dict, func=None) -> bool:
    # 执行判断操作，data传入的是一个数据集文件相关的数据，func时init返回的函数
    # 如果通过筛选返回True，否则返回False
    return True

def teardown():
    # 执行清理工作，没有返回值
    pass
```

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5dQ5yxbxXUOKDwTHy%2F-Mi5oMqijVwrw4ONi1Oi%2F0b6668837cf1f394e67a846312d7d3a.png?alt=media\&token=7b73b026-5c66-402b-82f6-23662e4a8d41)

* 结束高级筛选之后，结果会自动录入【筛选记录】中。\
  \ <br>


# 数据合并拆分及复制移动

在TensorBay中，您可以通过使用Python SDK复制或移动现有数据来准备数据集或创建新数据集。

* 点击顶部导航栏【我的数据集】（个人开发者）或【团队数据集】（团队开发者）进入您工作空间的数据集列表，在【创建数据集】的下拉框中选择【Merge by Python SDK】跳转至SDK文档页面，请参照SDK指引文档完成新数据集创建。
* 通过PythonSDK支持将原数据和标注数据复制或移动至另一个数据集，或在相同的数据集中从一个segment复制或移动至另一个segment。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MkFYI5gIhcia30LYKw9%2F-MkFZa4uSekoiYioLEcJ%2F032b4a0ac4c4a8c80549c4685cf5213.png?alt=media\&token=9cbe89a2-cdb8-4635-895d-469477a2f402)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MkFZdgMtCdYtc7MXBBo%2F-MkFZrQPvbHxAy3PTbaS%2F8cdf56a48abbc4caf9b698ee25a05b0.png?alt=media\&token=f3af4233-2426-4830-823c-2afc470dc612)


# 通过Fork使用公开数据集

在TensorBay上，您可以通过Fork在OpenDatasets上获取数据集，快速使用公开数据集。

* 在创建数据集下拉框中选择【Create by fork】，进入公开数据集首页。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcg_MuItN5i0MWvG3j%2F-MWchFDGVJ8ZMOHCv-2s%2Fimage.png?alt=media\&token=73327aa1-4d06-4c14-ac70-78f645ea26a5)

* 在公开数据集首页，搜索您需要的公开数据集。

{% hint style="info" %}
建议使用英文搜索
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWchUJI9GJ1vXu3F5uN%2F-MWcjF4ssaRtdn0y3nnC%2Fimage.png?alt=media\&token=cfca2616-696c-466b-9452-fb1b4d2383d7)

* 选择某个数据集后进入数据集详情页，点击右上角的【探索数据集】，在下拉框选择【Fork数据集】可将该公开数据集创建副本至您的TensorBay的工作空间。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWchUJI9GJ1vXu3F5uN%2F-MWcjbQI68kMdmgtlcav%2Fimage.png?alt=media\&token=8d6c71b3-0079-47a4-88f3-dccb36c5164f)

* 【Fork数据集】完成后可在您的工作空间的数据集列表中查看该数据集，通过Fork创建的新数据集，在数据集名称前有对应的标志。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWchUJI9GJ1vXu3F5uN%2F-MWck2IVvUNnf2o4dIuq%2Fimage.png?alt=media\&token=468fc9de-8705-414a-9bfe-2026d353ed46)


# 数据版本管理

在TensorBay中您可对数据集的数据进行版本管理，包括对原数据文件、标注数据以及数据集详情信息进行版本管理。

{% content-ref url="/pages/-MWTx9QhKBC2C1gBQOS6" %}
[管理数据文件](/guide/tensorbay/version/data)
{% endcontent-ref %}

{% content-ref url="/pages/-MWTy1EEwewKUeHRPpUY" %}
[管理标注数据](/guide/tensorbay/version/annotation)
{% endcontent-ref %}

{% content-ref url="/pages/-MWTyIUZu18SDjnIX6vm" %}
[管理数据集信息](/guide/tensorbay/version/dataset)
{% endcontent-ref %}

{% content-ref url="/pages/-MWTzETGYRl1Eud9jwEk" %}
[管理版本信息](/guide/tensorbay/version/version-info)
{% endcontent-ref %}

{% content-ref url="/pages/-MWU-zoqjX7pu5woktwM" %}
[数据集活动](/guide/tensorbay/version/activity)
{% endcontent-ref %}

{% content-ref url="/pages/-MWU0uPGP62aGJrj5N6o" %}
[数据集设置](/guide/tensorbay/version/setting)
{% endcontent-ref %}


# 管理数据文件

面向AI开发者的非结构化数据将以文件形式进行存储和管理。数据文件存储根据格物钛存储或授权存储实际存储在相应的公有云存储上。TensorBay支持通过Web端或Python SDK 、Open API上传数据。

{% hint style="info" %}
仅数据集的【Draft】版本可进行上传、删除数据等对数据修改的操作。
{% endhint %}

## 原数据类型 <a href="#id-1" id="id-1"></a>

TensorBay支持图片、视频、音频、文本等原数据类型，支持管理连续数据、多传感器数据等复杂结构的数据集管理。

## 上传/删除数据 <a href="#id-2" id="id-2"></a>

* 在数据集详情页中，点击【编辑】，进入【Draft列表】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5oR5cN9AsV-rNZDk7%2F-Mi5qs9MBQ_jH-2V2zZj%2F16b4e36c380b354f441ecafe7b4609f.png?alt=media\&token=3dc58a78-d3af-44e2-8dc3-b2f52eea0c4b)

* 选择某个Draft（暂时仅支持对每个Branch创建1个Draft）进入数据列表，点击右上角【上传数据】，进行后续上传操作

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5oR5cN9AsV-rNZDk7%2F-Mi5sDdoOiBn54bCj3jD%2F9c82cf39bbfa1fea50047e832dd556e.png?alt=media\&token=d3df7d83-d8cb-450e-81d3-e929152d9151)

* 进入Draft详情页后，点击【数据】后的【编辑】，直接进入数据列表页，即可【上传数据】；或找到特定数据文件，进行【删除】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5oR5cN9AsV-rNZDk7%2F-Mi5sX-RUbldzbSDtQ5u%2F08419e7126f9208219390bdf01e9020.png?alt=media\&token=494d6585-0e2e-43a1-bdbd-bbc954693d8f)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5oR5cN9AsV-rNZDk7%2F-Mi5s_1FSddFV54XOU6n%2F991ee517ee31c961241a717a9c2c593.png?alt=media\&token=a9f6e716-cb15-4b68-8f00-8828ed5a29c2)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5oR5cN9AsV-rNZDk7%2F-Mi5sbEMZCA5pljBpsl5%2F29ec414134b38fd35cff174c8e87ff9.png?alt=media\&token=4f4ea6c6-05d3-4cea-a047-2556cdc0662e)

{% content-ref url="/pages/-MWSbbiz429ASW3po9Q\_" %}
[数据集准备](/guide/tensorbay/data)
{% endcontent-ref %}

* Commit当前版本：确认修改后，点击右上角【Commit】。![](https://docimg10.docs.qq.com/image/_9fjQqRUNDcC5lOmMweCjg?w=1933\&h=912)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5sdLAwfB8aL7QEcXL%2F-Mi5svrLZU4WiIiHvHvC%2Ff14b8251748243f87ee378e028344c0.png?alt=media\&token=5f5d5d8b-4ccd-4aca-a7f8-16b6052247d1)

* 填写Commit message和Tag后，点击【Commit】完成新版本的发布。

{% hint style="info" %}
当前版本的数据Commit后，该版本的数据将不再接受修改；后续数据的修改将被保存在Draft草稿模式，修改后可Commit为下一版本。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5sdLAwfB8aL7QEcXL%2F-Mi5t-lkdFwA_TdtCBn-%2Fd1fbfeb67c0dbe0c1383f3bb45f2c9a.png?alt=media\&token=6abe5336-bbde-4fec-abbd-dea7ee7d34f6)


# 管理标注数据

在TensorBay上，您可以上传、删除标注数据并对编辑后的数据集进行版本管理。

## 上传、删除和修改标注数据

* 在【数据上传】页面，选择【通过开发者工具上传】，通过Python SDK、CLI或API完成标注数据的上传、删除和修改。具体详情请参照[开发者工具](/dev-doc/tools)。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbIUJtd1xbVqbrM5SjN%2F-MbJv5nYq9vq8jFpeVAX%2Fimage.png?alt=media\&token=e9d53073-fac0-44a3-a9b7-fec6cc2208f4)

{% content-ref url="/pages/-MLCnlrTBgRXldjOYYbu" %}
[开发者工具](/dev-doc/tools)
{% endcontent-ref %}


# 管理数据集信息

* 在【我的数据集】或【团队数据集】列表中，选择需要编辑的数据集，进入该数据集详情页，点击右侧【编辑】，进入Draft列表页，新建Draft后，即可管理您的数据集信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5tC04u1kgzdHhaKfE%2F-Mi5tHOzSerLu9Woqbw-%2F16b4e36c380b354f441ecafe7b4609f.png?alt=media\&token=074a573a-4c00-4fcf-97e2-2cd14272c68b)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5tC04u1kgzdHhaKfE%2F-Mi5tOHxHPtRoH12PTvu%2F9c82cf39bbfa1fea50047e832dd556e.png?alt=media\&token=fd9f6a41-8c96-477d-aeba-0ddce57c453a)

* 在【Draft详情页】，您可以点击【数据集信息】右侧的【编辑】来进入数据集信息管理页面，在这里，您可以编辑数据集标签、数据集描述、数据集版权信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5tC04u1kgzdHhaKfE%2F-Mi5tbQ5dUIDezV4bUuF%2F460ed8692c7d68981630e80f60a1c55.png?alt=media\&token=b0cb1a8f-16d5-45b9-88ef-9d54dafaba0d)

## 编辑数据集标签 <a href="#id-1" id="id-1"></a>

* 在数据集信息列表中，选择【数据集标签】部分，您可以在此选择该数据集的数据格式，数据集应用场景，也可以添加自定义标签，方便您在搜索数据集时更容易获取到您的数据集。

![](https://lh4.googleusercontent.com/jnelDanHCLZ2gpufMaGVX6eSDJuV3yWAZ-FGbUaDW272fcisqunjAtB1z8mSCAxnebQi5PhXk2saf2Wu8AJAWy62lO8lU1ehP8jbK9BkGRjiR6lW7OugHlcAsSOLtpwJzst2Xo20)

## 编辑数据集描述 <a href="#id-2" id="id-2"></a>

* 在数据集信息列表中，选择数据集描述部分，您可以在此详细描述数据集的信息，使您自己或您的数据集成员更清晰地了解数据集的内容。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWTyaCvpD-ZXZG73h2b%2Fimage.png?alt=media\&token=9ffd9a3e-1745-4d6e-96fd-0ad8b8af4647)

## 编辑数据集版权信息 <a href="#id-3" id="id-3"></a>

在数据集信息列表中，选择数据集版本许可部分，您可以：

* 修改版权归属方信息：在版权归属方下面的下拉框中，您可以搜索选择版权归属方。

{% hint style="info" %}
支持添加多个版权方，下拉框中将展示可选的版权方；如果某版权方已被选中，则不可重复选择。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWTylWKYdlf88wowS7w%2Fimage.png?alt=media\&token=b1471722-4fc8-408b-9340-f7aa68f4fe2d)

* 编辑和移除版权方：您也可以对已有版权所有方进行【编辑】和【移除】操作。

{% hint style="info" %}
对于团队用户，仅管理员有新增和编辑版权方的权限，普通成员只能选择已有的版权方。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWTz5oOgLAhOYRSaXxe%2Fimage.png?alt=media\&token=f53756b9-9e8e-4179-a989-67e7aa6f4002)

* 增加版权归属方：您也可以点击下拉框右侧【+】，增加新的版权所有方。其中，版权归属方名称、链接为必填项，头像、描述为选填项。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWTz9HhUJl981ylP29f%2Fimage.png?alt=media\&token=3e47e4cd-2ffd-4559-948a-cd33503611c7)

* 数据集版权信息编辑结束后，点击最下方【保存】对您的修改进行保存。


# 管理版本信息

在TensorBay中，您可以清晰简便地进行数据集版本管理。您可以在修改数据后Commit新数据集版本，查看历史版本数据，实现版本迭代可视化，回溯任意历史版本等操作。

## Commit数据集版本 <a href="#id-1" id="id-1"></a>

* 确认某个Draft的修改后，点击右上角的【Commit】进入Commit界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5sdLAwfB8aL7QEcXL%2F-Mi5svrLZU4WiIiHvHvC%2Ff14b8251748243f87ee378e028344c0.png?alt=media\&token=5f5d5d8b-4ccd-4aca-a7f8-16b6052247d1)

* 填写Commit信息和Tag后，点击【确认】完成新版本的发布。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5sdLAwfB8aL7QEcXL%2F-Mi5t-lkdFwA_TdtCBn-%2Fd1fbfeb67c0dbe0c1383f3bb45f2c9a.png?alt=media\&token=6abe5336-bbde-4fec-abbd-dea7ee7d34f6)

{% hint style="info" %}
Commit后，该版本的数据将不再接受修改；后续数据的修改将被保存在Draft草稿模式，修改后可Commit为下一版本。
{% endhint %}

## 查看历史版本数据 <a href="#id-2" id="id-2"></a>

* 在数据集详情页的版本中点击【查看所有Tags】可进入Commit记录。或点击版本列表右侧的【Tags】进入Commit记录页。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mb_sSvbeoPw5bvtLx2d%2F-Mb_tGXO98eJ0xhMiq7E%2Fimage.png?alt=media\&token=9bf3af83-3eee-4d8b-ba08-2fe631d7c9f1)

* 在Commits记录中，您可以查看所有的历史版本信息；点击版本右侧的<img src="https://lh3.googleusercontent.com/B0ctvu6PgpBfmorXMEnKzeV4f5blfPFAccH149fdSDO3r3rUO2rLDgQIB9_dscg9KvKCyGWNVb3B9qQBekvk02o58lP5XvkNyO7hl3XYPxdUsJbM1sLqrZGQupv3z86xQ4Ws6jgJ=s0" alt="" data-size="line">可以进入数据详情页看到该版本的详细数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi5uteNfkd87CYlIGxC%2F-Mi5yyAmgBEsnJzjdsQP%2F42e3b14e9b3ee6bb4057c7567ab5815.png?alt=media\&token=a5f4a912-1e5f-4f7a-b0cb-6b51bed3fcb4)

## 可视化版本迭代 <a href="#id-3" id="id-3"></a>

* 在Commits记录右上角选择可视化。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mi609M1huJbfLFQrq0y%2F-Mi648U4p2VTSv0eYJQE%2F85207561e34a0eec05c773981ca3357.png?alt=media\&token=0fdd802d-e859-4277-9154-cf2b457c0215)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiKoOfJTqwoqentDwVh%2F-MiKp48kbRr-YyA5olMn%2F2.png?alt=media\&token=28a29414-9fd9-4e0b-b08e-8e2ce08c6157)


# 管理数据集分支

“分支” = “Branch”

## 通过分支管理数据集 <a href="#id-1" id="id-1"></a>

* 在不影响原数据集和其他数据分支版本的情况下，分支管理功能可以让用户安全地在不同的原数据集分支版本上根据需求做改动，对数据集进行比较实验。
* 多个用户可以通过Branch同时编辑各自的数据集，了解Commit或Branch之间的关系以及每个版本的来源，不会干扰彼此的工作。

### 默认分支 <a href="#id-1-1" id="id-1-1"></a>

在TensorBay上创建数据集时，将自动创建默认分支（Default Branch）为第一个分支，该分支默认命名为“main“，支持默认分支重命名或切换默认分支。

### **查看分支** <a href="#id-1-2" id="id-1-2"></a>

* **方法1：**&#x521B;建branch成功后，将自动切换至该branch详情页。
* **方法2：**&#x8FDB;入任意版本的数据集详情页，点击左上角的下拉单，切换至目标Branch，查看其最新版本的数据详细信息，进行筛选或创建Draft完成数据集修改。

![切换至目标分支](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-Mbdfxqy1iVV4lCDCmpI%2Fimage.png?alt=media\&token=307aaf66-d083-4d9e-94d1-05bd366177c9)

### 创建分支 <a href="#id-1-3" id="id-1-3"></a>

* **基于原有分支/ Tags/ Commit 创建新分支**
  * 进入数据集详情页，点击左上角切换版本的下拉单，选择一个分支 / Tag 并切换；或点击【查看所有tag】进入Commit记录列表，点击右侧<img src="https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-Mbde-ujQxcocyPYDzsb%2Fimage.png?alt=media&amp;token=ad82f9c6-aa4a-4bb8-b2fa-f8ce05c7a695" alt="" data-size="line">图标切换。
  * 进入相应数据集详情页后，点击左上角切换版本的下拉单，在【查找或创建Branch】输入框中输入新分支名称，完成【创建】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-MbdhkPbFXSJy81uRnhM%2Fimage.png?alt=media\&token=693a1837-ad54-4222-bec1-d08698ebbca3)

### 删除 / 重命名分支 <a href="#id-1-4" id="id-1-4"></a>

* 进入branch列表详情页面。
* 对任意branch，点击右侧删除 / 重命名按钮，即可删除 / 重命名branch

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-MbdhvsOQCD56WHUyTy_%2Fimage.png?alt=media\&token=1c0c83c2-d4dc-444c-9504-8a2dbe2daf24)

{% hint style="info" %}
&#x20;default branch不能删除，但可以重命名。
{% endhint %}

### 切换分支 <a href="#id-1-5" id="id-1-5"></a>

进入branch列表详情页面之后，点击切换branch按钮，选择需要切换default branch的目标branch，即可切换。

![Branch 列表页](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-MbdhSDcrkV4BSrEhwnf%2Fimage.png?alt=media\&token=2d7fb924-aeea-43fe-9bb5-bb9e55d5c1a6)

![切换分支](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MbddnhwBTrsqS1CfZRo%2F-MbdhNIS8vQvgXtuCtmb%2Fimage.png?alt=media\&token=99dbdcab-a3d8-4c7d-a7f7-9871cd3412b2)


# 数据集活动

在TensorBay中，您可以在【活动】页面查看数据集的全部活动日志和引用记录。

## 活动日志

【活动日志】记录了该数据集的操作历史，包括：&#x20;

* 数据集操作：创建数据集、新建draft、提交draft、修改数据集名称等。&#x20;
* 操作权限操作：添加团队成员、更改成员操作权限等。&#x20;
* 数据集引用操作：fork数据集、筛选新建数据集等。

![](https://lh4.googleusercontent.com/r7zuN_IV7qNPcrqDTcXnE6AFkUm_nS4ZwBG1SyLQEdE46pycwkl2YsC8EI1rOLpkAU5aZfEqINOPKqCOe_RillM_En51mjQg4W6Y38IIkHtkSK3xEKJRs66dd5kDUEx_X0FM7gQ6)

## 引用记录

【引用记录】能够查看通过此数据集fork新建的数据集和筛选新建的数据集以及相关信息。

![](https://lh5.googleusercontent.com/qh_eaC13wHW3aJjei6W8rBBHjvcYwOVQTicu7_LSwjJwnitzYpeZDGP3FjoECGbdt_qIwU11vGnJ7Rg7WfadwCNJPb4dV8qlOmDZCtbb2UUB9udwZvULAGCUGWtaNmoTlCV_B6Un)

查看信息：可以点击【数据集名称】跳转数据集首页，点击【user name】跳转用户/团队首页。


# 数据集设置

在TensorBay中，你可以对您的数据集进行管理和设置，您可以修改数据集名称，对数据集成员及其权限进行管理，查看数据集的存储位置，或删除当前数据集。

{% hint style="info" %}
仅数据集的创建者或对数据集有管理权限的成员具有设置权限。
{% endhint %}

* 在数据集详情页，选择【设置】即可进入该数据集的设置界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcsA5a4peE0cNn8HM2%2Fimage.png?alt=media\&token=121233a7-02ac-4d9f-a738-19dba7382217)

## 修改数据集名称 <a href="#id-1" id="id-1"></a>

* 在左侧导航栏中的【基本设置】中，点击数据集名称右侧的<img src="https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWU0SUvxwdFBGTVGC5j%2Fimage.png?alt=media&amp;token=22842d35-d949-40c9-ba92-34ecc9f8c66c" alt="" data-size="line">编辑该数据集名称。注意：数据集名称的长度限制为80，仅支持英文、数字、空格、"-"和"\_"。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcsIRmupH1qU-tLNcO%2Fimage.png?alt=media\&token=6e954b42-e895-46bd-8e87-691ea182f4ec)

* 修改完成后，点击【确认修改】进行修改确认。请确保您所拥有的数据集的名称不重复。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcsU8EARTOMBZ6Ncxq%2Fimage.png?alt=media\&token=32ec07d1-694d-4534-8c78-adefff1bc1d6)

## 数据集可见性设置 <a href="#id-2" id="id-2"></a>

* 您可在创建数据集的时候设置该数据集的可见性，或在数据集设置中对可见性进行修改。
* 如果您需要将可见性调整为【公开】，则说明您同意任何的社区用户都可以搜索、查看、查询和Fork此公开数据集中的所有数据文件。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcsdznGm6ky5SD8Z_M%2Fimage.png?alt=media\&token=4d06d107-4345-40a2-83ec-67ca0924580a)

## 数据集成员及权限管理 <a href="#id-3" id="id-3"></a>

* 在【设置】页面的左侧导航栏选择【成员管理】，您可以在右侧查看该数据集的全部成员包括数据集的创建者、团队超级管理员和其他数据集成员。

{% hint style="info" %}
如果您是团队用户，团队管理员默认对于团队数据集有管理权限。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcsywBijanMeoHgeRv%2Fimage.png?alt=media\&token=52a5b8b8-2e99-41b1-9c63-6948ee7cb0e4)

* 添加成员：您可以点击【邀请成员】增加该数据集新成员。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWctCgHDjVg33OoLJ24%2Fimage.png?alt=media\&token=b78f133f-70db-478f-b796-3f2090f46b4a)

* 选择您需要添加的成员，选择完成后点击【发送邀请】完成添加。

{% hint style="info" %}
添加成员仅限于您团队中的成员。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcwEn4jd3GpglhRcJ4%2Fimage.png?alt=media\&token=3b5c31c5-8635-4b40-8e34-7e1ca6346ab8)

## 数据集存储位置 <a href="#id-4" id="id-4"></a>

* 如果您的数据集是通过【授权存储】方式创建的数据集，在左侧导航栏的【存储信息】中可查看该数据集数据的云存储位置。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWcrzG8NgdDjbki-8Tx%2F-MWcwVm1FXAd5g20H-0R%2Fimage.png?alt=media\&token=8a206fdc-ba2f-410c-9832-a38c58e88fe7)

* 如果您的数据集是通过【格物钛存储】创建的数据集，在左侧导航栏的【存储信息】中，您可查看到该数据集的格物钛存储信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWU3by0yr5bN4ANWyEZ%2Fimage.png?alt=media\&token=9920db4c-fc4a-4a6d-a86d-03d078c87c04)

## 删除数据集 <a href="#id-5" id="id-5"></a>

* 点击【删除数据集】即可删除该数据集。

{% hint style="danger" %}
该操作将删除数据集及其所有的版本，操作不可逆，删除后所有使用此数据集的任务将不可用，请谨慎操作。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWToHBAb7ZT1vFuTzNt%2F-MWU3mYY-D_stn_3mb2-%2Fimage.png?alt=media\&token=024f4e89-a20f-4b1a-9b63-18c421485293)


# Pharos 数据可视化

Pharos 提供丰富的可视化功能，对多种数据文件、标注类型的数据进行管理，快速筛选和迭代AI开发所需的高质量数据。

具体功能介绍如下：

## 查看数据和标注 <a href="#id-2" id="id-2"></a>

* 通过切换不同的可视化组件（右上角）对数据进行可视化查看。支持实时查看当前条件下筛选的数据及其标注信息（支持**多种标注类型同步**可视化）。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYxsdWKFnbD22m55YWh%2F-MYxwcZ4aA0fSuDb55RE%2Fimage.png?alt=media\&token=f9ffb5fc-4a0c-4f70-b17b-faef6a4e89ac)

## 查看数据的标签分布 <a href="#id-3" id="id-3"></a>

* 数据可视化组件支持实时可视化查看当前条件下筛选数据的标签分布统计信息，帮助用户直观的感受所筛选数据标签分布情况。数据标签分布可视化组件详情参照标签分布可视化组件。

## 可视化自定义数据集 <a href="#id-2" id="id-2"></a>

若需要可视化您的数据集，Pharos 提供以下两种可用的途径：

1. 将您的数据集上传至 TensorBay，具体步骤请参考上传数据。数据上传后，登陆账号后进入对应数据的详情页，找到数据概览，即可完成可视化。

{% content-ref url="/pages/-MWSbbiz429ASW3po9Q\_" %}
[数据集准备](/guide/tensorbay/data)
{% endcontent-ref %}

&#x20;   2\. 使用TensorBay SDK读取您的本地数据，再通过Pharos进行可视化，无需费时上传数据，即可查看本地数据


# 获取 Pharos

## 可视化公开数据集 <a href="#id-1" id="id-1"></a>

Pharos 支持对格物钛公开数据集社区中的部分数据集进行在线可视化，在需要可视化的公开数据集详情页的“概要”标签中，下滑找到数据概览，即可完成数据在线可视化。详情请见：

{% content-ref url="/pages/-MS1uI3N7CoJJpyf2ZvA" %}
[在线预览数据及标签分布](/guide/opendataset/visualization)
{% endcontent-ref %}

## 可视化自定义数据集 <a href="#id-2" id="id-2"></a>

若需要可视化您的数据集，Pharos 提供以下两种可用的途径：

1. 将您的数据集上传至TensorBay，具体步骤请参考上传数据。数据上传后，登陆账号后进入对应数据的详情页，找到数据概览，即可完成可视化。

{% content-ref url="/pages/-MWSbbiz429ASW3po9Q\_" %}
[数据集准备](/guide/tensorbay/data)
{% endcontent-ref %}

&#x20;   2.通过TensorBaySDK读取本地数据，立即使用Pharos进行可视化，无需登陆和上传即可使用数据可视化插件所有功能，把握数据质量，具体操作请查看[SDK帮助文档](https://tensorbay-python-sdk.graviti.com/en/latest/features/visualization.html)

{% hint style="info" %}
通过SDK使用Pharos仅支持对数据和标注进行可视化，如要查看标签分布的可视化，需将数据上传至TensorBay
{% endhint %}


# Pharos 使用指南

## Pharos 数据可视化插件 <a href="#id-1" id="id-1"></a>

**格物钛**数据可视化插件提供对多种数据类型和标注类型的可视化支持，帮助AI开发者快速、直观的掌握数据及其标注信息的内容和质量，减少鉴别数据的时间消耗。

* **支持的数据及标注类型**

| 数据类型 | 文件类型与格式             | 标注类型                      |
| ---- | ------------------- | ------------------------- |
| 图像类  | 图片（jpg、jpeg、png）    | 2D矩形框、2D多边形、2D折线、2D关键点、分类 |
|      | 点云（bin、pcd、ply、las） | 3D框、分类                    |
|      | 连续帧数据               | 2D框追踪、3D框追踪               |
|      | 视频（MP4）             | 分类                        |
| 语音类  | 音频（mp3、wav、flac）    | 转录、分类                     |
| 文本类  | 文本（txt）             | 分类                        |

### 图像类数据可视化 <a href="#id-1-1" id="id-1-1"></a>

* **选择文件**

支持包含多传感器数据和连续数据在内的多种图像类数据可视化，左上角选择需要查看标注类型和文件名。如果是多传感器数据，则选择需要查看的帧（frame）。右侧为**主视图**，会将选中的数据与对应的标注类型内容可视化显示。

* **选择标注**

左侧为**标注列表**，支持**同时查看多种标注类型**。

有按标注（Annotation）和按类别（Category）查看两种模式，按标注可查看单个标注框的信息，按类别可查看各类别下所有标注框的统计信息。选中一条标注信息后，可展开显示此标注对应的属性信息，对应标注会在主视图中高亮显示

* **切换模式、全屏**

右下角的操作区按钮从左到右分别是切换深浅色模式和全屏。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYy1WGwzSG3FNCKegf9%2F-MYy2N6_JZshHDn94H64%2Fimage.png?alt=media\&token=48286a31-242a-49fe-8aba-07e9d43d7ab7)

{% hint style="info" %}
当数据无标注信息时，列表显示“No Annotation”表示此数据已标注，但无可标注的对象；若列表显示“Not Labeled”表示此数据未经标注。
{% endhint %}

* **选择传感器（融合数据可视化）**

在可视化多传感器数据时，可在主视图左下角选择需要查看的目标传感器数据；在可视化同时包含点云文件和图片文件的多传感器数据时，会将图片文件放入小窗口显示，点击小窗口即可将其显示内容与主视窗显示内容调换。

* **播放/ 暂停（连续数据可视化）**

对于连续数据，包含连续帧数据和视频数据的可视化，主视窗左下角的操作区可进行播放/暂停，上一帧/下一帧操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYy1WGwzSG3FNCKegf9%2F-MYy4eKOApAQgrRTk9--%2Fimage.png?alt=media\&token=218cd02e-9a33-4f8d-a790-fc2037a3bb79)

### &#x20;<a href="#id-1-2" id="id-1-2"></a>

### 语音类数据可视化 <a href="#id-1-2" id="id-1-2"></a>

支持音频文件及其标注的可视化。先在左上角选择需要查看的数据，标注信息会展示在右侧主视窗中。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2BT74-cSRwbp-41_%2Fimage.png?alt=media\&token=7d94d5fc-db32-4af2-918b-faa0140dcf60)

* 左下角的操作区可操作播放/暂停、上一个文件/下一个文件以及播放倍速和音量。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2FJ9Nfw6pow1GFx1%2Fimage.png?alt=media\&token=7d1bf8fa-cad0-490a-a32b-c17b81664c5e)

### &#x20;<a href="#id-1-3" id="id-1-3"></a>

### 文本类数据可视化 <a href="#id-1-3" id="id-1-3"></a>

文本类数据可视化模式功能与图像类相似，用户可在左上角选择需要查看的数据；在左侧标注列表展示标注信息，右侧主视图展示原数据信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2Il9ViIw4hA_rCoI%2Fimage.png?alt=media\&token=89d081ce-0853-4fea-9815-9260a50ae556)

## Pharos 标签分布可视化插件 <a href="#id-2" id="id-2"></a>

支持图像类数据集的**标签数据与属性数据的统计信息**可视化，便于快速掌握数据集种标签和属性信息的分布情况。

### 查看标注标签种类的分布情况 <a href="#id-2-1" id="id-2-1"></a>

您可在左上角选择需要查看的标注类型。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2NfIp6WkZTPFwcp8%2Fimage.png?alt=media\&token=c52c229a-7a50-4774-8eea-eb33897c023e)

* 在左侧操作区域选中标签查看模式（Category）。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2Ray-8Uei0Bwutpp%2Fimage.png?alt=media\&token=a4a99375-5dfb-41db-95dc-8368c4d6fca2)

* 右侧主视窗即会展示当前数据集在此标注类型下的所有标签统计信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2VYOezTHCX6hAAU7%2Fimage.png?alt=media\&token=6ffe0145-788e-4164-b71b-d30d8b4ba04c)

### 查看属性信息的分布情况 <a href="#id-2-2" id="id-2-2"></a>

在左侧操作区域选中标签查看模式右侧主视窗，切换至【属性信息】查看模式。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2avLvI5pzSgLgymK%2Fimage.png?alt=media\&token=df8c05d9-a1c2-42d9-bfcf-935ed7f3f738)

* 在右侧列表选择需要查看的数据层级，“ALL“ 表示查看所有数据；在右上角的下拉框中选择需要查看的属性类别，主视窗展示此属性类别下所有的属性值的分布数据。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2exGUJQyCRnpOeW9%2Fimage.png?alt=media\&token=34a16e1a-6608-4a08-82c7-cf3b1f3ee840)

### 切换查看模式 <a href="#id-2-3" id="id-2-3"></a>

支持列表、条形图和饼图3种查看模式，点击左侧操作区的【模式切换按键】，即可切换不同的展示模式。

* **列表模式**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2hyFKO5KRpavmlwi%2Fimage.png?alt=media\&token=a18975cc-6ef1-48e7-af2e-91c691e224df)

* **条形图模式**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2l-ePCcsB6CRjm5Q%2Fimage.png?alt=media\&token=f8f3570e-8bd3-4537-81c0-710301d3a7c4)

* **饼图模式**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd02noOvojQHmIArH7%2F-MWd2oq40MZTLg91j7lS%2Fimage.png?alt=media\&token=dea9f5f7-7ffd-4349-b707-791c44017fbf)

{% hint style="info" %}
当数据标签类型过多时，标签分布可视化插件将不支持饼图展示模式
{% endhint %}


# 团队协作

TensorBay支持团队协同数据管理，通过团队成员角色、数据集权限的灵活设置，安全的同步与分享数据，避免数据的反复复制与迁移，高效协作加速算法开发。

开发者用户可免费创建团队，即刻拥有团队社区版100GB的免费数据托管容量及团队权益，权益详情请查看 [产品定价](https://www.graviti.com/price)。

{% content-ref url="/pages/-MWU9NDPoGxjbX8fN1vH" %}
[创建团队空间](/guide/tensorbay/collaboration/create)
{% endcontent-ref %}

{% content-ref url="/pages/-MWUAA1fBV9ISayqDQ9M" %}
[资料/成员管理](/guide/tensorbay/collaboration/manage)
{% endcontent-ref %}


# 创建团队空间

## 新建团队信息 <a href="#id-1" id="id-1"></a>

* 登录GAS首页，在导航模块【团队协同】中点击【新建团队】，或顶部导航栏中点击空间下拉列表中选择【新建团队】，进入团队创建流程。
* 点击【新建团队】进入团队创建页面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhDDhDq3yNLdp-1obFP%2F-MhDF96-ZZZn_cQtBVxm%2FWX20210816-171702%402x.png?alt=media\&token=5444ce40-66b1-472a-9533-c19ae785dfb5)

* 填写团队信息：依次填写团队名称、团队空间名称，联系邮箱及团队简介，并确认《**用户协议**》和《**个人信息隐私政策**》。

{% hint style="info" %}
团队空间名称一经创建后暂不支持修改，填写时请确认。
{% endhint %}

* 点击【下一步】完成团队创建去邀请成员加入。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd363F-ib72GNk3K8B%2F-MWd3oEui3-qCaL9GIjW%2Fimage.png?alt=media\&token=24dcebb1-cec2-457a-a9fe-994e52916ca1)

## 邀请成员加入 <a href="#id-2" id="id-2"></a>

* 提交团队信息后，进入邀请成员界面，可通过添加**手机号**以邀请成员加入，邀请时可选择每一位成员的权限（管理员/ 普通成员）。
* 填写完成员信息并确定成员身份后，点击【邀请成员】，系统会发送邀请链接至手机，受邀成员需要在**24小时**内完成注册并接受邀请，如果超过时限则需要重新邀请。
* 也可以跳过这一步，之后在团队空间 -【设置】-【成员管理】中添加新成员。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd3rP2ZJ73nsbmbyt5%2F-MWd45ILyo8M8uFypyjO%2Fimage.png?alt=media\&token=8a90b933-9b8e-46d9-8c79-507682d9bd3b)

## 进入团队空间 <a href="#id-3" id="id-3"></a>

* 完成团队创建后，自动进入该团队的工作空间。
* 在GAS主页右上角，下拉选择进行空间切换。

{% hint style="info" %}
不同工作空间的数据、成员和权限互相独立。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhDDhDq3yNLdp-1obFP%2F-MhDGAMMYCWU8-gXChE6%2FWechatIMG48.png?alt=media\&token=cc24812c-e362-41d4-aab1-51be2560f555)


# 资料/成员管理

## 进入团队管理 <a href="#id-1" id="id-1"></a>

在GAS首页右上角选择团队名称右侧【团队管理】图标，进入团队管理界面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhDDhDq3yNLdp-1obFP%2F-MhDGcwINi38gCUPyRUb%2FWechatIMG50.png?alt=media\&token=1616639d-932f-4c63-97c3-1364665b9885)

## 团队资料管理 <a href="#id-2" id="id-2"></a>

团队资料更新**仅限该团队的超级管理员和管理员操作**。

可变更的信息为：

* **团队名称：**&#x56E2;队名称不能为空且不能重复。
* **空间URL：**&#x5982;处于未设置的状态，可进行设置，**空间URL仅可被修改一次**。
* **团队简介：**&#x5B57;数不超过400字。
* **联系邮箱：**&#x8054;系邮箱将在团队主页展示，便于社区用户联系，同时也将用于接收系统的重要消息，请务必确保所填写邮箱的准确性。
* **所在地区**

&#x20;以上信息变更完成后，选择【更新团队资料】完成更新。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe01kIiZby7RrkpGTe%2Fimage.png?alt=media\&token=a54948a3-9e56-4d3d-bea1-c380f21cff0d)

完成信息变更后，点击左上角【团队主页】，回到团队主页检查和确认团队资料变更的展示效果。团队主页用于对团队成员、社区用户展示您的团队信息。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe0Ec55XcQJOLfO3Cj%2Fimage.png?alt=media\&token=2cf9cc4c-ca84-4ec3-b5a9-43716b1ed9c2)

## 团队成员管理 <a href="#id-3" id="id-3"></a>

### 成员角色 <a href="#id-3-1" id="id-3-1"></a>

* **超级管理员：**&#x56E2;队创建者默认为该团队的超级管理员，拥有团队权限中的所有权限。每个团队的超级管理员有且只有1个，超级管理员身份只能转让，不能修改角色或离开团队。
* **管理员：**&#x9664;不能任命、修改管理员外，团队管理权限与超级管理员一致。
* **普通成员：**&#x53EF;通过超管或管理员的邀请加入团队，可自行退出团队。

### 成员列表 <a href="#id-3-2" id="id-3-2"></a>

在【团队成员】列表中，可查看已加入该团队的成员数量、成员信息、成员加入时间以及该成员的角色权限（如超级管理员、管理员或普通成员），具体操作权限和设置规则可点击右上角【角色权限说明】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe0cRqGD22t3fC2p9z%2Fimage.png?alt=media\&token=6c4c7c60-e040-40f5-8c8c-1e57e511964a)

### 添加成员 <a href="#id-3-3" id="id-3-3"></a>

**仅限超级管理员和管理员操作**。点击【邀请成员】进入成员邀请界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe0ltGr8TXUsGtheFr%2Fimage.png?alt=media\&token=606033c3-ec04-443b-a82a-e1d63dffd3b5)

通过添加**手机号**邀请团队成员加入，同时对邀请成员的团队身份进行设置。其中，超级管理员可选择管理员或者普通成员，管理员仅可选择普通成员。

点击【邀请】后，系统会发送短信至被邀请人手机。如果一个手机号被重复添加，系统默认只发送一次信息。受邀成员需要在24小时内完成注册并接受邀请，如果超过时限则需要重新邀请。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe1EIjN2ITFiGQDQQF%2Fimage.png?alt=media\&token=1ae33cd0-62ed-4282-b6e5-cc3723555d08)

### 移除成员 <a href="#id-3-4" id="id-3-4"></a>

**仅限超级管理员和管理员操作。**&#x70B9;击某位团队内成员的身份设置，下拉选择【移除成员】即可将该成员从团队中移除。其中，超级管理员可以移除管理员和普通成员，管理员仅可移除普通成员。移除成员后，该成员将无法查看和使用团队内的任何数据，请谨慎操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe1ha6KptUE6NrVWhq%2Fimage.png?alt=media\&token=350ae005-b468-475b-8cdc-eba24acf039f)

### 修改团队成员角色 <a href="#id-3-5" id="id-3-5"></a>

**仅限超级管理员操作。**&#x70B9;击某位团队内成员的身份设置，在下拉框中选择转换的身份。选择【设为管理员】或【设为普通成员】对团队成员的身份进行变更。

选择【设为超级管理员】则将**转让超管身份**，设置后原超管降为普通成员，请谨慎操作；如果超级管理员需要注销账号，必须先将超管权限转让给该团队内其他成员才能进行注销操作。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe1oFqjw_YTh7A655b%2Fimage.png?alt=media\&token=1f8602c2-fa1b-4ac1-ac20-01ea28e37405)

### 退出团队 <a href="#id-3-6" id="id-3-6"></a>

**仅限管理员和普通成员操作，超级管理员不允许退出团队。**

在顶部导航栏中选择【个人空间】进入开发者账号管理界面，点击【我的团队】可查看当前已加入的团队列表。选择想要退出的团队并点击【退出】，即可退出该团队。

{% hint style="danger" %}
退出团队后，将无法查看和使用团队数据。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWd4MVJ3NWLL2miBZbW%2F-MWe2JRjl5Rmzj-X5ajd%2Fimage.png?alt=media\&token=08d2ad09-772c-4201-9e54-4a0cb4b4a78b)


# 数据集管理

## 创建团队数据集 <a href="#id-1" id="id-1"></a>

* 团队内所有成员可以在团队空间创建数据集。
* 数据集的创建者为【所有者】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhDDhDq3yNLdp-1obFP%2F-MhDGo5y5QBSkrSwsYbD%2FWX20210816-172444%402x.png?alt=media\&token=5898812f-977d-4af1-9b5a-3ed7b5551024)

![团队数据集 - 创建数据集](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYxIeaQgQd9gskVGYfF%2F-MYxQHQeIqZFWei76uca%2F2.png?alt=media\&token=482a3aef-e3f8-40ce-a08e-03a086d8d5dd)

## 数据集成员管理 <a href="#id-2" id="id-2"></a>

* **公开数据集**将对所有平台用户公开，不占用团队存储空间；
* **私有数据集**需要邀请团队内成员加入，成为团队数据集协作者后，根据不同的权限（可查看/ 可使用/ 可修改/ 可管理）协作者可以对数据集进行不同级别的操作。
* 超级管理员默认对团队内所有数据集拥有“可管理“权限。

### 数据集权限说明 <a href="#id-2-1" id="id-2-1"></a>

* **可预览**

团队成员对团队内所有数据集的**默认权限。**&#x53EF;查看团队私有数据集的详情页、预览数据，无法查看数据列表和版本记录。

* **可查看**

在【可预览】的基础上，允许可查看团队私有数据集的详情页、数据列表和版本记录。

* **可使用**

在【可查看】的基础上，允许对团队私有数据集进行筛选新建数据集、合并新建数据集、创建标注任务、开发者工具读取等操作（需要配合AccessKey使用）。

* **可编辑**

在【可使用】的基础上，允许查看draft数据（未commit），编辑数据集信息、上传数据并commit新版本、删除数据等涉及数据修改的操作。并允许对数据进行修改tag、切换版本、删除版本等版本管理操作。

* **可管理**

在【可编辑】的基础上，允许修改数据集名称、删除数据集、设置数据集可见性（公开/ 私有）、配置授权信息。另外还能进行数据集成员的管理，如：添加成员、设置成员权限、移除成员等。

* **所有者**

在【可管理】的基础上，拥有数据集成员申请的审批权限。

### 邀请数据集成员 <a href="#id-2-2" id="id-2-2"></a>

* 右上角下拉空间列表，选择需要进入的团队空间。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MhDDhDq3yNLdp-1obFP%2F-MhDH1ibd424qNMUB29d%2FWX20210816-172539%402x.png?alt=media\&token=467876fe-b211-4a51-a036-61d55f9d21c3)

* 进入团队空间后，进入【成员管理】模块。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYwiIctrQd5SWcJFYMg%2F-MYwo6FazDTD62GB_EiR%2Fimage.png?alt=media\&token=cf690516-e6d8-4c81-8427-c2ebb2f3bf4d)

* 邀请成员，同时设定成员的数据集权限。
  * 下拉团队成员列表，添加已加入团队的用户到数据集。
  * 填写成员邮箱，回车确认。邀请您团队内（未加入TensorBay团队协作）的用户注册、加入团队。
  * 复制链接，转发至需要加入数据集的团队成员。已登陆用户点击链接即可加入团队数据集。未注册/未登陆用户点击链接，完成注册/登陆后即可加入团队。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYwiIctrQd5SWcJFYMg%2F-MYwpSydJCMTka3DV2A1%2Fimage.png?alt=media\&token=edfc21d3-d4ae-4d68-b4aa-b7d44236baad)

{% hint style="info" %}
【可管理、所有者】以外权限的成员邀请新用户加入数据集，需要通过**数据集所有者**的审批，审批通过即可加入数据集；
{% endhint %}

* 任何成员邀请**非团队成员（暂未加入TensorBay团队空间）用户加入数据集**，受邀者需要按提示提交权限申请，经过团队**超级管理员**审批（在消息中心查看申请并审批），通过后同时加入团队和数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYxFVYpWHcNvWJpEPc2%2F-MYxHKoxb6IWTnx23Ghh%2Fimage.png?alt=media\&token=f9ff2b25-dc5f-48ca-b8ff-5117502a4894)

### 更改成员权限/ 移除成员 <a href="#id-2-3" id="id-2-3"></a>

* 进入数据集详情页 -【设置】-【成员管理】模块。
* 找到需要移除的成员，点击右侧的权限按钮，更改权限或移除。

{% hint style="info" %}
只有【可管理】、【所有者】能进行权限更改/ 移除成员的操作。
{% endhint %}

![ ](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYxFVYpWHcNvWJpEPc2%2F-MYxFvljBZI5gK7c-LN9%2Fimage.png?alt=media\&token=0f1acba3-b467-4d0a-b9cb-9212543b0964)

### 删除数据集 <a href="#id-2-4" id="id-2-4"></a>

* 进入数据集详情页的【设置】-【基本设置】-【谨慎操作】模块。
* 选择【删除数据集】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYwiIctrQd5SWcJFYMg%2F-MYwrMI8IgSU-Y9Hid7P%2Fimage.png?alt=media\&token=f6e54901-c1e7-45f4-a432-e68834b50e50)

{% hint style="danger" %}
只有【可管理】和【所有者】有删除数据集的权限。删除操作不可逆，删除后将导致使用此数据集的任务将不可用
{% endhint %}


# 团队活动日志

## 活动日志是什么？ <a href="#id-1" id="id-1"></a>

团队活动日志包括团队管理日志和数据集管理日志，记录团队协作管理数据过程中的活动历史，随操作实时生成，团队内部公开透明，方便清晰溯源。

* **团队管理日志：**&#x5305;括成员加入、成员权限变更等团队管理活动记录。
* **数据活动日志：**&#x5305;括团队空间数据集创建、数据集可见性变更、commit记录、数据集成员加入以及成员权限变更等团队数据相关的活动记录。

## 活动日志查看 <a href="#id-2" id="id-2"></a>

### GAS团队空间主页 <a href="#id-2-1" id="id-2-1"></a>

切换到团队空间后，下拉页面，即可查看团队管理活动日志 和 **所有团队数据集**的活动日志。

![ ](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYwevSVQydW-l-YI1D3%2F-MYwga4k3vhBQ030q_hY%2Fimage.png?alt=media\&token=10a0f069-d75f-4455-87ad-184e7b3c977b)

### 团队数据集主页 <a href="#id-2-2" id="id-2-2"></a>

进入团队数据集详情页，在【活动】模块可以查看**该数据集相关**的管理活动日志。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYwevSVQydW-l-YI1D3%2F-MYwh3N9RZM7l-WjiBfM%2Fimage.png?alt=media\&token=4eb072d6-cfda-498f-a5cb-dc2b97af7e5d)


# Action 流程自动化

通过Action，您可以高效便捷地自动化搭建数据使用流程

**入口界面**

在您&#x7684;**【**&#x6570;据集详情页面】点击【自动化】进入【Action自动化页面】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fy7bWgKCt3VPuSAMxIPai%2Fworkflow.png?alt=media\&token=1284ea7c-4a91-43a5-9c32-a9703f49b849)

{% content-ref url="/pages/-MhCaUKSYxusElombWu5" %}
[新建工作流](/guide/tensorbay/action/xin-jian-gong-zuo-liu)
{% endcontent-ref %}

{% content-ref url="/pages/-MhCcqaD\_wpYchBc6AS9" %}
[运行工作流](/guide/tensorbay/action/yun-hang-gong-zuo-liu)
{% endcontent-ref %}

{% content-ref url="/pages/-MhCdSj6fuF1tFXmft\_Z" %}
[管理工作流](/guide/tensorbay/action/guan-li-gong-zuo-liu)
{% endcontent-ref %}

{% content-ref url="/pages/av3KPx5mCnIAd4Kbvj56" %}
[自动化配置](/guide/tensorbay/action/secret)
{% endcontent-ref %}


# 新建工作流

## 1  创建工作流名称

{% hint style="info" %}
注：名称只能包含**小写英文字母**，**数字以及减号“-”** ，名称**不得少于2个字符**且**首位不能为减号**。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FTuEBLx1EzO9Ww3nnzC5K%2Fcreate_workflow.png?alt=media\&token=c6dc6cea-5e26-49af-bac8-bded1bef4662)

## 2  **设置工作流条件**

### **2-1  设置运行参数**

在【Parameters】栏，点击【添加】,进行参数设置

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FLeDrqXMgaG1vPImUEB3H%2Fworkflow_parameter.png?alt=media\&token=2e30f747-ee0f-49b3-80b0-766307d24abc)

在【Name】栏填写**参数名称**（注意：名称只能包含英文字母，数字以及下划线“\_”，名称不得少于2位字符且首位不能为数字）**，**&#x5728;【Type】栏填写相应的**数据类型**并在【Default】栏填写相应**默认值**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FLeDrqXMgaG1vPImUEB3H%2Fworkflow_parameter.png?alt=media\&token=2e30f747-ee0f-49b3-80b0-766307d24abc)

### **2-2  设置环境参数**

在【Environment】栏，点击【添加】,分别&#x5728;**【Key】**（注意：Key名称只能包含英文字母，数字以及下划线“\_”，名称不得少于2位字符且首位不能为数字）&#x548C;**【Value】**&#x680F;输入相应参数。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYqaRW3GCQV8WPkDyLVPN%2Foutcome2.png?alt=media\&token=9b6a1f26-5138-4444-9419-2566984ee6a6)

### **2-3  设置实例参数**

在【Instances】栏，分别选择【实例配置】与【实例个数】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F9oiPAS19h5I2Qr4ZGEoj%2Fworkflow_instance.png?alt=media\&token=38fd4efc-a30c-4443-99df-a8c2c16c060e)

## **3. 输入YAML文件**

在【YAML File】部分，输入您已写好的YAML代码

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FMQdLZ42isPRfGIiuW2qD%2Fworkflow_yaml.png?alt=media\&token=a8f8da2c-2576-4f8d-ab60-82166865e279)

{% content-ref url="/pages/-MgyqAlKRRJaxL4yE2yb" %}
[YAML语法说明](/guide/tensorbay/action/action-syntax)
{% endcontent-ref %}

## **4  发布工作流**

全部设置完毕之后，您可点击【发布】来创建或更新工作流，也可点击【取消编辑】来退回自动化详情界面，但所做修改将不会保存

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FAG7QnE718uDogheNbgFN%2Fworkflow_public.png?alt=media\&token=2403f4a2-de19-4e0b-85ed-709beb0e06e4)


# 运行工作流

## **1 运行工作流**

在【自动化详情页面】，点击选定工作流，进&#x5165;**\[**&#x5DE5;作流管理页面】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FpobONVNo2wahcMmurWqA%2Fworkflow_run.png?alt=media\&token=a7a3ea06-4739-488a-a79c-0ea9200971f9)

在【工作流管理页面】，点击【管理工作流】，并点击【运行工作流】，进入【参数设置界面】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F0ZGurFkvqVToZVtmcFsM%2Fworkflow_run_para.png?alt=media\&token=64443b9b-d896-4986-a815-99084cd6556e)

在【参数设置页面】输入相应**参数**和**实例个数**，并点击【运行】，开启工作流的运行工作

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F2P1GOI30DtmYQwexU8v7%2Fworkflow_run_para.png?alt=media\&token=5c1acd63-1ccd-41bb-a3fb-92d8aeb814ff)

## **2 查看运行参数**

在【工作流详情页】，您可以看到之前的所有运行记录，并通过**状态**和**排序**两个按钮对运行记录进行筛选和排序

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FravkU4XizHLRZS3UeVEl%2F%E8%BF%90%E8%A1%8C-%E6%8E%92%E5%BA%8F.jpg?alt=media\&token=a4201185-d558-43c0-9421-1ba0adc942dd)

点击最新选定运行记录，进入该次运行的【运行详情页面】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FxXIXYCsQvNmZGuI8SJIA%2F%E8%BF%90%E8%A1%8C-%E6%9F%A5%E7%9C%8B%E8%BF%90%E8%A1%8C%E5%8F%82%E6%95%B0.jpg?alt=media\&token=dac058f3-5227-4805-bd73-1753cda17d39)

在【运行详情页面】，您可查看**运行时长**、**有效时长**，**运行状态**等记录，也可点击【日志】查看详细运行代码记录。点击【运行参数】，进入【运行参数详情页面】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F1FZrY2pVxbYkaWKpI6y4%2F%E8%BF%90%E8%A1%8C-%E5%8F%82%E6%95%B0%E6%8C%89%E9%92%AE.jpg?alt=media\&token=774a5652-f59a-4ffb-a1ae-a6e5573d6f2a)

&#x5728;**【**&#x53C2;数详情页面】，你可以查看该次运行的**参数配置**、**YAML文件**等详情，点击【编辑】，可修改并更新整个工作流的最新参数。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FAfcR4a191sLhg1UyrnWf%2F%E8%BF%90%E8%A1%8C-%E7%BC%96%E8%BE%91.jpg?alt=media\&token=4d6642bc-ab5b-46b0-9614-071f36ce4daf)


# 管理工作流

## **1  编辑工作流**

&#x5728;**【**&#x5DE5;作流详情页】，点击**工作流名称**，进入【工作流参数查看页】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fy7bWgKCt3VPuSAMxIPai%2Fworkflow.png?alt=media\&token=1284ea7c-4a91-43a5-9c32-a9703f49b849)

&#x5728;**【**&#x5DE5;作流查看页】，点击**编辑**按钮，进入编辑状态

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FNpwdc1GUpDTrxHY2n5nV%2F%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%AF%A6%E6%83%85.jpg?alt=media\&token=e8f082f3-4a8e-432b-b834-47081ba790cc)

在【工作流编辑页】，依次对**工作流名称**，**运行参数**，**环境参数**，**实例参数**和**YAML文件**进行修改

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYM45ZLF8ceLduPnr95nx%2F%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%AF%A6%E6%83%85-%E7%BC%96%E8%BE%91%E5%8F%82%E6%95%B0.jpg?alt=media\&token=853c9196-89ed-4804-8de8-eda86e5b0f78)

修改完毕便可点击**发布**将修改更新至工作流，若点击**取消编辑**，则将返回至【自动化页面】，且作所修改不会保存

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYM45ZLF8ceLduPnr95nx%2F%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%AF%A6%E6%83%85-%E7%BC%96%E8%BE%91%E5%8F%82%E6%95%B0.jpg?alt=media\&token=853c9196-89ed-4804-8de8-eda86e5b0f78)

## **2  禁用工作流**

&#x5728;**【**&#x5DE5;作流管理页面】，选择**管理工作流**并点击**禁用工作流**，该工作流便处于禁用状态

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYPsfloV8UHrf8b6J8ESU%2F%E5%B7%A5%E4%BD%9C%E6%B5%81-%E7%A6%81%E7%94%A8.jpg?alt=media\&token=a9f5b22d-ba3d-4758-9c5d-a5209d16f113)

若想解除禁用状态，可以回到**管理工作流**按钮，点击**开启工作流**，该工作流便可重新运行

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fbi7spSHfxPve0FdgR9rD%2F%E5%B7%A5%E4%BD%9C%E6%B5%81-%E5%BC%80%E5%90%AF.jpg?alt=media\&token=d604977f-b8e9-49e5-85ae-44d862410038)


# YAML语法说明

## **相关概念**

**Job**是Action工作流的基本组成单位，通过定义多个job，并且设置job的依赖关系，可以生成一个[**DAG**](https://en.wikipedia.org/wiki/Directed_acyclic_graph)，TensorBay Workflow Engine通过执行这个DAG来实现任务的自动化。通过以下YAML文件为例：

```
tasks:
  hello-world:
    container:
      image: alpine:latest
      command: [echo]
      args: ["hello world!"]
```

1. 【tasks】: 定义该workflow下所有的job
2. 【tasks.hello-world】: 定义了一个task，task的名字叫做"hello-world"
3. 【tasks.hello-world.container】: 这个job执行环境是docker container
4. 【tasks.hello-world.container.image】: docker container使用的image是alpine:latest
5. 【tasks.hello-world.container.command】: docker container里执行的命令是echo
6. 【tasks.hello-world.container.args】: echo的参数是"hello world"

## **1  Job的运行环境**

job支持以下3种运行环境，每个job有且仅有一个运行环境：

**1.Container：**&#x5728;docker container里执行任意命令，使用指定的image，生成一个container并执行，任务内容由image定义。

```
tasks:
  hello-world:
    container:
      image: alpine:latest
      command: [echo]
      args: ["hello world!"]
      env:
        - name: GAS-URL
          value: https://gas.graviti.cn
```

**2.Script：**&#x5728;docker container里执行指定的脚本

```
tasks:
  hello-script-task:
    script:
      image: python:alpine3.8
      command: [python]
      source: |
        import logging
        import os
        import sys
        import time
        logging.basicConfig(level=logging.INFO)
        logging.info('environment was:')
        for key, value in os.environ.items():
            logging.info(f'\t{key} = {value}')
        args = sys.argv
        count = 20
        if len(args) > 1:
            count = int(args[1])
        logging.info(f'count was {count}')
        idx = 0
        while idx < count:
            logging.info(f'loop at index {idx}.')
            idx += 1
            time.sleep(1)
        logging.info('complete')
```

**3.Git：**&#x5728;docker container内执行一个git repo的代码

```
tasks:
  hello:
    git:
      image: python:3.9.5-buster
      command: ["python3"]
      args: ["main.py"]
      repo: https://github.com/username/repository.git@reversion
```

## **2  Job的依赖关系**

**Dependencies：**&#x6A;ob可以通过dependencies关键字来定义他们的依赖关系

```
tasks:
  taskA:
    container:
      image: johngraviti/count_down:v0.1
      command: [python]
      args: [/root/main.py, 40]
  taskB:
    dependencies:
      - taskA
    container:
      image: johngraviti/count_down:v0.1
      command: [python]
      args: [/root/main.py, 60]
  taskC:
    dependencies:
      - taskA
    container:
      image: johngraviti/count_down:v0.1
      command: [python]
      args: [/root/main.py, 120]
  taskD:
    dependencies:
      - taskB
      - taskC
    container:
      image: johngraviti/count_down:v0.1
      command: [python]
      args: [/root/main.py, 70]
```

**执行效果：**&#x83F1;形DAG图，taskA先执行，然后taskB和taskC并发执行，taskD等到taskB和taskC都结束才开始运行

![](https://lh4.googleusercontent.com/3KTGAgiHlwu254Si1CwWddPwQ5dT8bWMvXGp4k32hZ_th7wqhE0-vwdmylSHA7in3zWOHlFyQXG78M0hHv9DUrSRk-oY3PV5sKxuLUaNbWhdSEimvExwRS6KCRi0zTNmyaXqQWS7)

## **3  Job的参数设置**

### **3-1  参数的属性**

**Name:** 参数名称，用来在workflow代码中引用该参数

**Type:** 参数类型，指定该参数的数据类型，支持三种简单类型

* string: 字符串
* number: 数字，包括整型，浮点型
* boolean：布尔值，true/false

**Default:** 参数的默认值，启动workflow时，如果没有显式指定，则会取这里预定义的默认值

### **3-2  参数的定义**

支持通过TensorBay控制台设置及查看详细参数

![](https://lh5.googleusercontent.com/V6KvIY9eHZMM4AkBFbrF6V-EvWFxNXl7lYvUyvQspvNBQhGnJHLsIJ54KF4wkyVmffYgj23n41jZLivdZIKEI7Vunt3SBpTr3gIIBAXhr3fwpXJjuWGuDsDxo7C98pkUhx5xdlMd)

### **3-3  参数的设定**

**手动式：**&#x5982;果workflow启动方式为手动式，那么value可以通过TensorBay控制台动态设置

**自动式：**&#x5982;果workflow启动方式为自动式，那么value取默认值

![](https://lh6.googleusercontent.com/kq226beTUPI_YCKew-m26Cz3JaNek7Rg1VxZKSV6wAoIW8ak1sMZsikbcgsPl98rotgTK6C6Y_5XgfuUHatj08Jj31h__RTISL3BVXa9s0akFCV4M0e2OI0yukn1mCfNHg4x_JwY)

### **3-4  参数的引用方式**

在workflow中通过参数**name**使用参数

```
tasks:
  hello-world:
    container:
      image: alpine:latest
      command: [echo]
      args: ["{{workflow.parameters.foo}}" "{{workflow.parameters.bar}}"]
```

1. 引用的参数要&#x7528;**{{}}**&#x5305;围
2. 参数的前缀必须是**workflow\.parameters**.
3. 参数的名称必须跟**预定义**的一致

## **4  Job的环境设置**

**Environment**定义了**container**的环境变量，环境变量的引用方式跟普通的**docker container**环境变量一致


# Crontab语法说明

Action自动化工作流支持通过crontab创建定时工作流

Crontab是用来定期执行程序的命令，您可以通过**设定时间参数**从而在固定时间、日期、间隔下，运行定期任务。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FQi0JDBWKUTuTtCZnLHM5%2Fimage.png?alt=media\&token=8e0a7179-9f43-4c6c-b4a6-44b52293dc1f)

在crontab中，共有五个字段，每个参数字段代表一项时间设置（分钟，小时，日，月，周），五个字段共同表示一组时间，作为执行自动化工作流的时间表。当参数设定完成之后，便会按照您设置的时间表自动运行您的工作流。

```
# Crontab格式如下：
    *    *    *    *    *
    -    -    -    -    -
    |    |    |    |    |
    |    |    |    |    +----- 一周中的第几天 (0 - 7) (Sunday=0 or 7) 
    |    |    |    +---------- 月份 (1 - 12)
    |    |    +--------------- 一个月中的第几日 (1 - 31)
    |    +-------------------- 小时 (0 - 23)
    +------------------------- 分钟 (0 - 59)
    
# 例子：
    0 0 1 * *       # 每个月的1号
    10 6 * * 1-5    # 每周一到周五的早上6点10分
```

您也可以通过下列网址，进入crontab在线编辑器，获取更多cron语法和转译示例。

{% embed url="<https://crontab.guru>" %}


# 自动化配置

您可为自动化工作流配置密钥，保护您在自动化流程中上传的机密数据和文件。

密钥是您在数据集层级下创建的加密变量，用于保护您上传的机密数据和文件。当密钥配置完成后，您可以通过复制密钥名，在您指定的自动化工作流（YAML 文件）中以 `{{ secret.keyname }}` 引用该密钥。由于密钥值不会在 YAML 文件或代码中明文展示，引用密钥将能大大提高您在使用自动化工作流时的数据信息安全。

## 入口界面

* 在数据集详情页，选择【自动化】进入自动化工作流列表，在全部工作流列表中点击【配置】即进入密钥管理界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FvuasXx4Fqo3beHWCBLQZ%2Fimage.png?alt=media\&token=db2c0035-02a5-4937-ae09-41115f9adc3d)

* 您也可以通过数据集详情页的【设置】-【自动化配置】进入密钥管理界面。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FDGKKkoiar1U9FKfOJIsR%2Fimage.png?alt=media\&token=0ebb5976-3c85-4681-b545-5e24d6d8bc0b)

## 新建密钥

* 进入密钥管理界面，点击【新建密钥】，在弹窗中分别填写密钥名及密钥值。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FkmYMdG3vstwnLEoJXnIl%2Fimage.png?alt=media\&token=b4ac0e71-e882-42ff-8ebd-dba814796fe4)

* 密钥名及密钥值均输入完成后，点击【新建】即创建密钥成功。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2Fg6k3zia4X72OSEKO4Nid%2Fimage.png?alt=media\&token=983f0281-7ba6-46dc-b2dd-69ecc1343dd1)

## 密钥命名规范

* 密钥名只能包含字母/数字（\[a-z], \[A-Z], \[0-9]） 或下划线 （\_），不允许有空格，不允许有其他特殊字符。&#x20;
* 密钥名不可将数字作为开头。&#x20;
* 密钥名区分大小写。
* 密钥名在所创建的层级上（即当前数据集中）必须是唯一的。
* 密钥名不可少于2个字符，长度限制为40个字符。
* 密钥值无限制。

## 密钥权限

* 密钥权限与数据集管理权限保持一致，即对数据集有管理权限的用户可新建、更新和删除密钥。
* 对数据集无管理权限的用户仅可复制使用密钥。
* 密钥值仅在创建时展示，创建完成后所有用户均不可查看密钥值明文。

## 管理密钥

* 所有创建的密钥都将在密钥管理列表中展示，包括密钥名、密钥更新时间、以及对秘钥的操作，您可在当前列表对密钥进行更新和删除。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FNxwdZx9rZ2lYo3Hwf7JD%2Fimage.png?alt=media\&token=2f630bef-a45d-4aa8-b36e-bb9e6025807c)

### 更新密钥

* 在密钥管理列表中选取需要更新的密钥，点击操作栏中的【更新】，在弹窗中输入新的密钥值。输入完成后继续点击【更新】即完成当前密钥的更新。在您下次引用该密钥时，会自动调用您更新后的密钥值。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FU22gAKqTawdSkFKJ3BOt%2Fimage.png?alt=media\&token=62544fe0-7f2b-450f-adcd-c733a373e11f)

### 删除密钥

* 在密钥管理列表中选取需要删除的密钥，点击操作栏中的【删除】，并在二次确认弹窗中继续点击【删除】即可成功删除密钥。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FbPs4kOK7Ms7WsKnfkn0d%2Fimage.png?alt=media\&token=fbcf5251-f0ba-4e26-9e0c-168bf957533e)

{% hint style="info" %}
删除可能导致使用该密钥的工作流无法正常工作，请谨慎操作。
{% endhint %}

## 使用密钥

* 当您要使用密钥时，首先请进入密钥管理列表复制密钥名称。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FmVgOyE6m9Cy2i4BspPhv%2Fimage.png?alt=media\&token=7cb00139-3f60-46c8-b042-52149ff931e2)

* 名称复制成功后，您可将该密钥用于您指定的自动化工作流。具体方式为在YAML文件中使用下列格式`{{ secret.keyname }}` 进行引用。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FEyQjYdg81bVlwxF3q0lj%2Fimage.png?alt=media\&token=d7c4b0ac-e0ca-4471-8c28-605a38bbff0c)


# 如何与Pipeline集成

**格物钛** 提供丰富灵活的开发者工具，包括PythonSDK、CLI与Open API，通过完整的文档与使用案例，让您的数据与Pipeline快速集成。如何使用开发者工具

{% content-ref url="/pages/-MLCnlrTBgRXldjOYYbu" %}
[开发者工具](/dev-doc/tools)
{% endcontent-ref %}

## 开发者工具 <a href="#id-1" id="id-1"></a>

* GAS主页 - 顶部导航栏 - 【开发者工具】，可查看Python SDK、CLI与Open API使用示例，也可以在帮助中心查看具体的使用文档。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MYxQXLr-fWZeye9QEzC%2F-MYxR-ZWFkfFE5PIrK4f%2Fimage.png?alt=media\&token=87dac8e2-7f34-4661-b938-d6f35db5479a)

* 通过开发者工具读取或同步数据修改至TensorBay工作空间时，需要使用自己的【Accesskey】用于身份认证。

{% hint style="info" %}
不同工作空间的Accesskey具有与该空间对应的权限，因此不同空间的Accesskey不互通。
{% endhint %}

## 获取AccessKey <a href="#id-2" id="id-2"></a>

* GAS主页 - 顶部导航栏 - 【开发者工具】-【AccessKey】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe2VmqYUnfSRSKieku%2F-MWe303_nvrinFW-JyXa%2Fimage.png?alt=media\&token=9d8c5770-d243-4976-8726-1a57e3c1c171)

* 【新建Accesskey】创建**当前工作空间的Accesskey**，每个工作空间最多创建5个Accesskey，可以通过【删除】Accesskey取消已创建密钥的访问权限。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe2VmqYUnfSRSKieku%2F-MWe3Abdb5iy8l9HdWzJ%2Fimage.png?alt=media\&token=0c4073f6-6e82-4948-8c8e-7054e37b644a)

{% hint style="danger" %}
AccessKey 是访问 SDK 和 Open API的密钥，具有该账户**完全的权限**，请务必妥善保管。请勿通过任何方式将AccessKey公开至外部渠道，以免被恶意利用而造成安全威胁。
{% endhint %}


# Open Datasets

Hi！欢迎使用Graviti Open Datasets

&#x20;**格物钛 - Open Datasets** 汇集了海量国内外优质公开数据集，致力于为全球AI开发者打造共享、开放的数据集交流社区。

> 便捷云端使用，从数据源头开始，为您的AI开发保驾护航

### 丰富多元的数据集 <a href="#id-1" id="id-1"></a>

涵盖50+的应用场景，30+的标注类型，10+的数据格式；1000+优质数据集等你来探索！[立即获取数据集](https://gas.graviti.cn/open-datasets)！

### 多维快捷的数据集查找与定位 <a href="#id-2" id="id-2"></a>

用户不仅可以通过关键词精准定位心仪数据集，还可以通过数据集名称联想，数据集应用场景、标注类型的筛选进行多维度查找。

通过将数据的应用场景、标注类型、数据概要信息及协议信息结构化，方便您迅速定位数据关键信息，提高您的阅读体验。

{% content-ref url="/pages/-MK9GkAWBxtD\_nT4r5Vq" %}
[查找公开数据集](/guide/opendataset/get)
{% endcontent-ref %}

### 清晰高效的数据集在线可视化 <a href="#id-3" id="id-3"></a>

您可以通过Graviti组件式数据可视化工具在线预览原数据、标注数据、数据特性（数据标签及属性分布）等。

{% content-ref url="/pages/-MS1uI3N7CoJJpyf2ZvA" %}
[在线预览数据及标签分布](/guide/opendataset/visualization)
{% endcontent-ref %}

### 高速稳定的海外数据下载 <a href="#id-4" id="id-4"></a>

&#x20;针对海外数据获取难、下载慢的问题，Graviti给出了一站式解决方案——将全球资源Host至国内镜像，无需VPN访问。和进入海外官网下载相比，Graviti至少提速100%。从此告别令人抓狂的下载报错！

{% content-ref url="/pages/-MS1w9dUi4QK7xdWYYei" %}
[下载公开数据集](/guide/opendataset/download)
{% endcontent-ref %}

### 在线获取并使用数据集 <a href="#id-5" id="id-5"></a>

在Open Datasets获取数据集后，可选择Fork数据集，之后便能在TensorBay对原数据集进行修改，享受一站式数据管理服务。

{% content-ref url="/pages/-MK9Gq3IJFfi6T3nYqgz" %}
[在线使用并管理数据集](/guide/opendataset/fork)
{% endcontent-ref %}

### 完善的数据集社区支持 <a href="#id-6" id="id-6"></a>

一对一回应、跟进、解决用户对于数据集的需求，以及在数据管理过程中遇到的任何问题。

{% content-ref url="/pages/-MS1wH3IXJgApAt32NV\_" %}
[找不到想要的数据集？](/guide/opendataset/issue)
{% endcontent-ref %}


# 数据集概念

数据集常见名词解释

在使用TensorBay和搜索数据集的过程中，主要涉及两类数据集的相关概念：普通数据集（Dataset）和融合数据集（FusionDataset）以下将给出其中常见的名词解释。

## 普通数据集 <a href="#id-1" id="id-1"></a>

普通数据集是最常见的数据集，例如：MNIST、THUCNews等数据集，其数据文件之间没有特别关联或来自于单一的传感器。

* Dataset：普通数据集

一个普通数据集包含一定数量的数据文件、标注信息以及与数据集相关的信息。每一个数据集可包含零到多个Segment和零到多个Catalog。

* Segment：数据集划分

在TensorBay数据集结构中，Segment是仅次于普通数据集（Dataset）的数据级别。每一个Segment包含一定量的数据。例如：所有训练样本可以整合在同一个名为 “Train“ 的Segment中。

* Catalog & SubCatalog：含多种标注类型的标注表 & 含单一标注类型的标注表

含多种标注类型的标注表（Catalog）包含该数据集中标注数据的所有标签meta信息。每一个含单一标注类型的标注表（SubCatalog）仅包含一种类型的meta信息。

* Data：数据

在TensorBay数据集结构中，数据是最基本的数据级别。每条数据包含一个数据样本文件、该数据的标注标签及其他数据信息（例如：时间信息等）。

**【示例】普通数据集的数据结构：**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWOoND-co35Q_yaN__w%2F-MWP0nW4-VYw7j2wPLP1%2Fimage.png?alt=media\&token=d2222203-305d-4fbe-9b13-ef9775e7a267)

## 融合数据集 <a href="#id-2" id="id-2"></a>

融合数据集是由多传感器收集的数据组成的数据集，常见于无人驾驶领域，例如：nuScenes和KITTI-tracking数据集。

* FusionDataset：融合数据集

融合数据集支持数据来自多个传感器，包含所有Frames、标签、传感器和其他信息。一个融合数据集可包含多个FusionSegment。

* FusionSegment

FusionSegment是仅次于融合数据集（FusionDataset）的数据级别。每一个FusionSegment包含一定量的Frames来储存不同传感器的信息。

* Sensor：传感器

传感器（Sensor）在FusionSegment中用来记录收集信息的设备。目前，我们支持以下四种类别的传感器，每个传感器（Sensor）可储存传感器相关信息，包含传感器名称、外部参数和内部参数（仅限相机类别传感器参数标定）。

| 传感器                 | 对应数据类别          |
| ------------------- | --------------- |
| 相机（Camera）          | 图像（image）       |
| 鱼眼相机（FisheyeCamera） | 图像（image）       |
| 激光雷达（Lidar）         | 点云（point cloud） |
| 雷达（Radar）           | 点云（point cloud） |

* Frame：帧

帧（Frame）是FusionSegment的组成部分。一个帧（Frame）包含同一时间来自不同传感器的多种类型的数据文件。

* Data in FusionDataset：融合数据集中的数据

一个帧（Frame）中的每个数据对应一个传感器（Sensor）收集的数据文件。融合数据集中的数据与普通数据集中的数据定义相同。


# 查找公开数据集

1000+ 优质数据集等你来探索！

## **关键词搜索** <a href="#id-1" id="id-1"></a>

> 使用英文关键词快速搜索数据集

* 数据集名称模糊搜索
* 关键词联想搜索

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe4DwmUiGXG3lqr3GZ%2F-MWe5slxhCUsDZWvt5Jt%2F1.jpg?alt=media\&token=8605d465-3ef2-49e4-8d15-2999fa724ae4)

## **多维度筛选与排序** <a href="#id-2" id="id-2"></a>

### 快速筛选数据集 <a href="#id-2-1" id="id-2-1"></a>

> 多维度筛选

* 50+ 应用场景
* 30+ 标注类型
* 10+ 主流数据格式

### 对当前结果页进行排序 <a href="#id-2-2" id="id-2-2"></a>

> 多形式排序

* 综合
* 热度
* 时间

### 浏览数据集列表页 <a href="#id-2-3" id="id-2-3"></a>

> 数据集基本信息一览无余

* 数据格式
* 标注类型
* 浏览量
* 数据量
* License

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe4DwmUiGXG3lqr3GZ%2F-MWe6TpHMPdCzwQoXR2w%2Fimage.png?alt=media\&token=1306d288-7136-4950-aaef-665ed0b3677b)

## 精准定位 <a href="#id-3" id="id-3"></a>

### 数据集结构化信息描述 <a href="#id-3-1" id="id-3-1"></a>

* 数据集信息
* 数据概要
* 版权归属方
* 标注方

### 在线预览数据 <a href="#id-3-2" id="id-3-2"></a>

> 无需下载、另写代码即可让数据集信息一目了然

* 原数据
* 标注数据
* 标签分布

{% content-ref url="/pages/-MS1uI3N7CoJJpyf2ZvA" %}
[在线预览数据及标签分布](/guide/opendataset/visualization)
{% endcontent-ref %}

### 了解数据集详情 <a href="#id-3-3" id="id-3-3"></a>

* 数据集概览 \<Overview>
* 数据收集方式 \<Data Collection>
* 数据标注 \<Data Annotation>
* 数据格式 \<Data Format>
* 勘误 \<Errata>
* 引用 \<Citation>

### 相关数据集推荐 <a href="#id-3-4" id="id-3-4"></a>

> 探索更多相关数据集

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe4DwmUiGXG3lqr3GZ%2F-MWe79XFcboQJyJOO156%2Fimage.png?alt=media\&token=1874fed1-9877-4e16-8cb6-06800fae9d75)


# 在线预览数据及标签分布

通过Pharos可视化工具提前掌握数据细节，试错成本大幅降低

## 标注数据可视化 <a href="#id-1" id="id-1"></a>

> 查看主流的图片及视频数据、标注数据

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe7FGkI4Zbk8C17lbV%2F-MWe7wkN9PJy9XpVNQ37%2Fimage.png?alt=media\&token=51d73fb6-889a-49fb-8327-7dfb4aa3ff0a)

* 右侧主视图：点击 "**<**" 或 "**>**" 切换数据集样例
* 左侧标注列表：点击任一标签名称，即可在主视图中查看对应的标注情况

## **标签分布可视化** <a href="#id-2" id="id-2"></a>

> 查看数据集的所有标签的分布情况

* 多种信息统计方式：列表、柱状图、饼图
* COPY 预览页面的URL/IFRAME将可视化组件嵌入到自己的页面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe7FGkI4Zbk8C17lbV%2F-MWe8KFrBNMjJJkanwca%2Fimage.png?alt=media\&token=dc7ce25d-ced3-4267-b2cc-5842143d12b4)

{% hint style="info" %}
可视化组件尚未覆盖所有数据集，将在日后陆续上线 :)
{% endhint %}


# 在线使用并管理数据集

协同TensorBay提供一站式数据管理服务

> 统一数据结构调用代码，无需担心数据格式转换

* 数据集详情页 - 【探索数据集】 - 【Fork数据集】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe8hAaOOeApXf-Qu8v%2F-MWe8iEuJ4r6SLs_EQph%2Fimage.png?alt=media\&token=7cfc2ac8-6b53-44a5-900a-c3c6f91d8900)

* 确认许可协议，选择Fork的版本和存储的空间，点击【确&#x8BA4;**】**，Fork到【我的数据集】或【团队数据集】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe8hAaOOeApXf-Qu8v%2F-MWe9413bOSXqkrlINSi%2Fimage.png?alt=media\&token=fd329356-aea8-493b-979d-ccc84d545f65)

* 对于已Fork的数据集，可在[TensorBay](/guide/tensorbay)进行数据管理。

{% content-ref url="/pages/-MWOqcfIEzwx5sZewOsM" %}
[TensorBay](/guide/tensorbay)
{% endcontent-ref %}


# 下载公开数据集

无需VPN，轻松下载海外数据

* 数据集详情页 - 【探索数据集】-【下载数据集】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe9MVAlr-ZPAnRuKPh%2F-MWe9V1k_W0BkL2A2TA3%2Fimage.png?alt=media\&token=af7956c6-703c-4d09-bdae-f2fed8b40398)

* 在数据集下载列表选择要下载的zip包，点击【下&#x8F7D;**】。**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe9MVAlr-ZPAnRuKPh%2F-MWe9j_o2U4MRQKYPdqR%2Fimage.png?alt=media\&token=3f8de44d-c960-4d2e-86b4-c12d17fa1005)

* 确认License，明确数据集使用权限。
* 点击【确认】，即可下载数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWe9MVAlr-ZPAnRuKPh%2F-MWeAHX6MnTZON4x16ao%2Fimage.png?alt=media\&token=f4443aad-6959-40a4-ada2-203b85c5e481)


# 找不到想要的数据集？

欢迎向Graviti反馈数据集相关问题

## 提交产品建议

* 进入GAS主页，点击导航栏右上方的【**···】-**【产品建议】或直接[进入反馈社区](https://www.graviti.cn/forum/request)提交反馈，在线提交数据集需求。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeAR2wo-KT5hSngwBF%2F-MWeAzzgbzVnD8KSd3Nb%2Fimage.png?alt=media\&token=a4338013-2e6e-4c59-969d-e54f092a7560)

* 点击【新增反馈】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeAR2wo-KT5hSngwBF%2F-MWeBCXp6asXtLd5EYjV%2Fimage.png?alt=media\&token=09be5cc3-0d84-4526-b58a-a45b145acd33)

* 选择：【反馈类型】 — 【产品建议】，【产品模块】 —【 Open Datasets】，填写遇到的问题或需求，选择紧张程度后，点击【提交】。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MWeAR2wo-KT5hSngwBF%2F-MWeBk-JhyZ2cJsRLQef%2Fimage.png?alt=media\&token=b0133b56-60e9-4ec5-9e22-e242047673cd)

* 实时查看反馈处理进度。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MVLSruwNrJvdcrWXTxh%2F-MVLYmJbdRKHyvhhDMzA%2F%E5%8F%8D%E9%A6%883.png?alt=media\&token=07366e49-2e96-4caa-a7bc-d3b4772aa118)


# GroundTruth Tools

协同数据标注工具

GroundTruth Tools是一款面向机器学习数据准备的协同数据标注工具，支持多种常用标注类型以及多人协同标注。无需部署即可快速开始标注任务，适用于小团队快速生产冷启动所需数据。

GroundTruth Tools支持2D矩形、分类、2D多边形、2D折线、2D关键点图片标注类型并且同时支持语音分类标注。具体标注类型说明如下：

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj8T6yQgqPoB0BO1Ftv%2F-Mj8V0MudNUFjKM4umJd%2Ff6aeb77913774ee2e468e75a3a9fb20.png?alt=media\&token=2dde284f-b6e8-4f0c-821b-ea7473a4a369)

具体图片标注步骤请查看:

{% content-ref url="/pages/-MS2Mr01-38c0KvOLVds" %}
[图片标注](/apps/groundtruth-tools/image-labeling)
{% endcontent-ref %}

具体语音分类步骤请查看:

{% content-ref url="/pages/-MidYyvfIcep6W0A7qa-" %}
[语音分类](/apps/groundtruth-tools/audio-labeling)
{% endcontent-ref %}


# 图片标注

## 创建标注项目 <a href="#id-1" id="id-1"></a>

1.GAS主页 - 顶部导航栏 -【应用】- 【GroundTruth Tools】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FHr8kss0H8GJ11Tn253Dd%2Fd03778928f53346e3ea5dbe007a1416.png?alt=media\&token=005b7ab2-c919-4210-9400-ff308da2e52e)

&#x20;2.点击右上角【新建标注项目】按钮&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidfCMEeBcI4xXy2eJK%2F-MidfeaDEOZXYRO9DhBy%2Fxin21.png?alt=media\&token=bc7b7996-95ee-43ce-8d5f-06a0c34b947c)

3.选择参与标注的数据集及其版本&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidblH8tiHwZtLdALMW%2F3.png?alt=media\&token=5ec8c0d3-345c-42a0-b768-eaa6e5344c9f)

{% hint style="info" %}
建议选择小批量数据集进行标注，不超过2000个数据
{% endhint %}

4.输入项目名称，选择标注类型，并确认是否导入原标注数据，并在原标注数据的基础上修改&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidbrCWoGq3jYYbxTKL%2F4.png?alt=media\&token=b37ce779-ec1d-4bc1-8788-04b8e072606c)

5.选择标注标签及添加属性，支持自定义标签子类和自定义属性

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidbxaXHig9cuLo3Z4_%2F5.png?alt=media\&token=42ee388c-d4fb-4232-8811-4e23399caace)

6.核对信息，完成创建

## 协同标注/邀请标注成员 <a href="#id-2" id="id-2"></a>

单个项目内协作人数上限为五人，具体邀请步骤如下所述

### 个人用户/团队成&#x5458;**：** <a href="#id-2-1" id="id-2-1"></a>

1.在【标注项目详情】页面点击【邀请成员】按钮&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Midd8tO6xzztfvryRsI%2F-Midej5-xaKiiLe-mo2H%2Fe291491a2e07ea5e82587bd276af63a.png?alt=media\&token=fee04006-3bca-4a58-8915-daaffd328399)

2.复制邀请链接，发送给需要邀请的用户（24h内有效），受邀用户按指示登录GAS，即可参与到项目中

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Midd8tO6xzztfvryRsI%2F-MideQU56LHz2sO3uu2U%2Fa7f59358c16c22fb9f41c7b23d867fb.png?alt=media\&token=dfd05c8f-2ef0-428e-86d7-a97bd93c4783)

### **团队管理员**： <a href="#id-2-2" id="id-2-2"></a>

1.在【标注项目详情】页面点击【添加成员】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Midd8tO6xzztfvryRsI%2F-MidenBtk2eDqkmp2FNG%2F2dbaca196ce78ed997c42709759befe.png?alt=media\&token=e9a74437-61c4-4f1e-acfb-ba6f20a8f698)

2.支持通过搜索添加项目成员或直接通过下方成员列表后的添加按钮添加项目成员&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidcB06WiHK18LRTpZ6%2F6.png?alt=media\&token=cccc2f06-0494-410e-89e7-9d0b3b7f16d5)

## 开始/暂停/完成标注 <a href="#id-3" id="id-3"></a>

1.在【标注项目详情】页面点击【开始项目】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Midd8tO6xzztfvryRsI%2F-Midf7OyT7Vq1a1Ye3nJ%2Fda8937aead7a7bf40f2f8f0da3c6f46.png?alt=media\&token=ea73edb9-d9fd-4849-b211-f01c8592440a)

{% hint style="info" %}
用户可以点击蓝字，扫码关注Graviti微信公众号，第一时间获取标注项目进度通知扫码关注。
{% endhint %}

2.配置项目的拆分数量，项目拆分后可将各子项目分配给不同的成员进行标注，配置完成后点击【完成配置并开始】按钮开始项目&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidcFq8Sj_5LVmFJeNk%2F7.png?alt=media\&token=94835275-4989-4b5d-802b-08cbd3ca46dc)

3.在【标注项目详情】页面点击【标注员】栏的下拉框进行具体任务分配，点击【标注】按钮开始标注。支持在标注项目详情的任务列表内查看各标注员的标注进度。

{% hint style="info" %}
当标注开始，任务将无法重新分配。只能查看其他成员的标注任务，无法交换。
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidcM1vdtOZjmkG6U0W%2F8.png?alt=media\&token=36e12fee-ce72-4cdf-b62f-ef1cb32b7d85)

&#x20;4.进入标注界面后，根据之前所选项目不同标注类型，标注员可按照界面内相关提示对图片进行标注。点击右上角【暂停并退出】按钮可随时暂停并退出当前标注任务，退出前已标注的内容将会被保存&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidcUPcUmLy5aoZzMAU%2F10.png?alt=media\&token=83623601-02ed-4f92-ad84-d9e35efd31d0)

5.所有标注子任务完成后，任务发起者点击【终止项目】按钮，即可终止标注任务

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidcaAJaH4dsBjhF7hS%2F11.png?alt=media\&token=0834176a-1ebf-4cc5-bab6-e30484c7d295)

## 下载/同步标注结果 <a href="#id-4" id="id-4"></a>

任务终止后，可以【下载】标注数据（文件格式为json，不包含原数据）用户还可以选择【同步标注结果至数据集】，该标注数据将作为一个新Branch上的commit同步到数据集。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MidbOCpJFcz87c-9LOp%2F-MidchDbkLRtXSEYkHJy%2F12.png?alt=media\&token=53c2d17d-623c-4c93-baea-504fcfadf25e)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FYwJfbJ2z5UTHnV52Oeex%2F8c55d24c51b21c8f70724a9e6aade45.png?alt=media\&token=3a6164dc-a8a5-4f37-921f-b4b94e49df3c)

{% hint style="info" %}
如果不同步结果，原数据集将不会有改变。
{% endhint %}

## 查看数据 <a href="#id-5" id="id-5"></a>

1.从主页顶部导航栏点击【我的数据集】或【团队数据集】进入数据集详情页，点击所要查看的数据集可进入数据集详情页

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FgmSt9NO3nj1x7Py8WwQW%2F0a9b092dd4c4b36882da1b12ad04bd5.png?alt=media\&token=2b36c31e-e0fd-47d3-886e-a1638f7ded29)

2.进入数据集详情页后，点击【管理数据】可查看该数据集的列表及标注信息，可通过PythonSDK或OpenAPI读取数据及标注，使用该数据

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FkfpfaMkR3mF3Nnf6k7bg%2Fdbaf01340d0152cf10403be4ac6025e.png?alt=media\&token=70da2ae1-2195-422b-aa82-39bf58179562)

3.点击【查看模式】下拉框，可查看数据及标注的可视化显示，或选择其他查看模式

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FmsrKG6zmZndIyzzhHmaV%2F098c2853e3c1d6238c1882482ff5e50.png?alt=media\&token=f0eb88a3-1742-45e4-a946-2f9fdb58b6a3)


# 语音分类

## 创建标注项目 <a href="#id-1" id="id-1"></a>

1.GAS主页 - 顶部导航栏 -【应用】- 【GroundTruth Tools】&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FHr8kss0H8GJ11Tn253Dd%2Fd03778928f53346e3ea5dbe007a1416.png?alt=media\&token=005b7ab2-c919-4210-9400-ff308da2e52e)

2.点击【新建标注项目】按钮，根据指示选择需要标注的数据集

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiefKKIzwwnsY0KiBPh%2F-Mieg7VOA7Sp0rLiJ5zZ%2F1.jpg?alt=media\&token=e03672a6-fdbd-4c49-a5ba-9a05e0ffe5e4)

&#x20;3.进入标注配置页面填写项目基本信息，并在标注类型中选择【语音分类】，并确认是否导入原标注数据，并在原标注数据的基础上修改&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MienddfzMIw-jHNY7K7%2F3.jpg?alt=media\&token=26771738-14fd-4141-9cd7-db37e791f935)

4.选择标注标签的分类问题，可在左侧选择系统预置的问题及选项，或点击【添加分类问题】按钮来自定义问题。支持用户自定义属性名称、类型以及选项。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-Mieo780tKHU5hq9jDCd%2F4.jpg?alt=media\&token=d73aa1b8-7711-47fd-a231-044976d274cb)

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MieocGJcFdJuNCOZLEe%2F5.jpg?alt=media\&token=0c2694e8-5144-4e0c-aa7d-39585f0d4273)

5.确认标注信息后，点击【完成】以完成新建标注项目

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MieomvPrzT5fg6dFARF%2F6.jpg?alt=media\&token=dd4e8dc2-508a-40da-9fae-d6c5e1c7eeec)

## 协同标注/邀请标注成员 <a href="#id-2" id="id-2"></a>

单个项目内协作人数上限为五人，具体邀请步骤如下所述

### 个人用户/团队成&#x5458;**：** <a href="#id-2-1" id="id-2-1"></a>

1.在【标注项目详情】页面点击【邀请成员】按钮&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MiepoRqAX2QElnuGU3A%2F7.%20%E4%B8%AA%E4%BA%BA%E2%80%94%E9%82%80%E8%AF%B7%E6%88%90%E5%91%98.jpg?alt=media\&token=91e1c850-0794-4bb8-b780-f2dd8cf3fed0)

2.复制邀请链接，发送给需要邀请的用户（24h内有效），受邀用户按指示登录GAS，即可参与到项目中

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MieqYdVDnSNlWiJ0fcP%2F7.%20%E4%B8%AA%E4%BA%BA%E2%80%94%E9%82%80%E8%AF%B7%E9%93%BE%E6%8E%A5.jpg?alt=media\&token=37d7d9e1-7c10-4f01-ab91-8a0d6afb1b56)

### 2.**团队管理员** <a href="#id-2-2" id="id-2-2"></a>

1.在【标注项目详情】页面点击【添加成员】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-Mier0iH28L4bnX_si8n%2F7.%20%E5%9B%A2%E9%98%9F%E2%80%94%E6%B7%BB%E5%8A%A0%E6%88%90%E5%91%98.jpg?alt=media\&token=f3cab331-c9bd-4d02-bc9d-6ba0f15e21eb)

2.通过搜索添加项目成员或直接点击成员列表后的添加按钮添加项目成员

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MiegH9tVepSy_srqoMp%2F-MieqldKlh9HuUFIhoZR%2F7.%20%E5%9B%A2%E9%98%9F%E2%80%94%E6%B7%BB%E5%8A%A0%E6%88%90%E5%91%98%20%E6%90%9C%E7%B4%A2.jpg?alt=media\&token=871efad9-8360-4030-bf01-4c50fcc088dd)

## 开始/暂停/完成标注 <a href="#id-3" id="id-3"></a>

1.在【标注项目详情】页面点击【开始项目】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MierHd19mrTIEswnIA_%2F-MieuBXuy7cSH3lbBgLL%2F7.%20%E5%BC%80%E5%A7%8B%E9%A1%B9%E7%9B%AE.jpg?alt=media\&token=fc9e88b1-7f28-4d99-8925-6bdab561ea86)

{% hint style="info" %}
用户可以扫码关注Graviti微信公众号，第一时间获取标注项目进度通知扫码关注&#x20;
{% endhint %}

2.配置项目的拆分数量，项目拆分后可将各子项目分配给不同的成员进行标注，配置完成后点击【完成配置并开始】按钮开始项目&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MierHd19mrTIEswnIA_%2F-MieuIdY32Jl_veW82rV%2F8.jpg?alt=media\&token=5b244be5-2d36-4b4a-a621-2b6f5f41d2fc)

3.在【标注项目详情】页面点击【标注员】栏的下拉框进行具体任务分配，点击【标注】按钮开始标注。支持在标注项目详情的任务列表内查看各标注员的标注进度

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miewi6qxMTLellCejut%2F-MiezLcfur0TjPRNtj-i%2F9.jpg?alt=media\&token=abf6a5f4-cc89-4242-bee1-953e1553ebe8)

{% hint style="info" %}
**当标注开始，任务将无法重新分配。只能查看其他成员的标注任务，无法交换。**
{% endhint %}

4.进入标注界面后，根据标注界面相关提示对语音文件进行标注。点击右上角【暂停并退出】按钮可随时暂停并退出当前标注任务，退出前已标注的内容将会被保存

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miewi6qxMTLellCejut%2F-Miezjfpe7SpnJu1n6Ig%2F10.jpg?alt=media\&token=ea353c31-9986-415d-b962-43145557458d)

5.所有标注子任务完成后，任务发起者点击【终止项目】按钮，即可终止标注任务

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miewi6qxMTLellCejut%2F-MiezyIzWWAX4wFtA2G-%2F11.jpg?alt=media\&token=305940fc-de21-4ca1-9841-a6ef9fde452c)

## 下载/同步标注结果 <a href="#id-4" id="id-4"></a>

任务终止后，可以【下载】标注数据（文件格式为json，不包含原数据）用户还可以选择【同步标注结果至数据集】，该标注数据将作为一个新Branch上的commit同步到数据集

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miewi6qxMTLellCejut%2F-Mif-p04tBU2AGMBOzOb%2F13.jpg?alt=media\&token=dd0c4d25-3b91-4616-a28e-43a288ea290b)

{% hint style="info" %}
**如果不同步结果，原数据集将不会有改变。**
{% endhint %}

## 查看数据 <a href="#id-5" id="id-5"></a>

1.从主页顶部导航栏点击【我的数据集】或【团队数据集】进入数据集详情页，点击所要查看的数据集可进入数据集详情页

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FVTZOuwTPsL95v476z1xK%2F528f00e00ae8c039c1b3ec77ca8f16a.png?alt=media\&token=437a91e2-a1a4-4f86-b3a1-c92d54e81e46)

2.进入数据集详情页后，点击【管理数据】可查看该数据集的列表及标注信息，可通过PythonSDK或OpenAPI读取数据及标注，使用该数据

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FaqlTmZgWEGvMZDrUexGK%2F974071397544aa670bf68bd2c1f28c6.png?alt=media\&token=077b6598-8e7c-4b99-a562-999cd4f2ee48)

3.点击【查看模式】下拉框，可查看数据及标注的可视化显示，或选择其他查看模式

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FDnnuhmOEY664J7LmR1rt%2Fb49571d97534989b329394d4358bc2a.png?alt=media\&token=fc537bf9-462d-4c13-b6b8-4303d6f643d3)


# TeraGood Service

专业数据标注管理平台

## **TeraGood是什么？**

TeraGood Service支持全流程的数据标注管理，覆盖订单创建、任务分发、数据标注、质检、终审、验收的全流程。通过算法辅助工具，提升标注效率；通过人员筛选+多轮质检，保障标注质量；支持与您的标注供应商协同管理数据标注全流程，为您提供高效数据准备的基础设施。

## **如何进入TeraGood？**

{% hint style="info" %}
注：Teragood应用仅支持团队版账号使用，如何注册团队社区版账号体验高效标注流程管理：[团队协作](https://www.google.com.hk/url?q=https://docs.graviti.cn/guide/tensorbay/collaboration\&sa=D\&source=editors\&ust=1631001080450000\&usg=AOvVaw1oCzSOwAa4qMxCdz8HNiyj)
{% endhint %}

有两个入口可以进入TeraGood应用

方式一：首先进[格物钛官网](https://www.graviti.cn/)，点击上方导航栏中的【应用市场】，进入应用市场主页面，选择打开TeraGood应用，进入到应用界面，点击打开应用，即可使用TeraGood标注工具

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2F3L1ZWoBhjbrDdIiptt1d%2Fd942a67fa5a283278528907a4b711dc.png?alt=media\&token=0cee25f9-c926-4266-ac3e-92b5ce005bfb)

方式二：登录账号后，可以在页面左部分找到我的应用模块，可以直接点击TeraGood图标进入应用应用界面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FMOMV37wy1yqLugQpG0fj%2F66.jpg?alt=media\&token=a8eeafc2-a8f5-4792-8065-ccfbb1decb60)

## TeraGood服务流程

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MkAcVGkHFgw_fBa6OSS%2F-MkAd-1gw6Rs3zRvhRaO%2Fimage.png?alt=media\&token=bd41ee36-b6b5-4ad2-bd0d-72bc82dffbf3)

## **TeraGood 角色介绍**

**需求方**

{% content-ref url="/pages/-MGMu1VOXk3fe41TVeYK" %}
[需求方使用手册](/apps/teragood-service/datarequesters)
{% endcontent-ref %}

**运营方**

{% content-ref url="/pages/-MGMwSGPiXuOHPYJrl3t" %}
[运营方使用手册](/apps/teragood-service/operators)
{% endcontent-ref %}

**标注方**

{% content-ref url="/pages/-MiywkNN1vvck5SUMX7e" %}
[标注方使用手册](/apps/teragood-service/labellers)
{% endcontent-ref %}


# 需求方使用手册

## 1- 提交需求

**1-1  进入Teragood应用界面，选择【需求方登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyoVGVfP7jAZbhMO1z%2Fimage.png?alt=media\&token=7f5b984f-f093-4e3e-8190-75914bf2e3f7)

**1-2  进行登陆操作，输入账号密码，点击【登录】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiypLObhDLObSmYhpyy%2Fimage.png?alt=media\&token=008999d5-c579-420d-8abd-6373efb00f4f)

**1-3  选择需要使用Teragood服务的【团队社区版账号】**&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiypaPWEemCJAjKzjDZ%2Fimage.png?alt=media\&token=56c0fa23-50c2-473d-8116-7a722c238101)

**1-4  进入Teragood应用后，选择【新建标注订单】，选择需要标注的数据集版本**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miypo9MwS05-LQxu0KG%2Fimage.png?alt=media\&token=d165f633-af73-4660-8d4a-2fa4424efa5c)

**1-5  输入【订单名称】，选择所需的【标注类型】，并上传【需求文档】**

{% hint style="info" %}
需求文档：需求文档中应包含所需的标注属性，标注精度，标注准确率等要求
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyqCIqtaI3TY13Ja1E%2Fimage.png?alt=media\&token=0b931907-690e-4991-b93f-dcb5509b7362)

**1-6  提交完成后，会生成订单，需求方可以在此页面查看订单详情**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyqPB_XjN2nsCaJsda%2Fimage.png?alt=media\&token=df1aa384-c549-4181-b5a5-39d314235bb8)

## **2- 确认订单**

**2-1  待需求方登陆完成后，可以在主页面找到已提交的订单信息，点击右上角的【待确认】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyqtxhbKZbW1mGOfAf%2Fimage.png?alt=media\&token=20cd38c5-3316-480d-b848-6d6e322461d7)

**2-2  在订单详情页面下部待办事项模块中，可以查看到订单待确认信息，在核对解析信息和交付信息无误后，点击【确认订单】，即可完成订单确认**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyr4yh0dsczCCq1DBU%2Fimage.png?alt=media\&token=a7f96471-f9d0-48f0-915d-c9ad377a3a54)

## **3- 项目验收**

**3-1  完成登陆后，在全部订单模块中，找到待验收的订单，点击【待验收】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyrOuCZ7VmgZovP5AX%2Fimage.png?alt=media\&token=9bd93b09-8b17-4413-9360-80a6497b7e91)

**3-2  如需多人验收，需求方可以在Tensorbay团队社区版页面，点击【添加】添加多个成员，对标记完成的项目的进行验收**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2QTqBfbCK5HaSEnb4%2F-Mj2SnhpIUa_GjvQfJgI%2Fimage.png?alt=media\&token=065301da-5391-414d-935b-c763a56edc36)

![](https://lh5.googleusercontent.com/cAzOPW_GyZ_kXMVjKmDkvqlizGWzHR_EVflY71HCrssyERWl0wOb-ucYSAJ1bFGDkJr-F6vQHp0aJEEyfIpq9A1g_oi-FMboYWbP_s_fP5eQOdCoxU9xadjBWr3Z1p69QhXWJKn3=s0)

**3-3  在页面下边模块，待办事项中，设置验收比例，点击【开始验收】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyra4LerBu0uZAYHqy%2Fimage.png?alt=media\&token=bd360f16-76a7-4cec-8f60-3a10506caaaa)

**3-4  若发现标记错误，在原标注框处右击，并在弹框内选择相应标签**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj3fUtzTPhDLa-12j1t%2F-Mj3g2jHZpkXaryhTBGl%2Fimage.png?alt=media\&token=caf66d1f-e65b-429e-b4c1-b85080e3574f)

**3-5  检查标注无误后，点击【下一题】，结束后会自动跳回订单详情页面**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyrlBSvABIIFyMIBog%2Fimage.png?alt=media\&token=37d44a93-5596-42d0-9785-f4b1cdaa9a95)

**3-6  确认全部信息无误后，点击【通过】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyrvPFWE8N_Mt5qcM5%2Fimage.png?alt=media\&token=34311780-9937-45fc-9b1e-45169b87d9ea)

**3-7  需求方在订单完成后，可以点击【下载】，获取已标注的数据结果，默认为json格式**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2QTqBfbCK5HaSEnb4%2F-Mj2RnCBxw4B5IcN6ZmX%2Fimage.png?alt=media\&token=66944af1-e1e3-4a86-b418-2c3420412936)


# 运营方使用手册

## 1- **需求解析**

**1-1  进入Teragood应用界面后，选择【供应商登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiysObXvfl0bRlpOJXo%2Fimage.png?alt=media\&token=deadc0d5-4e2a-427e-9a8a-734de60a0c06)

**1-2  进入应用界面后，进入待确认订单，选择需求方创建的订单**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miysc1xov9rY_0AQFsi%2Fimage.png?alt=media\&token=60cd5eac-bc8b-4331-991b-0e17f1efdcf8)

**1-3  点击订单详情，进入订单管理页面，选择配置项目，选择【创建项目】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyswUkcOI6A56Wrjc5%2Fimage.png?alt=media\&token=4bb5a3e4-ac8f-4eeb-ba92-9b04931adb16)

**1-4  输入【项目名称】，点击【下一步】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyt6H5uGGRmlBqGbO-%2Fimage.png?alt=media\&token=94ebce0f-ab77-4855-99fc-db11f1f76b63)

**1-5  按照需求方提供的需求文档选择对应的标注标签**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiytG2_hUgOP_lFhiSY%2Fimage.png?alt=media\&token=0fbe36a4-0666-44a2-b9c4-6af10eb7b81f)

**1-6  同时可以设置【标注框属性】，在选择对象名称后，点击【属性】下方加号，添加标签属性**

![](https://lh6.googleusercontent.com/wkbF232XSxIVq2UxUNe2kjEP-G4grnwFExA-cUFj42S7wJt7jSGJcWV9COYKX8JCcgp2O7_ble1d8YyQ7Al68V_idpHgQdSZTMmMym483BiYsFUUPZxYnxuOq3pL4smKjcVLuoks=s0)

**1-7  输入【需求准确率】，确定截止时间，上传项目文档，输入金额，待检查无误后，点击【完成】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiytYO02b0ZDubqDsoA%2Fimage.png?alt=media\&token=f9c84fde-75fa-4c41-b3ca-96a00c88c92b)

## **2- 配置项目**

**2-1  在完成登陆操作后，选择进行中订单，找到需求方已确认的订单，点击【详情】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miytsy-Q0BYoXZNs0AM%2Fimage.png?alt=media\&token=ba29aeea-0a2a-4511-b89d-3ea8a86b93fe)

**2-2  点击【配置项目】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyu1pPqXKjZkp-nifG%2Fimage.png?alt=media\&token=80e9f63e-d3f2-4c0c-9c96-b20c3297243c)

**2-3  选择【配置】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyuBCPVQyIrq3H3H-Z%2Fimage.png?alt=media\&token=8a36fc33-e707-45c4-ab79-7971ff1dd1d9)

**2-4  确定【单个项目任务数】，输入项目【最低准确率要求】和【最低质检比例】，选择标注公司，点击【确定】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyuJXIlp1tZrR4gVfY%2Fimage.png?alt=media\&token=fa6a445f-b76b-4124-907c-7520120cee14)

**2-5  进入订单详情页面，点击配置项目，点击【开始】，项目会自动下发至标注团队**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyuSN4NF44rIBn7giw%2Fimage.png?alt=media\&token=8d422e99-7238-4548-be8c-ba9e938437f1)

## **3- 项目终审**

**3-1  进入Teragood应用界面后，选择【供应商登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyw9vB2KZLPP7bThSw%2Fimage.png?alt=media\&token=c8c3ed9e-957c-438a-95f6-9bbd8f1d7d72)

**3-2  进入项目管理界面，点击【终审阶段】，选择终审**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiywIOoeLaJEKyqLmIp%2Fimage.png?alt=media\&token=6588d6fa-af4a-4d75-969e-21e58850cd73)

**3-3  点击【终审】，设置【审核比例】，点击【开始审核】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiywPzrb5WmfTK2HC6b%2Fimage.png?alt=media\&token=9fd9a1ed-bb0f-4ab4-9917-b4cf423a7e90)

**3-4  如果出现漏标或错误标记，在需要更改处进行标记，点击【驳回至返工】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2Wfw1QHWCMWJqwvSh%2F-Mj2Xlj-IKiFCXNO12J8%2Fimage.png?alt=media\&token=aea31c4c-9e8a-479e-b3ac-57db153fb721)

**3-5** 检查已完成标注的图片，确认无误后，点击【提交】

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2Wfw1QHWCMWJqwvSh%2F-Mj2YfBPWs4Gj_kuI4Rg%2Fimage%20\(1\).png?alt=media\&token=5ba1db07-ce1b-4e3c-aaa1-4f899ed8d2a6)

**3-6  全部审核完成后，点击【通过】，完成审核**&#x20;

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miywf9PkJj4Cu1cDoQ2%2Fimage.png?alt=media\&token=4d4badd4-af54-43b2-9661-2f4085362640)

**3-7  用户管理：运营方管理员在登录后，点击【用户管理】，进入用户管理界面，选择客户管理，点击【添加公司】，输入公司名称，管理员手机号等，完成添加后，即可配置来自该公司的订单**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2QTqBfbCK5HaSEnb4%2F-Mj2W09vJacVxsYKQ6Qu%2Fimage.png?alt=media\&token=087eb463-1943-4365-89a6-3c2cc9a48e82)

**3-8  标注团队管理：标注方管理员可以在用户管理页面中的标注团队页面添加标注公司信息，点击【添加公司】，输入公司名称，人数，选择该公司的公司资质后，即可将符合订单，配置给该公司**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2QTqBfbCK5HaSEnb4%2F-Mj2VfV40I4PPo9el1UE%2Fimage.png?alt=media\&token=c894df2e-47e1-45e5-a0e7-43101d1d898f)

**3-9  员工管理：运营方管理员可以在用户管理中员工管理页面添加员工，点击【添加员工】，输入账号和昵称，按照实际情况分配用户角色，成为运营方内部员工**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mj2QTqBfbCK5HaSEnb4%2F-Mj2VNACCOB0g-IJUC7N%2Fimage.png?alt=media\&token=a4fa8c1c-1f4c-4876-821e-9676a9c1b22b)


# 标注方使用手册

## 1- 确认项目（管理员）

**1-1  进入Teragood应用界面，点击【供应商登陆】进行登陆操作**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyxOKD_OGt45unJJ48%2Fimage.png?alt=media\&token=577bb4ad-6eb4-421a-a206-11d4b114f1be)

**1-2  点击【未开始项目】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyxZc4PjAskUEiq6eD%2Fimage.png?alt=media\&token=6213c4c7-21e3-4ddb-ab59-725ad1722b40)

**1-3  确认项目名称，点击【详情】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyxhVNFaLgRtzXVNY7%2Fimage.png?alt=media\&token=b68da583-fbb8-4e46-9436-ea5524a42ce9)

**1-4  点击【配置项目】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyxt25EJmGBmXthUJu%2Fimage.png?alt=media\&token=9c40c9e1-6b94-45e9-be08-58978bd124a9)

**1-5  选择标注员，质检员，按照需求文档确定质检比例，点击【开始项目】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyy2nlL6IiV0DW2pyF%2Fimage.png?alt=media\&token=093bc178-18c0-4bbf-8e27-6815161b48dc)

**1-6  标注方可以进入进行中项目页面，调整项目的优先级（注：优先级1为最高）**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyyBacUCCpV9cpKvYp%2Fimage.png?alt=media\&token=95c4c683-ea47-48e7-90d1-dfff07464373)

## **2- 提交项目（管理员）**

**2-1  进入Teragood应用界面，点击【供应商登陆】进行登陆操作**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miyy_h36gU8YPq7lgi5%2Fimage.png?alt=media\&token=06e7ec65-35c3-4308-b335-1a63d8d7d960)

**2-2  进入页面后，进入待提交项目界面，点击已标注好的项目，点击【详情】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyykaBr_dNVT5Z2kZY%2Fimage.png?alt=media\&token=a7d3642e-59b3-40c5-8f00-652fcd6076e3)

**2-3  确认信息无误后，选择【提交】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyysqLNGXz-xyo7FYL%2Fimage.png?alt=media\&token=dde2f90c-1b60-4ba8-9192-2f2bf39589df)

## **3- 标注过程（标注员）**

**3-1  进入teragood应用界面，选择【供应商登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyzAfbAZAFciZJjHXi%2Fimage.png?alt=media\&token=c67d20b0-913e-4311-8f71-8bcccd2c8e4d)

**3-2  登陆后，在任务主页中的当前任务模块可以找到被分配的任务，选择【标注】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyzIyqYCH0TFbx5eJ-%2Fimage.png?alt=media\&token=537aabca-e653-4a93-9e2a-e55d43de622f)

**3-3  对照照片与点云，选择正确的标注标签，调整标注框大小，完成标注后，点击右上角【提交至质检】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyzSbIe_Vxit9Ty5Uk%2Fimage.png?alt=media\&token=b9b13056-d035-4b08-936b-156a7db4bf57)

## **4- 标注返工（标注员）**

**4-1  进入teragood应用界面，选择【供应商登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-MiyzhtHO3KUedaLdoZ3%2Fimage.png?alt=media\&token=0f4c6178-f8d9-4745-8876-16e5af6942ad)

**4-2  在任务主页，当前任务模块，选择【返工】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz-EysQzU1vt0rCMI1%2Fimage.png?alt=media\&token=b74cc17c-a495-4e77-937f-f4cde32b46b0)

**4-3  按照质检返工要求，重新完成标注标记工作，完成后，选择【提交至质检】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz-NCTD-9QN6tJ-P3U%2Fimage.png?alt=media\&token=15408e23-3e78-4a5c-8828-07377c4cc123)

## **5-  质检过程（质检员）**

**5-1  进入Teragood应用界面，选择【供应商登陆】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz-dt3sj3wrUP2HaFz%2Fimage.png?alt=media\&token=60da4a50-1b30-44f1-a5c9-c54f6e72a369)

**5-2  进入页面主页后，找到当前任务模块，点击【质检】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz-mD6JxlgMbVTS7KE%2Fimage.png?alt=media\&token=4dc8c0f0-4177-4631-a4a7-d1014b97d3ee)

**5-3  进入质检页面后，如出现漏标，在右侧功能栏选择此功能，并在页面右上角选择【驳回至返工】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz-y0pND82P0ELkj7b%2Fimage.png?alt=media\&token=7532e611-3880-4154-9cb9-d0b13ac8a4fc)

**5-4  如标注标记无误，选择【质检通过】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz07T50vB-q_pZpT-F%2Fimage.png?alt=media\&token=eb73c9df-f2f3-4e9f-9a92-cee1e5b85414)

**5-5  如出现标记错误，可直接点击标记处，选择错误类型，并选择【驳回至返工】**

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Miyluc84hQOtuj5nIoR%2F-Miz0IOUflOk5X0PRH0B%2Fimage.png?alt=media\&token=9beced43-8bed-4269-869a-b05b6aed15b4)


# Sextant

针对模型与数据的快速评估工具

格物钛Sextant提供针对模型与数据的快速评估，支持从评估指标纬度对数据进行可视化查看与筛选，可用于质检数据，完成高质量数据准备，以及对模型精准度的评估和发起各类竞赛。

{% hint style="info" %}
Sextant目前只支持对Box2D类型数据进行评估，Metrics仅支持mAP，更多标注类型和Metrics正在开发中，敬请期待
{% endhint %}

## 对数据进行评估 <a href="#data" id="data"></a>

Sextant支持对比两个数据集之间的标注情况，帮助您洞察数据的差异，快速定位数据漏洞，筛选出指定数据后可无缝对接GroundTruth标注工具进行质检和重标注，即刻提升数据集质量，助力训练高质量AI。

评估流程：

1. 将需要评估的数据上传到TensorBay
2. 创建评估，将其中一份数据选定为基准数据
3. 使用另一份数据参与评估，获取评估指标
4. 根据指标对数据进行筛选，定位问题数据
5. 将筛选结果保存为新数据集，开始数据质检与提质

## 对模型进行评估 <a href="#model" id="model"></a>

Sextant支持对模型的精准度进行评估，帮助您快速了解模型表现，定位模型弱势场景，为模型能力提升提供参考；支持多模型评估结果横向对比，找到最适合应用场景的模型。

评估流程：

1. 将真值数据上传至TensorBay中
2. 创建评估，将真值数据选中为基准数据
3. 将用于评估的模型上传至Github，使用该模型参与评估
4. 查看指标结果和横向对比情况


# 新建评估

在GAS页面的顶部导航栏中点击 **【**&#x5E94;&#x7528;**】**，然后选择【Sextant】进入Sextant主页

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MGHaHpCAkpKvpxq5ZJn%2Fuploads%2FIyegUKxmMlXubp1Clzvk%2F9d2e2dfe6bef18342eba1552c1b2975.png?alt=media\&token=00119371-721a-43b0-a58d-d318977f4e54)

点击右上角的新建评估，进入评估的新建页面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4pvfvC_PyuoaDZvek%2Fimage.png?alt=media\&token=797b6779-9acf-409c-9a1c-ea69e5829859)

填写评估的基本信息，选择评估的基准数据以及需要评估的标注标签，完成创建。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4q24RZi8STBndc77q%2Fimage.png?alt=media\&token=b5bde6f4-57a8-424a-acc9-08a658b24ab5)

新建评估所需的内容如下：

1.基准数据集：用于评估指标计算的基准参考数据，如在一般模型评估场景中的：**真值数据**

基准数据目前仅支持选择TensorBay中的数据集，如需要使用本地或其他云存储上的数据，请先将数据上传至TensorBay，详情请查看

{% content-ref url="/pages/-MWSbbiz429ASW3po9Q\_" %}
[数据集准备](/guide/tensorbay/data)
{% endcontent-ref %}

2.评估标注类型：需要评估的数据标注类型，目前支持Box2D、POLYGON和POLYLINE2D

3.评估标注标签：需要评估的标注标签内容

4.IoU阈值：人为设定的IoU的阈值，在评估中高于该阈值的矩形框被认为是命中目标，反之则被认为未命中，需要填写一个0-1之间的两位小数

{% hint style="info" %}
目前单个评估仅支持添加一个IoU阈值进行评估，多阈值同时评估相关功能敬请期待
{% endhint %}

##


# 自定义Metrics

Sextant支持用户自定义Metrics计算方式，并输出计算结果。您只需要将自定义Metrics算法上传至Github Repo并把Url填入Sextant即可。

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MjDChl9ml1Nzqw3tc4y%2F-MjDCkRhtJ1dLmLwKNkO%2F1.png?alt=media\&token=d1c28014-6d4a-4185-9f12-f14bc3dbfa9f)

{% hint style="info" %}
需要将您的Metrics算法使用python进行编写，并放到Github中
{% endhint %}

## 支持类型

Sextant支持自定义Float和Curve两种类型的指标，并指定他们的生效范围

### Float

输出结果为一个浮点值，在前端显示为“名称=数值“的样式，如mAP=0.75

### Curve

输出结果为两个一维数组，分别命名为x和y，在前端渲染为曲线样式，x数组和y数组中的值会对应的渲染为曲线上点的横纵坐标

### 生效范围

可以定义指标的生效范围为Data级别或者Dataset级别

Data级别：针对参与评估的每个数据会返回一个对应值，例如单张数据的标注IoU均值

Dataset级别：每一次评估只会返回一个对应值，例如本次评估的mAP

## 定义规则

您的Metrics算法需要满足以下规则：

1. ‌如果您的代码中需要额外的依赖包，则需要在根目录下创建requirements.txt，并在其中写入依赖（不支持torch、tensorflow等深度学习框架的GPU运算）。
2. 您需要在github根路径下创建一个`__init__.py`，以确保repo被clone到本地后，其路径能够作为python package导出一个名为 Evaluator 的 class。
3. python库中有且只有一个名为 Evaluator 的 class
4. Evaluator 中需要有获取单个图片标注的评分方法 evaluate\_one\_data(input\_source: dict， input\_target: dict) -> dict 方法，input\_source 和 input\_target 值请参考[graviti标准化文档](https://tensorbay-python-sdk.graviti.com/en/stable/)
5. Evaluator 中需要有获取整体标注评分的方法 get\_result() -> dict
6. 以上两个方法的返回值需满足以下结构:（当前仅支持float和curve两种类型的数据）

## 代码示例

### 目录结构示例

```python
(yourgithubrepo_root) 
    -- __init.py 
    -- Evaluator.py 
    -- requirements.txt
```

### **init**.py示例

```python
from .Evaluator import Evaluator
all = ["Evaluator"]
```

### requirements.txt示例：

```python
numpy=1.21.0
```

### Evaluator.py示例

````python
import numpy as np

class Evaluator:
   def __init__(self):
       """
       You can initialize your model here
       """
       ...


   evaluate_one_data(self, input_source: dict， input_target: dict) -> dict:
       """
       Do the evaluation job
       :param input_source: Ground truth boxes in one image
       :param input_target：Target boxes in the same image
       :return: A dict containing evaluation on one image and each category within it.
       """
       ...
   def get_result(self) -> dict:
       """Overall evaluation.


       Returns:
           A dict containing overall evaluation on all images and all categories.
       """
```
{
   'scope':1,//1-data级别；2-dataset级别
   'overall': {
       'mAP':0.123, // Float类型返回
       'pr':{  // Curve类型返回
             'x':[1,0.5],
             'y':[1,0.5]//x数据将在前端渲染为横轴数据，y数据将在前端渲染为纵轴数据，x和y均为list，且长度一致。
            }
   },
   'categories': {
       '{your_category}': {
            'mAP': np.mean([1, 2, 3]).tolist(),
       }
   }
}

````


# 参与评估

您可以通过Sextant参与您和您的团队成员创建的评估，支持通过使用TensorBay数据集和使用模型两种参与模式

{% hint style="info" %}
若您对评估的基准数据没有使用权限，请在参与时根据提示申请相应权限
{% endhint %}

## 使用TensorBay数据集参与评估

在Sextant评估列表页找到需要参与的评估，点击【查看】进入对应评估的详情页面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4quTo8Tm0qjAps8qQ%2Fimage.png?alt=media\&token=3255cdde-d100-4aa7-9aa7-85d83a95f551)

在评估的详情页面点击右上角的【参与评估】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4r1ydqvlve5IKkFjE%2Fimage.png?alt=media\&token=51b0f62c-e484-456f-a3ae-db140c70ed18)

在弹窗中选择【从TensorBay选择数据】，然后选中需要参与评估的数据集和对应的版本，点击确定后，评估将会自动开始，此时系统会自动生成一条评估记录

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4rkVU8S33cLPxwT02%2Fimage.png?alt=media\&token=b7472f61-064b-4319-a41f-7f22af56fb64)

{% hint style="info" %}
评估的状态分为评估中、已完成和已失败三种，如评估失败，请查看评估日志排查问题后重试，如需帮助，请向我们[反馈](https://www.graviti.cn/forum/support)
{% endhint %}

## 使用模型参与评估

在Sextant评估列表页找到需要参与的评估，点击【查看】进入对应评估的详情页面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4qwEtBhkW76R1bMay%2Fimage.png?alt=media\&token=5ec5b7d4-f588-46fb-89fd-8eecd5221181)

在评估的详情页面点击右上角的【参与评估】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4r3cGxqPRKYNt7Lxt%2Fimage.png?alt=media\&token=b9a1a902-36ae-4dd2-9b79-051591909d5b)

在弹窗中选择【从Github导入模型】，然后填写对应的GitHub Repo URL，例如<https://github.com/Graviti-AI/tensorbay-python-sdk.git> 点击确定后，评估会自动开始，此时系统会自动生成一条评估记录

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4rqr-cHq_opJlat0t%2Fimage.png?alt=media\&token=6d3ea277-4791-4919-81c1-bb9101b1920d)

### 如何准备适用于Sextant的算法模型 <a href="#code" id="code"></a>

&#x20;1.首先准备好需要用于评估的算法，并验证其可用

2.按照以下结构编写python代码：

* python 库中有且只有一个名为 Predictor 的 class
* Predictor 类中存在 predict() 方法，返回值请参考[graviti 标准化文档](https://tensorbay-python-sdk.graviti.com/en/stable/reference/label_format.html#box2d)
* 算法所依赖的模型须能被该算法使用

```python
class Predict:
    def __init__(self):
        """
        You can initialize your model here
        """
        ...
    def predict(self, img_data: bytes) -> Dict[str, Any]:
        """
        Do the predict job
        :param img_data: the binary data of one image file
        :return: the predict result
        """
        ...

"""
2D框返回值示例

{
    "BOX2D": [
        {
            "box2d": { "xmin": 1, "ymin": 2, "xmax": 3, "ymax": 4 },
            "category": "cat"
        },
        {
            "box2d": { "xmin": 5, "ymin": 4, "xmax": 6, "ymax": 9},
            "category": "dog"
        }
    ]
}
"""
```

3.详细信息请参考[示例说明](https://github.com/AChenQ/ssd-detection/blob/master/predict/predictor.py)

4.将代码文件上传到Github，并复制.git链接粘贴至Sextant参与评估

{% hint style="info" %}
如果您的代码依赖于某个模型，请保证您的模型能被代码顺利访问
{% endhint %}

## 查看评估日志

Sextant将会记录评估过程中的系统运行日志，以供用户了解评估过程情况并解决可能出现的BUG，查看方法如下：

在Sextant评估列表页找到需要查看的评估，点击【查看】进入对应评估的详情页面

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4rSCP79rJrlMlszlE%2Fimage.png?alt=media\&token=2a40d42e-b6d6-4876-b442-82a8c3f9ad70)

在页面下方的评估参与记录中找到需要查看日志的记录，点击右侧的【日志】按钮

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4pjfCdDqgugrx5XdG%2F-Mg4rEhc6CUNQtz7JmR0%2Fimage.png?alt=media\&token=8257fde0-950d-4663-ae54-c338071d54fa)

在弹窗中选择需要查看日志的步骤，对应的日志信息将会显示在右侧

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-MgLMuZuG7PDsrYsyuCE%2F-MgLMxQKZwe7MrSs1sU4%2Fimage.png?alt=media\&token=0240acf3-4bb1-4ef4-a03c-52ee4d7ae98b)


# 查看评估结果

在评估完成后，可查看对应评估的结果指标，并支持横行的对比各次评估记录之间的指标值

{% hint style="info" %}
仅有已完成状态的评估支持查看评估结果
{% endhint %}

## 横向对比各次评估 <a href="#compare" id="compare"></a>

进入需要查看记录指标的评估详情页，各次记录的评估指标将显示在评估记录列表汇中，支持通过Metrics进行排序，查看各次评估结果的指标情况

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4s1DLpOPF8MFoESD9%2F-Mg4sk69erduHrgQ4j1o%2Fimage.png?alt=media\&token=348e1be4-9a4e-4bb6-94b3-0d8c5563a23f)

## 查看数据列表 <a href="#list" id="list"></a>

在评估参与列表中找到对应的参与记录，点击【查看】进入数据列表。在数据列表中可查看各数据中各标注标签下的评估指标，点击右上角标签可切换展示评估指标和数据可视化

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4s1DLpOPF8MFoESD9%2F-Mg4ssW5l0NZZ07gLMrK%2Fimage.png?alt=media\&token=3629330a-1458-490c-9293-58141f4e7f64)

## 查看评估指标 <a href="#metrics" id="metrics"></a>

展示当前列表中所有数据的总体评估指标，包括mAP数值以及对应的PR曲线，当使用两个数据集进行评估时，PR曲线仅有一个点

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4s1DLpOPF8MFoESD9%2F-Mg4tNPdTnzQQuIMh1dE%2Fimage.png?alt=media\&token=dbf854c2-c701-4db2-a9f8-166ba90bcab7)

## 查看数据可视化 <a href="#visualization" id="visualization"></a>

数据可视化：可视化展示评估的基准数据与参与评估的对象数据之间的标注情况，帮助您洞察数据的真实情况。在可视化中只会展示参与标注的数据，其中基准数据的标注将用实线框显示，参与评估的对象数据的标注将用虚线框显示

{% hint style="info" %}
如果评估已失效，将无法查看数据可视化
{% endhint %}

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4s1DLpOPF8MFoESD9%2F-Mg4tUe0bhEgPLNyiBOa%2Fimage.png?alt=media\&token=eab46d5a-cb39-466a-9a95-8c627badad56)

## 对数据进行筛选 <a href="#filter" id="filter"></a>

![](https://1609727380-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGHaHpCAkpKvpxq5ZJn%2F-Mg4s1DLpOPF8MFoESD9%2F-Mg4tcgez_nXHmyp0KkC%2Fimage.png?alt=media\&token=8da00e3b-7a02-4923-bbc1-fa22f35c3cc2)

在数据列表页面，可针对评估的Metrics结果进行筛选，支持通过各标签类型的IoU均值和ap值进行筛选，筛选结果将经过离线处理后显示，支持通过列表查看、可视化查看数据情况以及查看评估指标信息，离线处理所需的时间取决于筛选数据量的大小。

{% hint style="info" %}
除未添加任何筛选条件，直接输出全量数据外，输出创建的新数据集将不包含本次评估的Metrics结果
{% endhint %}


# 更新日志

## 2022-04-21

格物钛数据平台优化：

* 更新搜索记录新状态，添加搜索结果保存功能，需利用已保存的搜索结果创建数据集。

## 2022-04-15

格物钛数据平台优化：

* 修复了部分页面的手机端适配问题

Python SDK新功能:

* 支持以下基础搜索任务:
* 实现了\`BasicSearchJob\`类
* 实现了\`BasicSearch\`类
* 实现了\`SearchResult\`相关类
* 支持批量上传标签
* 新增了公开数据集 loader \`HKD\`

&#x20;Python SDK问题修复：

* 修复了\`nuImages\`dataloader中不正确的父类别名称
* 修复了\`nuImages\`dataloader中不正确的Frame创建方法
* 删除了\`VGGFace2\`dataloader中category名字中的空格
* 修复了\`Job.update\`中的\`NoneType\`错误
* 删除了\`CarConnection\`dataloader中远程路径中的空格
* 在异步任务系统中添加了缺失任务类型

Python SDK优化：

* 在\`nuImages\`dataloader的属性名称中用\`-\`替换\`.\`
* 将 "retry "方法从\`Job\`移至\`SquashAndMergeJob\`
* 完善了调用未实现的\`get\_callback\_body\`方法时的错误信息

Python SDK文档:

* 添加了关于 "BasicSearch "和 "SearchResult "的文档
* 使用了Sphinx的 "List Table "指令来生成表格
* 调整了 "Advanced Features "的 "Fusion Dataset" 章节的结构
* 完善了文档

## 2022-03-30

格物钛数据平台优化：

* 数据集活动页面增加引用记录页签，分别记录通过此数据集fork新建和筛选新建的数据集
* 优化了用户注册登录流程

## 2022-03-18

格物钛数据平台优化：

* 针对阿里云用户，授权存储配置方式新增通过授权RAM配置，提高了数据存储的安全性
* 修复了标注平台的相关问题

## 2022-03-10

格物钛数据平台新功能：

* 新增算力资源管理功能，后台将对相关功能（包括离线筛选、跨版本对比、Action自动化、Sextant模型评估、Squash\&Merge功能）所消耗的算力进行计算。算力资源使用情况将展示在dashboard控制台页面和资产页面，便于您及时查看和管理
* 应用市场新增第三方应用【深度赋值-全自动AI中台】，可以全自动、端到端地生产AI，帮助您低成本走上智能化快车道

格物钛数据平台优化：

* 优化数据集版本管理功能，将版本管理概念和版本管理功能在同一个页面下统一管理，帮助您明晰概念间的层级关系，简化您的使用流程

## 2022-02-15

格物钛数据平台优化：

* 修复了数据容量统计的相关问题
* 优化了格物钛国际版登陆界面
* 自动化工作流定时trigger新增Crontab封装下拉框组件；优化了输入框，支持输入特殊字符“?”“ \”

## 2022-01-24

格物钛数据平台新功能：

* action自动化工作流新增定时trigger功能，支持工作流按schedule自动运行
* 官网首页新增活动报名模块

格物钛数据平台优化：

* 数据看板优化，支持按月份筛选
* Sextant模型评估文案优化
* 【管理数据】功能优化，支持当页全选
* 官网首页【安全体系认证】文案及图标更新
* GroundTruth\&TeraGood【选择数据集】页面优化

&#x20;Python SDK新功能:&#x20;

* 新增了公开数据集 loader VGGFace2&#x20;

&#x20;Python SDK问题修复:&#x20;

* 修复了在多进程环境中读取缓存文件失败的问题
* 修复了 `Job.started_at` 未被更新的问题&#x20;
* 修复了使用numpy数组初始化PointList2D和RLE时的ValueError&#x20;
* 修复了Job.update中的NoneType错误

Python SDK优化:&#x20;

* 移除多进程锁并添加pid到缓存文件路径&#x20;

Python SDK文档:&#x20;

* 将Sphinx的html主题改为“furo”
* 优化了docstring

## 2021-12-30

格物钛数据平台新功能：

* 在应用市场页面内新增了服务商模块，可在该模块中查看服务商详情

格物钛数据平台优化：

* 优化了跨版本Compare功能，现支持通过branch和tag选择对应commit进行跨版本对比

&#x20;Python SDK新功能:&#x20;

* 实现了以下异步任务框架&#x20;
  * 实现了 `JobMixin._create_job`&#x20;
  * 实现了 `JobMixin._get_job`&#x20;
  * 实现了 `Job.update`&#x20;
  * 实现了 `JobMixin.delete_job`&#x20;
  * 实现了 `Job.retry` and `Job.abort`&#x20;
  * 实现了 `JobMixin._list_job`&#x20;
* 通过异步任务框架实现了以下有关“Squash And Merge”的功能&#x20;
  * 实现了 `SquashAndMerge.create_job`&#x20;
  * 实现了 `SquashAndMerge.delete_job`&#x20;
  * 实现了 `SquashAndMerge.get_job`&#x20;
  * 实现了 `SquashAndMerge.list_job`&#x20;
  * 实现了 `SquashAndMergeJob.result`&#x20;
* 新增了以下公开数据集 loader:&#x20;
  * `CityscapesGTFine`&#x20;
  * `CityscapesGTCoarse`
  * `RarePlanesReal`&#x20;
  * `RarePlanesSynthetic`&#x20;
  * `UrbanObjectDetection`&#x20;

Python SDK优化:&#x20;

* 从OpenAPI `getDataDetails` 中获取 Mask url 以减少请求数量&#x20;

Python SDK文档:&#x20;

* 更新了“Features”一章中有关“Squash And Merge”的文档&#x20;
* 优化了文档&#x20;
* 优化了 docstring

## 2021-12-17

Python SDK问题修复：&#x20;

* 修复了url过期时 `RemoteFileMixin._urlopen()` 失败的问题

## 2021-12-16

格物钛数据平台新功能：

* 在Action中增加了密钥功能，用户可在设置中配置自己的密钥，密钥可以在Action Yaml文件中使用。(该功能仅管理员可用)

Python SDK新功能:&#x20;

* 增加了下列接口用以与App Sextant通信
  * `Sextant.list_benchmarks`&#x20;
  * `Sextant.list_evaluations`&#x20;
  * `Sextant.create_evaluations`&#x20;
  * `Evaluation.get_result`&#x20;
* 为 `BDD100K_MOTS2020` 数据集增加了 `SemanticMask`&#x20;
* 为Draft添加了 `author`、`updated_at` 和 `parent_commit_id`&#x20;
* 为CLI `gas log`  增加了 `--show-drafts` 以显示open drafts

Python SDK优化:&#x20;

* 移除了`BDD100K` 数据集中的冗余属性&#x20;
* 将 `VersionControlClient` 升级为 `VersionControlMixin`&#x20;
* 在 `opendataset`  模块中使用 `stem` 表示没有扩展名的文件名

Python SDK问题修复:&#x20;

* 将丢失的 `categoryDelimiter` 添加到 `OxfordIIITPet` catalog中&#x20;
* 修复了 `listMaskUrls` 中的 `NoneType` 问题&#x20;
* 修复了调用 `mocker` 类方法时出现的 `AttributeError`&#x20;
* 更正了 `nuImages` catalog中错误的属性名称

Python SDK文档:&#x20;

* 在 `INTEGRATIONS` 一章中添加了有`PaddlePaddle` 的说明&#x20;
* 在 `Applications` 一章中添加了有关 `Sextant` 的文档
* 在 `Advanced Features` 一章中重构了 `Storage Config` 相关内容
* 现支持通过 `make clean` 删除自动生成的rst文件&#x20;
* 优化了docstring

## 2021-12-07

Python SDK问题修复:&#x20;

* 修复了使用 `Profile` 时由于位置参数不匹配而导致的 `TypeError`&#x20;
* 修复了在多进程环境下读取数据时请求超时的问题

## 2021-12-03

格物钛数据平台新功能：

* 新增数据看板，支持用户查看各工作空间的数据储存容量及流量使用状况

格物钛数据平台优化：

* 新建数据集流程和交互体验优化
* Action功能优化，增加manual选项、YAML代码模板、工作流停止功能（此功能仅限团队管理员可使用）

Python SDK新功能:&#x20;

* 为CLI `gas branch` 和 `gas tag` 添加`--sort`，以支持对分支和标签进行排序&#x20;
* 支持在 `Profile` 类中为 \`Data.open().read()\` 记录统计信息
* 添加 `StorageConfig` 类来存储存储配置信息&#x20;
* 添加 `SegmentClient.get_data` 通过其 `remote_path` 获取数据信息&#x20;
* 支持在 CLI `gas ls` 中通过 `remote_path` 显示一份数据&#x20;

Python SDK优化: &#x20;

* 添加 `URL` 类来获取和更新文件url&#x20;
* 在 `DAVIS2017` 的 segment 名中添加 `train`, `val` 和 `test`&#x20;

Python SDK问题修复:&#x20;

* 修复了并分支时CLI `gas log`中出现的错误图形&#x20;
* 在 `COCO2017` catalog中添加缺失的 `categoryDelimiter`&#x20;
* 修复了在多进程环境下使用缓存时出现`FileExistsError`问题&#x20;

Python SDK文档:&#x20;

* 在API一章的 `opendataset` 模块中使`autosummary` 来生成 `rst` 文件&#x20;
* 优化文档&#x20;
* 优化docstring

## 2021-12-01

Python SDK优化:&#x20;

* 使 `tensorbay.client.config` 中的 `timeout` 设置对 `urlopen`生效

## 2021-11-17格物钛数据平台新功能：

* 在pc端和移动端新增客服入口，用户可通过企业微信咨询问题。

格物钛数据平台优化：

* Apps市场显示与交互优化
* 数据看板优化

Python SDK新功能:&#x20;

* 新增启用缓存时对可用存储空间的检查和警告&#x20;
* 新增以下公开数据集loader:&#x20;
  * `SCUT_FBP5500`&#x20;
  * `DAVIS2017`&#x20;

Python SDK优化:&#x20;

* 为`open()`函数添加参数`encoding='utf-8'`使其兼容Windows系统&#x20;
* 使用`xmltodict`代替`ElementTree`来解析xml文件&#x20;
* 添加文件`’tensorbay/py.typed`以符合PEP-561&#x20;

Python SDK问题修复:&#x20;

* 修复url过期时，`Data.open()`方法捕获异常失败的问题&#x20;

Python SDK文档:&#x20;

* 重构“版本控制”章节&#x20;
* 修复文档中的拼写错误&#x20;
* 优化文档&#x20;
* 优化文档字符串&#x20;

Python SDK弃用:&#x20;

* 删除已弃用的方法`GAS.create_auth_dataset`

## 2021-11-02

TensorBay问题修复：

* 修复了一些已知的问题，优化用户体验

Sextant优化：

* 为评估失败的数据集，增加【重试】操作，允许再次参加评估

Python SDK新功能：&#x20;

* 支持在 `GAS.create_dataset`中设置 `is_public`&#x20;
* 支持把s云文件导入到融合数据集中
* 打开远程数据时支持缓存&#x20;
* 添加`DatasetClientBase.get_total_size` 以获取数据集某个commit的文件总大小&#x20;
* 添加 `VersionControlClient.squash_and_merge` 以合并两个不同branch

Python SDK优化：&#x20;

* 使用 `os.path.expanduser` 来处理不同系统中的CLI配置文件路径&#x20;
* 在SDK python文件中使用绝对引用替换相对引用
* 删除 `ls.py` 中关于commit和draft的无用检查&#x20;
* 在所有tensorbay Open的API请求头中添加 `X-Request-Id`&#x20;
* 在CLI `gas cp` 中添加上传过程中断时的详细恢复信息

&#x20;Python SDK问题修复：&#x20;

* 为加载包含全景分割标注的数据时出现 \`IndexError \`添加了变通方案
* 删除没有提供 \`tbrn\`时\`gas dataset\`中出现的错误报错信息&#x20;

Python SDK文档：&#x20;

* 添加关于数据缓存的文档&#x20;
* 添加在远程服务器上使用 `pharos` 的文档&#x20;
* 完善文档

## 2021-10-18

Python SDK新功能：&#x20;

* 在调试日志中显示请求耗时&#x20;
* 使用 `response.elapsed` 获取 `profile`中的请求耗时&#x20;
* 添加 `DatasetClientBase.get_label_statistics` 以获取标注统计信息&#x20;
* 支持在url过期时更新文件的url&#x20;
* 添加公开数据集loader `SegTrack2`

Python SDK优化：

* 合并`ContextInfo`中所有与配置相关的函数&#x20;

Python SDK性能：&#x20;

* 适配OpenAPI `getDataDetails`以提高读取标签和url的速度&#x20;
* 在cloud-callback OpenAPI中上传授权云存储数据的标签以提高上传速度&#x20;

Python SDK文档：‌&#x20;

* 在“更新数据集”部分中添加“更新数据集Note”章节
* 在“云存储”中添加关于授权云存储文件原地导入的文档
* 在“Get label statistics”中添加关于获取标注统计信息的文档&#x20;
* 重构“版本控制”章节&#x20;
* 完善文档

## 2021-09-28

TensorBay功能优化：

* 手机端公开数据集详情页新增讨论入口
* 数据列表搜索功能交互优化
* 应用市场页面优化，新增应用分类模块

Python SDK新功能：

* 支持在`VersionControlClient.list_drafts中`通过`status` 和 `branch_name`筛选drafts
* 增加`Profile`类来记录SDK中HTTP请求的统计信息
* 支持在进程环境中使用`Profile`
* 支持以`csv`, `txt`或`json`格式保存 `Profile`结果
* 新增以下与BDD100K相关的公开数据集loaders&#x20;
  * `BDD100K`
  * `BDD100K-10K`
  * `BDD100K-MOT`
  * `BDD100K-MOTS`
* 新增以下公开数据集 loaders&#x20;
  * `SegTrack`
  * `COCO2017`
* 统一CLI中提示信息的格式

Python SDK问题修复：

* 修复了无法从`opendataset`模块中导入数据集loader`LIP`和`CIHP`&#x20;

  的问题
* 更正`LIP`数据集loader的visable值

Python SDK优化：

* 统一`directory`和`tbrn`的变量名
* 使用`ValueError`, `StatusError`来代替 `OperationError`&#x20;

Python SDK文档：

* 添加关于`SemanticMask`和`InstanceMask`的示例
* 为不同的标签类型添加catalog结构
* 添加介绍如何使用`Profile`的文档
* 修复文档中的拼写错误
* 完善文档

Python SDK弃用：

* 移除已弃用的类`ResponseSystemError`

## 2021-09-14

Sextant新功能：

* 支持通过上传Github Repo Url来自定义Metrics
* 新增可参与评估的数据类型

TensorBay优化：

* 支持通过Python SDK合并数据集来新建数据集

Python SDK新功能：

* 支持在`GAS.create_dataset`中创建不同云存储配置的数据集
* 添加以下方法，为不同的云服务创建自定义云存储配置
  * `GAS.create_oss_storage_config`
  * `GAS.create_s3_storage_config`
  * `GAS.create_azure_storage_config`
* 添加`GAS.delete_storage_config`来删除自定义云存储配置
* 启用`SegmentClient.delete_data`方法来删除数据
* 添加`FusionSegmentClient.delete_frame`来删除frame
* 支持获取和更新数据集`isPublic`的标识符
* 新增以下公开数据集loaders
  * `CIHP`
  * `VOC2012Segmentation`
  * `PASCALContext`
  * `LIP`
  * `OxfordIIITPet`
  * `nuImages`
* 在CLI中打印更友好的报错信息

Python SDK接口调整:

* 在`VersionControlClient.list_commits`中设置当前版本为默认版本
* 禁用以`FusionSegmentClient.delete_data`方法删除融合数据集中的数据

Python SDK优化：

* 禁止在`VersionControlClient.close_draft`中关闭当前draft
* 避免在`FusionDatasetClient.upload_segment`中`skip_upload_files`为`False`时获得`done_frames`

Python SDK文档:

* 添加关于“更新数据集元信息”的文档
* 添加关于“删除框架”的文档
* 修复文档中的拼写错误
* 细化文档

Python SDK弃用:

* 删除v1.10.0之前的已弃用代码
* 废弃`GAS.create_auth_dataset`，使用`GAS.create_dataset`代替

## 2021-08-30

TeraGood新功能：

* 支持在TeraGood内对融合数据的标注进行修改

TensorBay优化：

* 数据列表从原本一维列表优化为为二维列表，其中囊括总表和子表。支持用户在数据列表上方进行切换版本、查看信息、搜索、查看catalog、show diff等一系列操作

Python SDK新功能：

* 新增 `DatasetClient.get_diff` 获取指定commit的diff
* `LabeledPolyline2D`现已支持Beizer曲线
* 在CLI`gas log`中显示彩色commits信息
* 添加公开数据集loader——`SVHN`

Python SDK问题修复:

更正`opendataset.VOC2012Detection`中的错误属性名

Python SDK优化：

* 重构异常系统
  * 重命名`ResponseSystemError`为`InternalServerError`
  * 新增`ForbiddenError`
  * 统一异常类的签名
  * 更改`NameConflictError`的状态码为409
  * 修复调用`ResponseError.response` 时的`AttributeError`
  * 添加`ContextInfo`类，避免在CLI模块中重复读取配置文件
* 检查`GAS.get_cloud_client`中的配置名称
* 删除检查catalog是否为空的无用代码
* 将`VOC2012Detection`和`VOC2012ActionClassificaion`的输入路径转换为绝对路径
* 删除`VOC2012Detection`和`VOC2012ActionClassification`的`trainval`segments

Python SDK文档:

* 添加关于diff的文档
* 添加“Beizer Curve”文档
* 添加关于“合并数据集”的文档
* 完善文档

## 2021-08-17

新功能：

* 数据存储配置支持个人用户选择不同的区域、团队用户选择不同的云平台或区域作为格物钛存储配置
* 新增数据使用流量统计功能，可在GAS主页以及资产页面查看已使用流量
* 新增标注平台内融合数据同步，即“我的标注”和“标注服务”支持通过2d/3d融合标注工具和【追踪】标注工具 ，并将标注完成的数据同步至Tensorbay
* 支持在Graviti首页预约产品Demo

优化：

* 支持在Action内选择、修改服务器配置并记录运行参数。 详细信息请查看文档：<https://docs.graviti.cn/guide/tensorbay/action>

Python SDK新功能:

* 支持Polygon、Polyline2D、SemanticMask 、InstanceMask和PanopticMask

  标签类型，以及五种新标签格式:

  * `Polygon` + `MultiPolygon` + `RLE`
  * `Polyline2D` + `MultiPolyline2D`
* 新增以下公开数据集loader:
  * `VOC2012Detection`
  * `VOC2012ActionClassification`
  * `CCPD & CCPDGreen`

Python SDK接口调整:

* 删除`GAS.create_auth_dataset`中的`path`参数，因为该`path`绑定云存储配置
* 删除`DataBase`、`Data`和`AuthData` 中的`loads`方法
* 添加`get_callback_body` 方法以取代`Data`中的`dumps`
* 添加`from_response_body`方法以取代`RemoteData`和`Frame`中的`loads`

Python SDK问题修复:

* 为在阿里云OSS上传文件时出现`MalformedPOSTRequest`的错误新增变通方案
* 为Windows系统中出现的中文显示乱码错误新增变通方案

Python SDK优化:

* 新增`FileMixin`和`RemoteFileMixin`以整合文件相关方法
* 支持在`AttrsMixin`中设置自定义loader和dumper
* 在`PointList2D.__init__` 中用列表生成式代替for循环
* 在`GAS.update_dataset`中将`None`设置为参数`alias`的默认值
* 更正`RP2K`数据集loader的非法远程路径
* 将moving segment逻辑封装到`DatasetClientBase._move_segment`中
* 将弃用相关类移到`deprecated.py`中
* 停止在`AttributeInfo .__repr__`中显示冗余字段`name`
* 清除以下无用代码:
  * 从标签相关的类中删除无用的类变量`_label_attrs`
  * 删除无用的类`SubcatalogTypeRregister`
  * 删除无用的类`LabelType`
  * 删除无用的`Subcatalogs`类型

Python SDK文档:

* 添加关于 `SemanticMask` 、`InstanceMask` 和`PanopticMask`的文档
* 在“CLI”章节中添加有关“Shell Completion”的文档
* 添加有关Polygon和Polyline2D新标签格式的文档
* 在CLI `gas config`中添加有关设置网络请求配置的文档
* 在CLI `gas log`中添加关于`--all`和`--graph`选项的文档
* 修复文档中的排版错误
* 完善文档

## 2021-08-04

新功能：

* 新增Sextant模型评估MVP，支持快速对数据和模型进行评估，洞察数据和模型精度，指导质量提升
* 新增高级搜索功能，用户可通过上传github url，此GitHub repo为用户用来搜索数据的代码文件，系统读取此github repo，并加载代码之后进行离线数据搜索
* 新增支持 2D Box 和 2D Polygon 在TeraGood和GroundTruth对已有的标注进行修改和质检

优化：

* 将数据搜索优化为离线处理，开始搜索后用户可查看搜索进度和结果，并可保存搜索结果进行新建数据集等其他操作

Python SDK新功能:

* 支持在`SegmentClient.move_data`中使用`override`和`skip`策略
* 新增`GAS.get_user`来获取当前用户信息&#x20;
* 支持操作数据集别名 -支持在`GAS.get_dataset`中获取数据集别名&#x20;
* 支持在`GAS.create_dataset`中设置数据集别名&#x20;
* 新增`GAS.update_dataset`来更新数据集别名
* 支持在CLI`gas draft`中设置和展示`description`&#x20;
* 在CLI`gas draft`中添加`--edit`选项来编辑draft&#x20;
* 在CLI`gas draft`中添加`--close`选项以关闭draft&#x20;
* 在`gas commit`的弹出编辑器中添加draft描述作为默认信息&#x20;
* 通过`gas rm`删除数据集中的数据或segment后显示相应消息

Python SDK接口调整:

* 更改`Transform3D.set_rotation`和`Sensor.set_rotation`的签名

Python SDK优化:

* 统一`gas draft`和`gas commit`中`description`的显示逻辑&#x20;
* 上传文件到云存储时，设置文件名为""
* &#x20;添加实用函数`chunked`将可迭代对象分割成长度为n的元组
* 将`urllib3`的最小版本设置回v1.15

Python SDK性能:

* 适配OpenAPI`multiCallback`来加速`GAS.upload_dataset`中融合数据集的文件上传 -发送文件大小到TensorBay来加速文件上传&#x20;
* 增加`multiCallback`的批大小来加速文件上传

Python SDK文档:

* 在CLI`gas draft`中添加关于`--edit`和`--close`选项的文档 -添加有关CLI“Profile”的文档 -优化文档 -修复文档字符串中的输入错误

Python SDK弃用:

* 删除`VersionControlClient.create_draft`中参数`title`的默认值&#x20;
* 删除`gas config`中有关设置AccessKey的弃用信息

## 2021-07-16

Python SDK问题修复:

* 修复CLI`gas log --oneline`单行显示所有commit的问题

Python SDK文档:

* 将CLI`gas draft`文档中的`-t`替换为`-m`
* 在复制和移动操作的文档中添加`strategy`详情
* 修复CLI `gas commit --help`帮助文档中`Synopsis`章节显示错误的问题
* 在移动数据的示例代码中使用批量移动代替逐个移动

## 2021-07-14

新功能：

* 通过diff功能对比不同版本数据的具体变化，支持查看draft与parent commit比较以及commit与parent commit比较，并支持对应的数据可视化和标签分布可视化
* &#x20;支持给每个数据版本添加或编辑多个tag，方便检索及使用

优化：

* Teragood 支持修改已有标注数据及对数据进行质检

Python SDK新功能:

* 添加`Data.get_url`来获取本地文件的`file://`形式的url
* 支持对draft进行更多操作
  * 为`Draft`类添加`status` 和 `description`
  * 添加`VersionControlClient.update_draft`来更新draft的`title` 和 `description`
  * 添加`VersionControlClient.close_draft`来关闭draft
  * 支持在`VesionControlClient.create_draft`中设置`description`
* 在CLI`gas draft`中增加`--message`选项来设置draft的`title` 和 `description`
* 添加`SegmentClient.list_urls` 和 `FusionSegmentClient.list_urls`来列出文件的URL
* 新增以下公开数据集的loader：
  * `UAVDT`
  * `CACD`
  * `AADB`
  * `COVID_CT`

Python SDK问题修复:

* 修复python 3.6中`import tensorbay`时出现的`ImportError`

Python SDK优化:

* 新增`shorten`函数以获取短的commit ID
* 将`CompCars`公开数据集中的`CLASSIFICATION`标签合并到`BOX2D`标签中
* 删除无用的`DatasetClient.import_all_files`接口
* 更正所有公开数据集loader中的非法segment名称
* 将自定义的`click`类从`cli/cli.py`移到`cli/custom.py`
* 停止在`Commit.__repr__`的打印结果中显示`description`
* 从`tensorbay`安装包中删除无用的`docs` 和 `test`模块

Python SDK性能:

* 适配OpenAPI `multiCallback`以提高`GAS.upload_dataset`中的文件上传速度
* 批量请求文件URL来提升`RemoteData.open`的性能

Python SDK文档:

* 在CLI `--help`输出的帮助文档中添加`Synopsis`章节
* 完善CLI相关文档
* 文档详情请查看

{% content-ref url="/pages/-MVswAwqM06e9u14wCwN" %}
[Broken mention](broken://pages/-MVswAwqM06e9u14wCwN)
{% endcontent-ref %}

弃用:

* 弃用CLI `gas draft`中的`--title`选项
* 删除弃用的CLI `gas create` 和`gas delete`
* 删除弃用的异常`CommitStatusError`

## 2021-06-29

新功能：

* 支持基于branch分支对数据集进行版本管理
* 支持使用draft编辑数据集以协同管理
* 新增Pharos可视化插件的操作引导
* 新增个人版私有数据集成员管理，支持分享“仅查看“权限
* 修复使用\`DatasetBase.keys()\`列出所有segment名字时遇到的AttributeError

优化：

* 优化数据集版本管理的性能和操作流程
* 优化Dashboard新手引导的交互与UI

Python SDK新功能

{% hint style="info" %}
因TensorBay进行重大重构，OpenAPI与SDK均无法向下兼容，因此低于v1.6.0版本的SDK已无法使用。 **请将SDK升级至v1.6.0或更高版本**
{% endhint %}

* 添加以下方法支持多分支的版本管理：
  * `DatasetClientBase.create_branch`
  * `DatasetClientBase.delete_branch`

    ​
* 支持在不同分支上创建draft
* `GAS.upload_dataset`支持在不同分支上传数据集
* 针对`BDD100K`公开数据集包含分类与2D框类型标注的部分添加dataloader

  ​
* 添加以下CLI命令：
  * `gas branch` 来创建、展示和删除分支
  * `gas tag` 来创建、展示和删除tag
  * `gas log` 来展示commit历史

    ​
* 以下CLI命令添加弹出式编辑器来编辑`title`和`description`：
  * `gas draft`
  * `gas commit`

    ​
* `gas commit`命令支持通过`-m`参数设置`description`

  ​

  接口调整:

  ​
* 默认segment名字由`""`修改为`"default"`
* 将`DatasetClientBase.create_draft`的`title`设为必填参数
* 在`CameraIntrinsics`类型中将私有属性修改为公开属性, 并将`distortion_coefficients`修改为动态属性
* 实现`NamedList`来替代`NameOrderedDict`
* 将`Notes.bin_point_cloud_fields`的类型修改为`list`
* 暂时禁用`SegmentClientBase.delete_data`方法

  ​

  优化:

  ​
* 重构上传数据的流程来适配TensorBay新的后端
* 在`commit`中使用`title` 和 `description` 替换 `message`
* 处理没有commit历史的分支的相关情况
* 修复`mypy`报出的类型提示错误
* `CameraMatrix.dumps`的结果不再包含值为0的`skew`属性
* CLI中添加`error()`函数来进行错误信息提示并退出程序
* 删除`GAS._list_datasets()`中无用的`need_team_dataset`参数
* 添加`DefaultValueDeprecated`进行函数内参数默认值的弃用
* 优化`AttrsMixin`属性框架
* 在以下模块与类型中应用`AttrsMixin`属性框架：
  * `NameMixin`类型
  * `sensor`模块
  * `label`模块
  * `dataset`模块
  * `client.struct`模块

    ​

    文档:

    ​
* 添加多分支版本管理的相关内容
* 添加`gas tag`, `gas branch` 与 `gas log`CLI命令的相关文档
* 更新版本管理相关函数的docstring
* 优化文档，详情请查看：

{% content-ref url="/pages/-MVswAwqM06e9u14wCwN" %}
[Broken mention](broken://pages/-MVswAwqM06e9u14wCwN)
{% endcontent-ref %}

## 2021-06-03

Python SDK更新：

* 修复使用\`DatasetBase.keys()\`列出所有segment名字时遇到的AttributeError

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-05-31

新功能：

* Pharos可视化插件支持显示Json类型文本文件

优化：

* 优化标签分布可视化插件列表模式的多级数据交互方式，现在可直接查看子级数据在整体数据中的分布情况

Python SDK新功能：

* 基于TensorBay版本管理重新设计并实现\`gas\`命令行工具：
  * \`TBRN\`添加对\`draft number\`和\`revision\`的支持
  * 添加\`gas dataset\`命令来创建、展示、删除数据集
  * 在\`gas ls\`命令中支持展示某一特定draft或revision的segments和data
  * 添加\`gas draft\`命令来创建和展示drafts
  * 添加\`gas commit\`命令来对draft进行commit操作
  * 添加\`gas cp\`命令来向draft中上传文件
  * 添加\`gas rm\`命令来删除draft中的segment和data
* 在上传过程被中断时，添加详细断点续传提示
* 添加\`ModuleImportError\`用于在缺失可选安装包时提示详细安装信息
* 实现\`DatasetBase.\_\_delitem\_\_\`，支持通过\`del\` 从数据集中删除segment
* 添加\`LISA Traffic Sign\`公开数据集dataloader

Python SDK问题修复:

* 修复调用\`UserSequence.index()\`当参数为序列中最后一个元素时遇到的\`ValueError\`

Python SDK优化:

* 删除\`KeypointsInfo\`中多余的类变量\`description\`
* 实现属性框架类\`AttrMixin\`
* 将\`TBRN\`类从\`utility\`模块移至\`cli\`模块
* 在下述类型中继承\`EqMixin\`来取代\`\_\_eq\_\_\`：
  * \`CameraMatrix\`
  * \`DistortionCoefficients\`
  * \`CameraIntrinsics\`

Python SDK文档更新:

* 重构命令行工具相关的文档
* 添加\`Integrations\`章节, 包含与\`PyTorch\`和\`TensorFlow\`集成的内容
* 优化文档内容并修订错误拼写

Python SDK弃用:

* 弃用命令行工具中的\`gas create\`与\`gas delete\`命令
* 弃用旧融合数据集的\`TBRN\`
* 删除以下弃用的接口：
  * 异常类型：
    * \`GASDatasetError\`
    * \`GASDatasetTypeError\`
    * \`GASException\`
    * \`GASPathError\`
    * \`GASResponseError\`
    * \`GASSegmentError\`
  * 以下方法中的\`start\`和\`stop\`参数
    * \`GAS.list\_dataset\_names\`
    * \`DatasetClientBase.list\_drafts\`
    * \`DatasetClientBase.list\_commits\`
    * \`DatasetClientBase.list\_tags\`
    * \`DatasetClientBase.list\_branches\`
    * \`DatasetClientBase.list\_segment\_names\`
    * \`SegmentClient.list\_data\_paths\`
    * \`SegmentClient.list\_data\`
    * \`FusionSegmentClient.list\_frames\`
  * 以下方法：
    * \`DatasetClientBase.list\_draft\_titles\_and\_numbers\`

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-05-17

新功能：

* 支持使用开发者工具调用Pharos可视化插件，对本地数据进行可视化，详情请查看[文档](https://tensorbay-python-sdk.graviti.com/en/latest/features/visualization.html)
* 数据集讨论功能正式上线，所有的公开数据集均可发布讨论贴，并新增@和点赞功能，可@数据集发布方或其他使用过与讨论过此数据集的用户参与讨论，并能对优质的讨论内容进行点赞
* 发布新版Dash Board，并新增新手功能引导，帮助用户快速了解平台各功能以及使用方法
* 新增工作流功能，用户可以通过建立工作流来监听数据集的变化，自动触发事先定义好的数据的处理程序，来快速搭建数据的自动化处理流程（**内测中**）

优化：

* 优化了标签分布可视化插件的UI和交互
* 优化了在数据筛选页面使用Pharos数据可视化插件的交互，可默认直接查看筛选条件中的标注类型

Python SDK新功能：

* 本地可视化插件\`pharos\`发布，可以通过\`pip3 install pharos\`安装：
  * Pypi: <https://pypi.org/project/pharos/>
  * 文档: 请[点击链接](https://tensorbay-python-sdk.graviti.com/en/v1.4.1/features/visualization.html)

Python SDK问题修复：

* 修复上传数据集时遇到的\`JSONDecodeError\`
* 修复在python3.6中使用\`CADC\`公开数据集的dataloader时遇到的\`AttributeError\`
* 修复续传融合数据集时遇到的\`AttributeError\`

Python SDK文档：

* 添加本地可视化插件\`pharos\`的文档

SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-05-15

Python SDK新功能：

* \`PagingList\`可变
* Make \`PagingList\` mutable, and follow \`MutableSequence\` protocol (#462, #472, #475)
* 在\`Dataset\`与\`Segment\`中支持远端数据懒加载：
* 在\`DatasetBase.\_\_getitem\_\_\`中支持通过名字获取segment
  * 使用\`segment = dataset\["test"]\`取代\`segment = dataset.get\_segment\_by\_name("test")\`来通过名字获取segment
  * 支持通过\`segment\_names = dataset.keys()\`获取所有segment的名字
* 添加以下方法以便在训练时进行\`category\`与\`index\`的转换
  * \`CategoriesMixin.get\_category\_to\_index\`
  * \`CategoriesMixin.get\_index\_to\_category\`
* \`ResponseError\`添加以下子类异常
  * \`AccessDeniedError\`
  * \`InvalidParamsError\`
  * \`NameConflictError\`
  * \`RequestParamsMissingError\`
  * \`ResourceNotExistError\`
  * \`ResponseSystemError\`
  * \`UnauthorizedError\`
* 支持在\`GAS.upload\_dataset\`中使用\`skip\_uploaded\_files\`进行融合数据集的断点续传
* 添加\`COVID-chestxray\`与\`nuScenes\`公开数据集的dataloader

Python SDK优化：

* 将命令行工具代码移至\`cli\`模块
* 在\`DatasetClientBase.\_\_init\_\_\`不再检查\`commit\_id\`以避免发送多余请求
* 在\`CompCars\`中修复可能未绑定的变量警告

Python SDK文档：

* 添加\`Update Dataset\`,\`Update Label\`和\`Update Data\`章节
* 为详细的response异常添加文档
* 在glossary中添加\`continuity\`和\`tracking\`的释义
* 更新读取远端segment的示例代码，使用懒加载的\`Dataset\`代替\`DatasetClient\`
* 优化文档及示例

Python SDK弃用：

* 弃用\`DatasetBase.get\_segment\_by\_name\`方法

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-05-10

Python SDK接口调整：

* 重命名以下异常：
  * \`TensorBayClientException\` -> \`ClientError\`
  * \`TensorBayOpendatasetException\` -> \`OpenDatasetError\`

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-05-06

新功能：

* 公开数据集列表页新增对于任务类型的筛选，便于快速找到所需数据集
* 支持修改数据集名称、URL和别名
* 新增新用户的基本信息填写引导，帮助用户完成基本信息填写
* 新增数据集讨论区，支持发布帖子对数据集进行讨论（内测中，目前可在[MINST](https://gas.graviti.cn/dataset/data-decorators/MNIST)、[BDD100K](https://gas.graviti.cn/dataset/data-decorators/BDD100K)、[nuScenes](https://gas.graviti.cn/dataset/motional/nuScenes)、[CityScapes](https://gas.graviti.cn/dataset/graviti-open-dataset/CityScapes)、[KITTI-Object](https://gas.graviti.cn/dataset/data-decorators/KITTIObject)、[CIFAR-10](https://gas.graviti.cn/dataset/data-decorators/CIFAR10)、[COCO](https://gas.graviti.cn/dataset/hello-dataset/COCO)几个数据集进行讨论）
* 新增公开数据集fork记录

优化：

* 优化了数据列表页的UI和交互，并增加了标注信息逻辑关系的选择
* 优化了可视化插件的UI和交互细节

Python SDK新功能：

* 实现遵循\`Sequence\`规范的\`PagingList\`, 用于从分页请求中懒加载数据
* 在以下方法中使用\`PagingList\`代替\`Iterator\`作为返回值：
  * \`GAS.list\_dataaset\_names\`
  * \`DatasetClientBase.list\_drafts\`
  * \`DatasetClientBase.list\_commits\`
  * \`DatasetClientBase.list\_tags\`
  * \`DatasetClientBase.list\_branches\`
  * \`DatasetClientBase.list\_segment\_names\`
  * \`SegmentClient.list\_data\_paths\`
  * \`SegmentClient.list\_data\`
  * \`FusionSegmentClient.list\_frames\`
* 支持通过授权云存储的方式创建数据集:
  * 添加 \`GAS.get\_auth\_storage\_config\`和\`GAS.list\_auth\_storage\_configs\`
  * 添加 \`GAS.create\_auth\_dataset\`
* 添加\`client.config\`来调整发送请求的相关设置
  * 支持调整请求的重试策略，如\`config.timeout\`, \`config.max\_retry\`等
  * 支持从云服务器内部endpoint上传或读取数据
* 构建TensorBay异常系统：
  * 添加\`TensorBayException\`作为TensorBay自定义异常的基类
  * 为\`opendataset\`模块添加\`NoFileError\`和\`FileStructureError\`
  * 为\`client\`模块添加\`CommitStatusError\`, \`ResponseError\`, \`DatasetTypeError\`和\`FrameError\`
  * 为命令行工具添加\`TBRNError\`
* 在数据集的\`Notes\`中添加\`bin\_point\_cloud\_fields\`属性来支持带有不同fields的bin格式的点云数据
* 在\`GAS.upload\_dataset\`和\`(Fusion)DatasetClient.upload\_segment\`中添加进度条显示上传数据的进度
* 添加\`HalpeFullBody\`和\`BioIDFace\`公开数据集的dataloader

Python SDK优化：

* 根据TensorBay最新的命名规则来更新公开数据集的名称
* 在\`Commit.\_\_repr\_\_\`中显示\`commit\_id\`
* 完善在返回状态码不符合预期时的错误信息
* 删除\`SentenceSubcatalog\`中重复读取\`lexicon\`的代码

Python SDK文档：

* 添加云存储相关文档
* 添加发送请求设置的相关文档
* 添加使用内部endpoint的相关文档
* 添加TensorBay异常系统的相关文档
* 添加的相关文档\`bin\_point\_cloud\_fields\`
* 在\`glossary\`中添加\`tag\`释义
* 完善文档以及docstring，并修正错误拼写

Python SDK弃用：

* 对与使用\`PagingList\`作为返回类型的方法弃用\`start\`和\`stop\`参数
* 弃用以下\`client\`模块中的自定义异常：
  * \`GASDataTypeError\`
  * \`GASLabelsetError\`
  * \`GASLabelsetTypeError\`
  * \`GASFrameError\`
  * \`GASResponseError\`

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-04-21

Python SDK问题修复：

* 修复当调用\`DatasetClientBase.create\_tag\`时传入\`revision\`参数遇到的\`UnboundLocalError\`
* 修复通过\`DatasetClient\`新建\`FusionSegment\`时遇到的\`KeyError\`

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-04-19

新功能：

* 可视化插件支持多种标注类型多选同时查看
* 新增数据集权限的申请与分享功能，用户可对无权限的数据集进行权限申请，同时数据集管理员可以通过分享数据集赋予其他用户对应数据集的权限
* 新增数据集权限与团队管理相关日志
* 新增数据集详情页面PythonSDK代码自动生成与API接口显示

优化：

* 优化了定价页面的UI

Python SDK新功能：

* 添加数据集版本管理相关的基本方法：
  * \`DatasetClientBase.create\_tag\`
  * \`DatasetClientBase.list\_tags\`
  * \`DatasetClientBase.get\_tag\`
  * \`DatasetClientBase.delete\_tag\`
  * \`DatasetClientBase.list\_branches\`
  * \`DatasetClientBase.list\_commits\`
  * \`DatasetClientBase.get\_draft\`
* 添加对连续数据集的支持
  * 添加\`Notes\`来存储数据集的基本信息
  * 添加\`DatasetClientBase.update\_notes\`
  * 添加\`DatasetClientBase.get\_notes\`
* 添加对融合数据集的支持
* 在多进程环境保证请求会话的安全
* 在SDK与CLI中添加相应信息支持事件跟踪
* 添加\`CADC\`公开数据集的dataloader
* dataset client添加\`create\_segment()\`方法
* 为\`Label\`添加\`\_\_eq\_\_\`方法

Python SDK优化：

* 将TensorBay网关修改为"gatewayv2"
* 在二元运算符相关方法中完善NotImplemented逻辑
* 在\`Client\`中添加对url是否以"https\://"的检查
* 为废弃方法实现\`Deprecated\`装饰器
* 添加依赖的最低版本限制

Python SDK文档：

* 添加数据集版本管理的相关文档
* 添加融合数据集的相关文档
* 添加数据集基础信息\`Notes\`的相关文档，以及连续性的相关内容
* 更新文档中的url
* 完善文档以及docstring，并修正错误拼写
* 在docstring中添加示例

Python SDK弃用：

* 弃用\`DatasetClientBase.list\_draft\_titles\_and\_numbers\`，使用\`DatasetClientBase.list\_draft\`代替

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-03-25

Python SDK新功能：

* 支持上传数据到Azure

Python SDK问题修复：

* 根据Graviti Open Dataset修正dataloader中的公开数据集名字

Python SDK文档：

* 完善文档以及docstring，并修正错误拼写
* 在CLI文档中删除url相关内容
* 更新文档以及"README.md"中的url
* 修正文档中的错误拼写

Python SDK更新日志详情请查看[TensorBay Python SDK Release Note](https://docs.graviti.cn/www.github.com/Graviti-AI/tensorbay-python-sdk/releases)

## 2021-03-24

新功能：

* 支持数据集可见性设置，可将数据集公开为公开数据集，或设置为私有数据集
* 支持创建团队和邀请团队成员
* 新增开发者个人主页和团队主页
* 数据列表新增筛选后的数据可视化
* 发布TensorBay Python SDK

优化：

* 平台交互、视觉整体升级，提高用户体验
* 优化新建数据集流程，统一筛选、合并、fork等多种方式创建数据集的入口

## 2021-02-19

新功能：

* 新增数据可视化插件2D KeyPoint类型数据支持

## 2021-02-01

新功能：

* 新增数据可视化sensor展示功能，在展示多传感器数据时直观展示数据对应的sensor名称
* 新增数据可视化浅色显示模式，用户可自由在深色和浅色两种显示模式切换

优化：

* 优化了数据可视化的UI、交互方式以及加载速度
* 优化了分布可视化的UI与交互方式

## 2021-01-25

新功能：

* 新增TensorBay上传数据时选择储存Bucket的所在区域功能
* 新增TensorBay云授权数据的版本管理功能，并支持授权AWS数据授权管理
* 新增标注集支持同类型且标签表相同的标注合并功能
* 新增用户反馈中的“已完结“状态

优化：

* 优化用户反馈中的文字、图片显示方式

## 2021-01-05

新功能：

* 新增TensorBay合并不同数据集中数据
* 新增标注同步后的数据集版本管理支持
* 新增反馈模块指定回复，可以对某一条留言进行指定回复
* 新增反馈模块回复弹窗的“不再提醒“功能

优化：

* 优化了反馈模块的移动端显示
* 优化标签分布可视化插件Attribute数据的统计模式

## 2020-12-21

新功能：

* 新增Graviti Open API，详情请见[Graviti Open API](https://docs.graviti.cn/dev-doc/tools/api-center)
* 新增标签分布可视化全屏功能

优化：

* 优化了标签分布可视化插件的UI
* 优化反馈看板的新增反馈用户体验

## 2020-12-02

新功能：

* 支持使用筛选数据方式创建新数据集
* 新建数据集时增加数据集类型、自定义标签功能
* 新增语音可视化功能，支持MP3和WAV两种类型，支持转录和分类两种标注类型
* 新增文本可视化功能，支持txt文件及其分类标注可视化
* 分布可视化新增数据标注中的属性统计信息可视化

优化：

* 优化删除数据的逻辑
  * 删除文件时会删除对应的标注
  * 删除的数据如已经被引用则不会删除原数据
  * 支持删除版本

## 2020-11-18

新功能：

* 新增通过云授权储存方式使用TensorBay
* 新增Graviti开发者工具菜单和Graviti开发者文档，展示SDK等工具的使用介绍
* 增加数据集API使用的代码示例
* 新增用户反馈看板，支持用户反馈意见与建议，并实时沟通，支持消息以微信公众号的方式推送
* 分布可视化插件新增饼图查看模式

优化：

* 优化帮助文档结构，突出开发者文档
* 优化官网UI和交互

## 2020-11-09

新功能：

* 数据集 & 标注集支持版本管理，数据集发布版本时包括原数据 & 标注数据
* 公开数据集支持fork，将公开数据集获取至GAS使用，可进行发布版本，上传数据等操作
* 新增可视化插件3D点云标注信息投影至对应2D图片、支持可视化查看Gzip压缩点云、3D视图选中标注框视角自动转向功能
* 新增数据分布可视化插件查看SubCategory功能
* 新增订单管理系统，提供购买团队版席位和扩充TensorBay容量服务

优化：

* 将账户类型优化为“开发者版“和团队版，详情请见链接

## 2020-10-19

新功能：

* TensorBay我的数据集支持原数据版本管理，支持创建版本，创建版本后可继续编辑修改数据集的数据
* 新增可视化插件左侧文件列表，快速定位和切换展示的文件
* 新增可视化2D Classification、3D类型、Tracking类型数据及其标注信息
* 新增可视化插件查看公开数据集中多个标注类型功能

优化：

* 优化了可视化插件分享至站外的返回功能
* 优化了GroundTruth我的标注订单发布页面UI

## 2020-09-14

新功能：

* 我的数据集支持用Segment筛选数据，显示数据列表
* 公开数据集的标注详情显示，支持列表和标签筛选，并支持可视化展示标注详情和标签分布
* GroundTruth支持终审绩效下载
* GroundTruth支持在项目终审或验收阶段提前下载项目产出的Json文件

## 2020-08-24

新功能：

* 公开数据集获取，用户可将公开数据集获取至GAS平台、查看、下载和用于可视化
* 数据可视化插件，支持2D矩形框、2D多边形和公开数据集的2D分类标注类型，可视化插件能查看数据标注质量，并支持分享到站外
* 数据分布可视化插件，可以查看数据集中的标签分布情况

## 2020-07-21

新功能：

* 新增Accesskey，使用PythonSDK时需要带入用户的Accesskey用于用户身份和权限识别
* 新增PythonSDK，用户可以通过PythonSDK上传数据集到GAS
* 标注集标签筛选，在数据集标注详情页可以根据标注标签对标注集进行筛选
* 支持在验收记录中对单个项目对Json文件进行下载

## 2020-07-06

新功能：

* 帮助中心，用户可以在帮助中心获取GAS的功能说明
* 企业版用户可以在TensorBay发布数据需求，获取或者提供数据

优化：

* 优化了平台的UI交互
* 优化首页布局和左侧导航栏的布局，突出TensorBay和GroundTruth两部分
* 将GAS平台的个人版更名为“社区版“，其中功能不变

## 2020-06-17

新功能

* 新增消息通知类型
  * 个人版用户被邀请至我的标注项目，会收到项目邀请消息，处理后，邀请用户会收到已接受/已拒绝的回复消息
  * 企业成员管理中，被邀请进入企业的用户会收到邀请消息，处理后，邀请用户收到已接受/已拒绝的回复消息

优化：

* 优化选择标注标签的交互，加入了英文名内容，并支持用户自定义标签的对应颜色

## 2020-05-28

新功能：

* 新增平台语言中英文转换，用户可以点击转换按钮自主转换中文和英文
* 新增标注委员会标注标准，标注委员会制定各个标注类型的标注标准，由此标注确定标注和质检、审核的质量
* 新增3种微信公众号通知类型
  * 我的标注所有任务完成，对项目创建人推送消息
  * 标注订单待确认，对订单创建人推送消息
  * 标注订单项目待验收，对订单创建人推送消息
* 新增标注完结报告，用户可在标注订单完成后，于订单详情页面进行下载，内容包含标签总数、准确率、验收记录、产能报告等
* 支持本地zip文件上传数据集，上传至GAS后自动解压保存

## 2020-05-13

新功能：

* 新增企业用户角色权限介绍界面，
* 企业用户邀请成员功能，企业用户可在企业成员管理界面邀请用户加入企业
* 新增企业用户管理和修改企业成员角色功能，企业管理员可以在企业成员管理页面进行管理
* 新增消息中心，平台将通过消息中心推送成员邀请、权限申请和项目进度提醒等消息
* 新增沙箱模型训练功能（内测中）详情请查看本本文档**沙箱训练**部分

优化

* 优化数据集管理查看，在数据平台点击数据查看后会自动转入标注平台进行查看
* 优化新建项目时的数据集选择界面，将数据集列表按照创建时间排序

## 2020-04-20

新功能：

* 在首页区分个人版与企业版用户，方便用户识别

优化：

* 优化了订单绩效数据打算法，现以框数作为统计单位

## 2020-04-16

新功能：

* 用户修改昵称，用户可在个人中心修改自己的昵称
* 新增非Chrome用户使用Chrome的提示，为保障用户体验，推荐使用Chrome浏览器

优化：

* 优化了登录界面的UI

## 2020-04-06

新功能：

* 新增查看试标样例功能，在确认订单时点击查看示标样例即可直接查看试标情况

优化：

* 优化了企业用户认证的文案引导，便于用户完成企业邮箱认证

## 2020-03-30

* 优化了手机短信验证码文案

## 2020-03-13

新功能：

* 用户自我注册功能，用户可在Graviti官网进行自我注册账号，注册后成为个人版用户，企业版用户请联系Graviti客服开通，暂不支持自我注册
* 用户认证功能，个人版用户在个人中心可以进行企业邮箱认证，认证后成为认证用户，可享受认证用户权益
* 新增我的标注功能，用户可以创建我的标注项目，最多邀请四位好友参与标注
* 新增企业人员角色管理，企业管理员可以在企业成员管理页面进行企业成员用户角色管理

优化：

* 优化发布订单流程，支持用户直接选择数据集发布订单

## 2020-02-29

新功能：

* 新增订单进度、订单产能、订单总金额数据显示
* 新增驳回记录功能，支持用户查看验收驳回的记录
* 新增需求解析反馈记录功能，支持查看订单所有的需求解析反馈和试标情况
* 新增服务流程介绍，在创建订单时，新增标注服务流程介绍

优化：

* 优化订单状态的描述语句
  * 优化前订单状态：订单解析中、待客户确认、客户已反馈、进行中订单、已完结订单；
  * 优化后订单状态：解析中、标注中、已完结，共三种。
  * 解析中：指用户完成解析确认前的订单，其中待确认的订单，订单右上角显示标签“待确认”
  * 标注中：指已确认未完成全部验收的订单，其中待验收的订单，订单右上角显示标签“待验收”。其中标注进度计算方式：已验收数据量/总数据量
  * 已完结：指已经完成全部流程通过验收的订单

## 2020-02-18

* 新增验收记录，支持用户查看验收的记录情况

## 2020-01-14

新功能：

* 新增绑定微信公众号进度提示功能，用户关注Graviti公众号并绑定GAS账号后，将收到项目进度的提示消息

优化：

* 优化标注数据导出的格式，将3D标注的相对坐标转换为绝对坐标，统一了数据标注的输出格式

## 2020-01-06

新功能：

* 新增标注平台订单直接链接数据平台数据集，用户在标注平台下订单时，可以直接选择数据平台中的数据集

优化：

* 优化项目编号，将原有的32位编码优化为更易用的短编码
* 优化项目绩效显示，将原有的项目进度优化为标注进度和质检进度分开显示，避免混淆
* 优化标注类型显示，将原有的icon显示优化为文本类型显示

## 2019-12-23

优化：

* 优化登陆界面的UI
* 优化项目列表的排列顺序，将原有的按项目编号排序优化为按项目创建时间排序


