云服务器内容精选

  • 示例代码 下面代码展示了如何对一个请求进行签名,并通过AisAccess发送一个HTTPS请求的过程: 代码分成两个类进行演示: ResponseProcessUtils:工具类,用于处理结果的返回。 ImageTaggingDemo:进行相关参数ak,sk,region的配置,访问 图像标签服务 的示例。 ResponseProcessUtils.java 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 package com.huawei.ais.demo; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import org.apache.http.HttpResponse; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cloud.sdk.util.Base64; import com.huawei.ais.sdk.util.HttpClientUtils; /** * 访问服务返回结果信息验证的工具类 */ public class ResponseProcessUtils { /** * 打印出服务访问完成的HTTP状态码 * * @param response 响应对象 */ public static void processResponseStatus(HttpResponse response) { System.out.println(response.getStatusLine().getStatusCode()); } /** * 打印出服务访问完成后,转化为文本的字符流,主要用于JSON数据的展示 * * @param response 响应对象 * @throws UnsupportedOperationException * @throws IOException */ public static void processResponse(HttpResponse response) throws UnsupportedOperationException, IOException { System.out.println(HttpClientUtils.convertStreamToString(response.getEntity().getContent())); } /** * 处理返回Base64编码的图像文件的生成 * * @param response * @throws UnsupportedOperationException * @throws IOException */ public static void processResponseWithImage(HttpResponse response, String fileName) throws UnsupportedOperationException, IOException { String result = HttpClientUtils.convertStreamToString(response.getEntity().getContent()); JSONObject resp = JSON.parseObject(result); String imageString = (String)resp.get("result"); byte[] fileBytes = Base64.decode(imageString); writeBytesToFile(fileName, fileBytes); } /** * 将字节数组写入到文件, 用于支持二进制文件(如图片)的生成 * @param fileName 文件名 * @param data 数据 * @throws IOException */ public static void writeBytesToFile(String fileName, byte[] data) throws IOException{ FileChannel fc = null; try { ByteBuffer bb = ByteBuffer.wrap(data); fc = new FileOutputStream(fileName).getChannel(); fc.write(bb); } catch (Exception e) { e.printStackTrace(); System.out.println(e.getMessage()); } finally { fc.close(); } } } ImageTaggingDemo.java 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 package com.huawei.ais.demo.image;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.serializer.SerializerFeature;import com.huawei.ais.demo.ResponseProcessUtils;import com.huawei.ais.demo.ServiceAccessBuilder;import com.huawei.ais.sdk.AisAccess;import com.huawei.ais.sdk.util.HttpClientUtils;import org.apache.commons.codec.binary.Base64;import org.apache.commons.io.FileUtils;import org.apache.http.HttpResponse;import org.apache.http.entity.StringEntity;import java.io.File;import java.io.IOException;/** * 图像标签服务的使用示例类 */public class ImageTaggingDemo {//// 图像标签服务的使用示例函数//private static void imageTaggingDemo() throws IOException {// 1. 图像标签服务的的基本信息,生成对应的一个客户端连接对象AisAccess service = ServiceAccessBuilder.builder() .ak("######") // your ak .sk("######") // your sk .region("cn-north-1") // 图像识别服务华北-北京一的配置 .connectionTimeout(5000) // 连接目标url超时限制 .connectionRequestTimeout(1000) // 连接池获取可用连接超时限制 .socketTimeout(20000) // 获取服务器响应数据超时限制 .build();try {//// 2.构建访问图像标签服务需要的参数//String uri = "/v1.0/image/tagging";byte[] fileData = FileUtils.readFileToByteArray(new File("data/image-tagging-demo-1.jpg"));String fileBase64Str = Base64.encodeBase64String(fileData);JSONObject json = new JSONObject();json.put("image", fileBase64Str);json.put("threshold", 60);StringEntity stringEntity = new StringEntity(json.toJSONString(), "utf-8");// 3.传入图像标签服务对应的uri参数, 传入图像标签服务需要的参数,// 该参数主要通过JSON对象的方式传入, 使用POST方法调用服务HttpResponse response = service.post(uri, stringEntity);// 4.验证服务调用返回的状态是否成功,如果为200, 为成功, 否则失败。ResponseProcessUtils.processResponseStatus(response);// 5.处理服务返回的字符流,输出识别结果。JSONObject jsonObject = JSON.parseObject(HttpClientUtils.convertStreamToString(response.getEntity().getContent()));System.out.println(JSON.toJSONString(JSON.parse(jsonObject.toString()), SerializerFeature.PrettyFormat));} catch (Exception e) {e.printStackTrace();} finally {// 6.使用完毕,关闭服务的客户端连接service.close();}}//// 主入口函数//public static void main(String[] args) throws IOException {// 测试入口函数imageTaggingDemo();}}
  • Token认证 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 Token在计算机系统中代表令牌(临时)的意思,拥有Token就代表拥有某种权限。Token认证就是在调用API的时候将Token加到请求消息头,从而通过身份认证,获得操作API的权限。 Token可通过调用获取用户Token接口获取,调用本服务API需要project级别的Token,即调用获取用户Token接口时,请求body中auth.scope的取值需要选择project,如下所示。 username、domainname 的获取请参考获取账号名和账号ID。password为用户密码。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "name": "username", // IAM 用户名 "password": "********", //密码 "domain": { "name": "domainname" //IAM用户所属账号名 } } } }, "scope": { "project": { "name": "xxxxxxxx" } } }} 获取Token 后,再调用其他接口时,您需要在请求消息头中添加“X-Auth-Token”,其值即为Token。例如Token值为“ABCDEFJ....”,则调用接口时将“X-Auth-Token: ABCDEFJ....”加到请求消息头即可,如下所示。 GET https://iam.cn-north-1.myhuaweicloud.com/v3/auth/projects Content-Type: application/json X-Auth-Token: ABCDEFJ.... 您还可以通过这个视频教程了解如何使用Token认证:https://bbs.huaweicloud.com/videos/101333 。
  • AK/SK认证 AK/SK签名认证、Token认证方式仅支持消息体大小12M以内的请求使用。 AK/SK认证就是使用AK/SK对请求进行签名,在请求时将签名信息添加到消息头,从而通过身份认证。 AK(Access Key ID):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 SK(Secret Access Key):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 使用AK/SK认证时,您可以基于签名算法使用AK/SK对请求进行签名,也可以使用专门的签名SDK对请求进行签名。详细的签名方法和SDK使用方法请参见API签名指南。 签名SDK只提供签名功能,与服务提供的SDK不同,使用时请注意。 AK/SK获取方式请参考获取AK/SK。
  • 状态码 状态码如表1所示。 表1 状态码 状态码 编码 错误码说明 100 Continue 继续请求。 这个临时响应用来通知客户端,它的部分请求已经被服务器接收,且仍未被拒绝。 101 Switching Protocols 切换协议。只能切换到更高级的协议。例如,切换到HTTPS的新版本协议。 200 OK 服务器已成功处理了请求。 201 Created 创建类的请求完全成功。 202 Accepted 已经接受请求,但未处理完成。 203 Non-Authoritative Information 非授权信息,请求成功。 204 No Content 请求完全成功,同时HTTP响应不包含响应体。 在响应OPTIONS方法的HTTP请求时返回此状态码。 205 Reset Content 重置内容,服务器处理成功。 206 Partial Content 服务器成功处理了部分GET请求。 300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择。 301 Moved Permanently 永久移动,请求的资源已被永久的移动到新的URI,返回信息会包括新的URI。 302 Found 资源被临时移动。 303 See Other 查看其它地址。 使用GET和POST请求查看。 304 Not Modified 所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。 305 Use Proxy 所请求的资源必须通过代理访问。 306 Unused 已经被废弃的HTTP状态码。 400 Bad Request 非法请求。 建议直接修改该请求,不要重试该请求 401 Unauthorized 在客户端提供认证信息后,返回该状态码,表明服务端指出客户端所提供的认证信息不正确或非法。 402 Payment Required 保留请求。 403 Forbidden 请求被拒绝访问。 返回该状态码,表明请求能够到达服务端,且服务端能够理解用户请求,但是拒绝做更多的事情,因为该请求被设置为拒绝访问,建议直接修改该请求,不要重试该请求。 404 Not Found 所请求的资源不存在。 建议直接修改该请求,不要重试该请求。 405 Method Not Allowed 请求中带有该资源不支持的方法。 建议直接修改该请求,不要重试该请求。 406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求。 407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权。 408 Request Timeout 服务器等候请求时发生超时。 客户端可以随时再次提交该请求而无需进行任何更改。 409 Conflict 服务器在完成请求时发生冲突。 返回该状态码,表明客户端尝试创建的资源已经存在,或者由于冲突请求的更新操作不能被完成。 410 Gone 客户端请求的资源已经不存在。 返回该状态码,表明请求的资源已被永久删除。 411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息。 412 Precondition Failed 未满足前提条件,服务器未满足请求者在请求中设置的其中一个前提条件。 413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息。 414 Request URI Too Long 请求的URI过长(URI通常为网址),服务器无法处理。 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式。 416 Requested Range Not Satisfiable 客户端请求的范围无效。 417 Expectation Failed 服务器无法满足Expect的请求头信息。 422 Unprocessable Entity 请求格式正确,但是由于含有语义错误,无法响应。 429 Too Many Requests 表明请求超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的Retry-After首部,然后等待该首部指出的时间后再重试。 500 Internal Server Error 表明服务端能被请求访问到,但是不能理解用户的请求。 501 Not Implemented 服务器不支持请求的功能,无法完成请求。 502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。 503 Service Unavailable 被请求的服务无效。 建议直接修改该请求,不要重试该请求。 504 Gateway Timeout 请求在给定的时间内无法完成。客户端仅在为请求指定超时(Timeout)参数时会得到该响应。 505 HTTP Version Not Supported 服务器不支持请求的HTTPS协议的版本,无法完成处理。 父主题: 附录
  • 示例 请求示例(图片文件为BASE64字符串) POST https://image.cn-north-1.myhuaweicloud.com/v1.0/vision/dark-enhance Request Header: Content-Type:application/jsonX-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG... Request Body:{ "image":"/9j/4AAQSkZJRgABAgEASABIAAD/4RFZRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dzADIwMTc6MTA6MjAgMTA6NDU6MzYAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAALIKADAAQAAAABAAAGQAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABAj...", "brightness":0.9} 成功响应示例 { "result":"/9j/4AAQSkZJRgABAgEASABIAAD/4RFZRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dzADIwMTc6MTA6MjAgMTA6NDU6MzYAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAALIKADAAQAAAABAAAGQAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABAj..."} 失败响应示例 { "error_code": "AIS.0105", "error_msg": "Recognize Failed"}
  • Python3语言API示例 本示例以图像标签为例介绍如何使用Python3调用API。 # encoding:utf-8import requestsimport base64url = "https://{endpoint}/v2/{project_id}/image/tagging"token = "用户获取得到的实际token值"headers = {'Content-Type': 'application/json', 'X-Auth-Token': token}imagepath = r'data/image-tagging.jpg'with open(imagepath, "rb") as bin_data: image_data = bin_data.read()image_base64 = base64.b64encode(image_data).decode("utf-8") # 使用图片的base64编码data= {"image": image_base64} # url与image参数二选一response = requests.post(url, headers=headers, json=data, verify=False)print(response.text) 表1 参数说明 参数 参数说明 url API请求URL,例如本示例中https://{endpoint}/v2/{project_id}/image/tagging。 token Token是用户的访问令牌,承载了用户的身份、权限等信息,用户调用API接口时,需要使用Token进行鉴权。 获取Token方法请参见认证鉴权。 imagePath 图片路径。支持图片文件路径或图片url路径。其中,图片的url路径支持公网http/https url或OBS提供的url。 父主题: 应用示例
  • 响应消息 图片为BASE64字符串响应参数请参见表2。 表2 响应参数说明 名称 类型 说明 result String 调用成功时表示图片文件BASE64字符串。 调用失败时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。 图片为文件类型响应参数请参见表3。 表3 响应参数说明 名称 类型 说明 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
  • 请求消息 请求参数请参见表1。 表1 请求参数说明 名称 是否必选 类型 说明 image 与file二选一 String 图片文件BASE64编码串。要求base64编码后大小不超过10MB,支持JPEG、PNG、BMP、WEBP格式。 file 与image二选一 File 图片文件。 说明: 不推荐使用该请求参数。 为了保持兼容服务端,对此类接口的支持能力,保留该请求参数,但不再展示该参数对应的请求示例和响应示例。 brightness 否 Float 亮度值,亮度值设置的越高,亮度越大。默认值0.9,取值范围[0,1]。
  • API概览 图像识别服务所提供的API为自研API。通过使用图像识别服务的自研API,您可以完整的使用图像识别服务的如表1所示功能。 表1 接口说明 API 说明 媒资图像标签(分类)-标签识别 标签识别服务使用时,用户发送待处理图片,返回图像标签内容及相应置信度。 媒资图像标签(检测) 对用户传入的图像可以返回图像中物体的坐标位置、物体名称、所属类别及置信度信息。 名人识别 名人识别服务能分析并识别图片中包含的明星及网红人物,返回人物信息及人脸坐标。 主体识别 主体识别服务对用户传入的图片能通过后台算法判断图片主体,并返回主体坐标。 翻拍识别 目前仅支持部分条形码的翻拍识别,可以检测出经过二次处理的不合规范图片,使得统计数据更准确、有效。 图像标签(V2) 图像标签服务准确识别自然图片中数百种场景、上千种通用物体及其属性,让智能相册管理、照片检索和分类、基于场景内容或者物体的广告推荐等功能更加直观。
  • 请求消息 请求参数请参见表1。 表1 请求参数说明 名称 是否必选 类型 说明 image 与file二选一 String 图片文件BASE64编码字符串。要求base64编码后大小不超过10MB,支持JPEG/PNG/BMP格式。 file 与image二选一 File 图片文件。 scale 否 Integer 放大倍数,默认为3,取值范围:3或4。 model 否 String 图像超分辨率重建采用的算法模式,支持ESPCN和SRCNN,默认ESPCN。 取值为: “ESPCN”:Efficient Sub-Pixel Convolutional Neural Network。 “SRCNN”: Super-Resolution Convolutional Neural Network。
  • 示例 请求示例(方式一:使用图片的BASE64编码) POST https://image.cn-north-1.myhuaweicloud.com/v1.0/vision/super-resolution Request Header: Content-Type:application/jsonX-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG... Request Body:{ "image":"/9j/4AAQSkZJRgABAgEASABIAAD/4RFZRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dzADIwMTc6MTA6MjAgMTA6NDU6MzYAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAALIKADAAQAAAABAAAGQAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABAj...", "scale":3, "model":"ESPCN"} 请求示例(方式二:使用图片文件) POST https://image.cn-north-1.myhuaweicloud.com/v1.0/vision/super-resolution Request Header: X-Auth-Token: MIINRwYJKoZIhvcNAQcCoIINODCCDTQCAQExDTALBglghkgBZQMEAgEwgguVBgkqhkiG... Request Body(form-data):file:File(图片文件)scale:3model:ESPCN 方式一:图片为BASE64字符串。 成功响应示例 { "result":"/9j/4AAQSkZJRgABAgEASABIAAD/4RFZRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAcAAAAcgEyAAIAAAAUAAAAjodpAAQAAAABAAAApAAAANAACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBXaW5kb3dzADIwMTc6MTA6MjAgMTA6NDU6MzYAAAAAA6ABAAMAAAAB//8AAKACAAQAAAABAAALIKADAAQAAAABAAAGQAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAABAj..."} 失败响应示例 { "error_code": "AIS.0105", "error_msg": "Recognize Failed"} 方式二:图片文件类型。 成功响应示例 成功时返回图片文件字节流。 失败响应示例 { "error_code": "AIS.0105", "error_msg": "Recognize Failed"}
  • 响应消息 图片为BASE64字符串响应参数请参见表2。 表2 响应参数说明 名称 类型 说明 result String 调用成功时表示图片文件BASE64字符串。 调用失败时无此字段。 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。 图片为文件类型响应参数说明请参见表3。 表3 响应参数说明 名称 类型 说明 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
  • 响应消息头 对应请求消息头,响应同样也有消息头,如“Content-type”。 表1 响应消息头 名称 描述 Content-Length 响应消息体的字节长度,单位为Byte。 Date 系统响应的时间。 Content-Type 响应消息体的MIME类型。 对于获取用户Token接口,返回如图1所示的消息头,其中“x-subject-token”就是需要获取的用户Token。有了Token之后,您就可以使用Token认证调用其他API。 图1 获取用户Token响应消息头
  • 响应消息体 响应消息体通常以结构化格式(如JSON或XML)返回,与响应消息头中Content-type对应,传递除响应消息头之外的内容。 对于获取用户Token接口,返回如下消息体。为篇幅起见,这里只展示部分内容。 { "token": { "expires_at": "2019-02-13T06:52:13.855000Z", "methods": [ "password" ], "catalog": [ { "endpoints": [ { "region_id": "cn-north-1", ...... 当接口调用出错时,会返回错误码及错误信息说明,错误响应的Body体格式如下所示。 { "error_msg": "The format of message is error", "error_code": "AS.0001" } 其中,“error_code”表示错误码,“error_msg”表示错误描述信息。
  • 响应消息 响应参数请参见表2。 表2 响应参数说明 名称 类型 说明 result JSON 调用成功时为图像标签内容。 调用失败时无此字段。 tags List 标签列表集合。 confidence Float 置信度,取值范围(0~100)。 tag String 标签名称。 type String 标签的类别。有以下三种类别: object:实体标签 scene:场景标签 concept:概念标签 i18n_tag JSON 标签的国际化字段。(i18n只是个国际化标志,无特殊含义)。 zh:中文 en:英文 error_code String 调用失败时的错误码,具体请参见错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。