华为云AI开发平台ModelArts创建图像分类数据集并进行标注任务_云淘科技

本节通过调用一系列API,以创建图像分类数据集并进行标注任务为例介绍ModelArts API的使用流程。

概述

创建数据集并进行标注的流程如下:

调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。
调用创建数据集接口创建一个图像分类类型的数据集。
调用查询数据集详情接口根据数据集ID查询数据集的详情。
调用查询样本列表接口根据数据集ID获取数据集的样本详情。
调用批量更新样本标签接口根据数据集ID和样本ID给样本添加标签进行人工标注。
调用查询数据集的统计信息接口查看数据集的标注统计信息。
当数据集使用完成或不再使用时,调用删除数据集接口删除数据集。

前提条件

已获取IAM的EndPoint和ModelArts的EndPoint。
确认服务的部署区域,获取项目名称和ID、获取帐号名和ID和获取用户名和ID。

已经准备好数据源,例如存放在OBS的“/test-obs/classify/input/cat-dog/”目录下。
已经准备好数据集的输出位置,用于存放输出的标注信息等文件,例如“/test-obs/classify/output/”。

操作步骤

调用认证鉴权接口获取用户的Token。

请求消息体:

URI格式:POST https://{iam_endpoint}/v3/auth/tokens

请求消息头:Content-Type →application/json

请求Body:

{
  "auth": {
    "identity": {
      "methods": ["password"],
      "password": {
        "user": {
          "name": "user_name", 
          "password": "user_password",
          "domain": {
            "name": "domain_name"  
          }
        }
      }
    },
    "scope": {
      "project": {
        "name": "cn-north-1"  
      }
    }
  }
}

其中,加粗的斜体字段需要根据实际值填写:

iam_endpoint为IAM的终端节点。
user_name为IAM用户名。
user_password为用户登录密码。
domain_name为用户所属的帐号名。
cn-north-1为项目名,代表服务的部署区域。

返回状态码“201 Created”,在响应Header中获取“X-Subject-Token”的值即为Token,如下所示:

x-subject-token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...

调用创建数据集接口创建一个图像分类类型的数据集。

请求消息体:

URI格式:POST https://{ma_endpoint}/v2/{project_id}/datasets

请求消息头:

X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…
Content-Type →application/json

请求body:

{
  "workspace_id" : "0",
  "dataset_name" : "dataset-f9e8",
  "dataset_type" : 0,
  "data_sources" : [ {
    "data_type" : 0,
    "data_path" : "/test-obs/classify/input/cat-dog/"
  } ],
  "description" : "",
  "work_path" : "/test-obs/classify/output/",
  "work_path_type" : 0,
  "labels" : [ {
    "name" : "Cat",
    "type" : 0,
    "property" : {
      "@modelarts:color" : "#3399ff"
    }
  }, {
    "name" : "Dog",
    "type" : 0,
    "property" : {
      "@modelarts:color" : "#3399ff"
    }
  } ]
}

其中,加粗的斜体字段需要根据实际值填写:

ma_endpoint为ModelArts的终端节点。
project_id为用户的项目ID。
X-auth-Token的值为获取到的Token值。

“dataset_name”为创建的数据集名称。
“dataset_type”为“0”表示数据集类型为图像分类。
“data_path”为数据源所在的存储路径。
“work_path”为数据集输出位置。
“labels”为数据集的标签列表,填写标签信息。

返回状态码为“201 Created”,响应Body如下:

{
    "dataset_id": "2MCIopOFu0bOmSxFkZ4"
}

“dataset_id”为新建的数据集ID,记录该值用于后续步骤。

调用查询数据集详情接口根据数据集ID查询数据集的详情。

请求消息体:

URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}

请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…

其中,加粗的斜体字段需要根据实际值填写,dataset_id为上一步记录的数据集ID。

返回状态码为“200 OK”,响应Body如下所示:

