华为OBS上传,与modelart添加标签--python

本人因工作需要所以使用华为ModelArt做初步的图片识别(本章讲到的内容只是数据的收集与打标签)

首先需要把本地的图片压缩与归类(这部有netcore完成)

python:

第一步:把压缩过的图片上传到对应的华为OBS:

这需要使用到华为的【modelarts.session】

 1 import time
 2 # 本地图片导入obs
 3 from modelartsapis import ModelArtsApis
 4 import os
 5 from modelarts.session import Session
 6 strtype=''
 7 session = Session(access_key='access_key', secret_key='secret_key', project_id='项目ID', region_name='服务器区域名称')
 8 filelist = os.listdir('d:/' + strtype + '/')
 9 for item in filelist:
10     session.obs.upload_file(src_local_file='本地文件路径’, dst_obs_dir='obs上面的文件夹路径')

上传成功后,需要把这些新上传的图片打上对应分类的标签。

以下内容请参考:https://support.huaweicloud.com/api-modelarts/modelarts_03_0004.html

第二步:因为需要创作ModelArt数据集对应的功能,需要获取token:

1  def gettokens(self):
2         # 获取华为云认证token
3         params = '{"auth":{"identity":{"methods":["password"],"password":{"user":{"name":"华为云的昵称","password":"账号密码","domain":{"name":"账号"}}}},"scope":{"project":{"id":"项目ID"}}}}'
4         r = requests.post('https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens', data=params)
5         print(r.text)
6         tokens = r.headers.get('X-Subject-Token')
7         print(tokens)
8         headers = {'X-auth-Token': tokens, 'Content-Type': 'application/json'}
9         return headers

第三步:拿到token后就需要同步到数据集,把刚刚上传上来的图片,同步到数据集中(记住这里HEAd里面需要带上刚刚获取到的token)

https://support.huaweicloud.com/api-modelarts/SyncDataSource.html

1  def asyncsamples(self, headers):
2         # 同步数据集
3         print("同步数据集")
4         samples = requests.post('https://modelarts.cn-north-4.myhuaweicloud.com/v2/{project_id}/datasets/{dataset_id}/sync-data', headers=headers)
5         print(samples.status_code)

第四步:获取刚刚同步上来未标注的样本,并且给他们打上对应的标签(标注)

https://support.huaweicloud.com/api-modelarts/modelarts_03_0402.html

 1     def getnonesamplelist(self, headers,types):
 2         # 查询未标注样本
 3         print("查询未标注样本")
 4         samples1 = requests.get(
 5             'https://modelarts.cn-north-4.myhuaweicloud.com/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples?sample_state=__NONE__&limit=100',
 6             headers=headers)
 7         json2 = json.loads(samples1.text)
 8         if json2['sample_count'] == 0:
 9             return
10         json3 = json2['samples']
11         str1 = '{"samples" : ['
12         str2 = ''
13         for aa in json3:
14             str2 += ',{ "sample_id" : "' + aa['sample_id'] + '", "labels" : [{ "name" : "' + types + '" }]}'
15         str1 += str2[1:] + ']}'
16         return str1

最后一步:更新刚刚标注的样本

1     def updatesamples(self, str1, headers):
2         print("批量更新样本标签")
3         samples2 = requests.put('https://modelarts.cn-north-4.myhuaweicloud.com/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples', headers=headers, data=str1)
4         # print(samples2.status_code)
5         return samples2.text
原文地址:https://www.cnblogs.com/huodetiantang/p/15151820.html