本人因工作需要所以使用华为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