{
  "dataset_id" : "DINKm5SUIDhhGb1eWm3",
  "dataset_name" : "dataset-f9e8",
  "dataset_type" : 0,
  "data_format" : "Default",
  "next_version_num" : 4,
  "status" : 1,
  "data_sources" : [ {
    "data_type" : 0,
    "data_path" : "/test-obs/classify/input/cat-dog/"
  } ],
  "create_time" : 1605690595404,
  "update_time" : 1605690595404,
  "description" : "",
  "current_version_id" : "54IXbeJhfttGpL46lbv",
  "current_version_name" : "V003",
  "total_sample_count" : 10,
  "annotated_sample_count" : 10,
  "unconfirmed_sample_count" : 0,
  "work_path" : "/test-obs/classify/output/",
  "inner_work_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/",
  "inner_annotation_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/annotation/",
  "inner_data_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/data/",
  "inner_log_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/logs/",
  "inner_temp_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/temp/",
  "inner_task_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/task/",
  "work_path_type" : 0,
  "workspace_id" : "0",
  "enterprise_project_id" : "0",
  "workforce_task_count" : 0,
  "feature_supports" : [ "0" ],
  "managed" : false,
  "import_data" : false,
  "ai_project" : "default-ai-project",
  "label_task_count" : 1,
  "dataset_format" : 0,
  "dataset_version_count" : 3,
  "dataset_version" : "v1",
  "content_labeling" : true,
  "labels" : [ {
    "name" : "Cat",
    "type" : 0,
    "property" : {
      "@modelarts:color" : "#3399ff"
    }
  }, {
    "name" : "Dog",
    "type" : 0,
    "property" : {
      "@modelarts:color" : "#3399ff"
    }
  } ]
}

根据响应可以了解数据集详情,其中“status”为“1”表示数据集创建成功且状态正常。

调用查询样本列表接口根据数据集ID获取数据集的样本详情。

请求消息体:

URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples

请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…

其中,加粗的斜体字段需要根据实际值填写。

返回状态码为“200 OK”,响应Body如下所示:

{
  "sample_count" : 2,
  "samples" : [ 
        {
            "sample_id": "012f99f3cf405860130b6ed2350c2228",
            "sample_type": 0,
            "labels": [],
            "source": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
            "preview": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
            "metadata": {
                "@modelarts:source_image_info": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
                "@modelarts:import_origin": 0
            },
            "sample_time": 1623914750831,
            "sample_status": "UN_ANNOTATION"
        },
        {
            "sample_id": "0192f3acfb000666033a0f85c21577c7",
            "sample_type": 0,
            "labels": [],
            "source": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
            "preview": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
            "metadata": {
                "@modelarts:source_image_info": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
                "@modelarts:import_origin": 0
            },
            "sample_time": 1623914751076,
            "sample_status": "UN_ANNOTATION"
        }
    ]
}

根据响应可以了解数据集的样本数量,以及每个样本的详细信息,其中“sample_count”为“2”表示该数据集共有2个样本,记录“sample_id”(样本ID)用于后续人工标注。

调用批量更新样本标签接口根据数据集ID和样本ID给样本添加标签进行人工标注。

请求消息体:

URI格式:PUT https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples

请求消息头:

X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…
Content-Type →application/json

请求body:

{
  "samples" : [ {
    "sample_id" : "012f99f3cf405860130b6ed2350c2228",
    "labels" : [ {
      "name" : "Cat"
    } ]
  }, {
    "sample_id" : "0192f3acfb000666033a0f85c21577c7",
    "labels" : [ {
      "name" : "Dog"
    } ]
  } ]
}

其中,加粗的字段需要根据实际值填写:

“sample_id”为要标注的样本ID,为上一步记录的值。
“labels”为样本需要标注的标签。

返回状态码为“200 OK”表示标注成功,响应Body如下所示:

{
  "success" : true
}

调用查询数据集的统计信息接口查看数据集的标注统计信息。

消息请求体:

URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/stats

请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…

其中,加粗的斜体字段需要根据实际值填写。

返回状态码为“200 OK”,响应Body如下所示:

{
    "label_stats": [
        {
            "name": "Cat",
            "type": 0,
            "property": {
                "@modelarts:color": "#3399ff"
            },
            "count": 5,
            "sample_count": 2
        },
        {
            "name": "Dog",
            "type": 0,
            "property": {
                "@modelarts:color": "",
                "@modelarts:shortcut": ""
            },
            "count": 4,
            "sample_count": 3
        }
    ],
    "sample_stats": {
        "un_annotation": 10,
        "all": 15,
        "total": 15,
        "deleted": 0,
        "manual_annotation": 5,
        "auto_annotation": 0,
        "lefted": 15
    },
    "key_sample_stats": {
        "total": 15,
        "non_key_sample": 15,
        "key_sample": 0
    },
    "deletion_stats": {},
    "metadata_stats": {},
    "data_spliting_enable": true
}

根据响应可以了解数据集的标签统计信息、样本状态统计信息等。

当数据集使用完成或不再使用时,调用删除数据集接口删除数据集。

请求消息体:

URI格式:DELETE https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}

请求消息头:

X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX…
Content-Type →application/json

其中,加粗的斜体字段需要根据实际值填写。

返回状态码“204 No Content”表示数据集删除成功。

父主题: 应用示例

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家