全部产品
云市场

人脸查找1:N API调用说明

更新时间:2019-08-30 11:24:21

签名机制

阿里云会对每个访问的请求进行身份验证,所以无论使用 HTTP 还是 HTTPS 协议提交请求,都需要在请求中包含签名(Signature)信息。通过使用 Access Key ID 和 Access Key Secret 进行对称加密的方法来验证请求的发送者身份。Access Key ID 和 Access Key Secret 由阿里云官方颁发给访问者(可以通过阿里云官方网站申请和管理),其中 Access Key ID 用于标识访问者的身份;Access Key Secret 是用于加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密,只有阿里云和用户知道。

阿里云提供了多种语言的 SDK 及第三方 SDK,可以免去您对签名算法进行编码的麻烦。您可以从这里了解更多阿里云 SDK 的信息。

签名操作

您在访问时,需要按照下面的方法对请求进行签名处理。

1.使用请求参数构造规范化的请求字符串(Canonicalized Query String)。

i. 参数排序。 按照参数名称的字典顺序对请求中所有的请求参数(包括“公共请求参数”和接口的自定义参数,但不包括“公共请求参数”中的 Signature 参数)进行排序。

当使用 GET 方法提交请求时,这些参数就是请求 URI 中的参数部分(即 URI 中“?”之后由“&”连接的部分)。

ii. 参数编码。 对排序之后的请求参数的名称和值分别用 UTF-8 字符集进行 URL 编码。编码的规则如下

  • 对于字符 A~Z、a~z、0~9 以及字符“-”、“_”、“.”、“~”不编码;
  • 对于其它字符编码成 %XY 的格式,其中 XY 是字符对应 ASCII 码的 16 进制表示。比如英文的双引号(”)对 应的编码为 %22;
  • 对于扩展的 UTF-8 字符,编码成 %XY%ZA… 的格式;
  • 英文空格( )要编码成 %20,而不是加号(+)。 该编码方式和一般采用的 application/x-www-form-urlencoded MIME 格式编码算法(比如 Java 标准库中的 java.net.URLEncoder 的实现)相似,但又有所不同。实现时,可以先用标准库的方式进行编码,然后把编码后的字符串中加号(+)替换成 %20、星号(*)替换成 %2A、%7E 替换回波浪号(~),即可得到上述规则描述的编码字符串。这个算法可以用下面的 percentEncode 方法来实现:
  1. private static final String ENCODING = "UTF-8";
  2. private static String percentEncode(String value) throws UnsupportedEncodingException {
  3. return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
  4. }

iii. 将编码后的参数名称和值用英文等号(=)进行连接。 iv. 将等号连接得到的参数组合按步骤 i 排好的顺序依次使用“&”符号连接,即得到规范化请求字符串。

2.将上一步构造的规范化字符串按照下面的规则构造成待签名的字符串。StringToSign=

HTTPMethod + “&” +

percentEncode(“/”) + ”&” +

percentEncode(CanonicalizedQueryString)

其中:

  • HTTPMethod 是提交请求用的 HTTP 方法,比如 GET。
  • percentEncode(“/”) 是按照步骤 1.i 中描述的 URL 编码规则对字符 “/” 进行编码得到的值,即 %2F。
  • percentEncode(CanonicalizedQueryString) 是对步骤 1 中构造的规范化请求字符串按步骤 1.ii 中描述的 URL 编码规则编码后得到的字符串。

3.按照 RFC2104 的定义,计算待签名字符串 StringToSign 的 HMAC 值。

计算签名时使用的 Key 就是您持有的 Access Key Secret 并加上一个 “&” 字符(ASCII:38),使用的哈希算法是 SHA1。

4.按照 Base64 编码规则把上面的 HMAC 值编码成字符串,即得到签名值(Signature)。5.将得到的签名值作为 Signature 参数添加到请求参数中,即完成对请求签名的过程。

得到的签名值在作为最后的请求参数值提交给 ECS 服务器时,要和其它参数一样,按照RFC3986的规则进行 URL 编码。

示例

以 DescribeRegions 为例,假设使用的 Access Key Id 为 testid, Access Key Secret 为 testsecret。 那么签名前的请求 URL 为:

  1. http://ecs.aliyuncs.com/?TimeStamp=2016-02-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=DescribeRegions&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&SignatureVersion=1.0

计算得到的待签名字符串 StringToSign 为:

GET&%2F&AccessKeyId%3Dtestid&Action%3DDescribeRegions&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&TimeStamp%3D2016-02-23T12%253A46%253A24Z&Version%3D2014-05-26

因为 Access Key Secret 为 testsecret,所以用于计算 HMAC 的 Key 为 testsecret&,计算得到的签名值为:

CT9X0VtwR86fNWSnsc6v8YGOjuE=

将签名作为 Signature 参数加入到 URL 请求中,最后得到的 URL 为:

http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=CT9X0VtwR86fNWSnsc6v8YGOjuE%3D&SignatureMethod=HMAC-SHA1&TimeStamp=2016-02-23T12%3A46%3A24Z

公共参数

公共参数指的是所有接口调用都需要用到的参数,包含公共请求参数和公共返回参数两种。

公共请求参数

公共请求参数是指每个接口都需要使用到的请求参数。

名称 类型 是否必选 描述
Format String 返回值的类型,支持 JSON 与 XML。默认为 XML。
Version String API 版本号,为日期形式:YYYY-MM-DD,本版本对应为 2018-12-03。
AccessKeyId String 阿里云颁发给用户的访问服务所用的密钥 ID。
Signature String 签名结果串,关于签名的计算方法,请参见 签名机制 。
SignatureMethod String 签名方式,目前支持 HMAC-SHA1。
Timestamp String 请求的时间戳。日期格式按照 ISO8601 标准表示,并需要使用 UTC 时间。格式为:
YYYY-MM-DDThh:mm:ssZ
例如,2014-05-26T12:00:00Z(为北京时间 2014 年 5 月 26 日 12时 0 分 0 秒)
SignatureVersion String 签名算法版本,目前版本是 1.0。
SignatureNonce String 唯一随机数,用于防止网络重放攻击。用户在不同请求间要使用不同的随机数值

示例

https://face.cn-shanghai.aliyuncs.com/

  1. ?Format=xml
  2. &Version=2018-12-03
  3. &Signature=Pc5WB8gokVn0xfeu%2FZV%2BiNM1dgI%3D
  4. &SignatureMethod=HMAC-SHA1
  5. &SignatureNonce=15215528852396
  6. &SignatureVersion=1.0
  7. &AccessKeyId=key-test
  8. &Timestamp=2012-06-01T12:00:00Z

公共返回参数

用户发送的每次接口调用请求,无论成功与否,系统都会返回一个唯一识别码 RequestId 给用户。

示例

  1. {
  2. "RequestId": "4C467B38-3910-447D-87BC-AC049166F216",
  3. /* 返回结果数据 */
  4. }

请求结构

服务地址

face.aliyuncs.com

通信协议

为了获得更高的安全性,仅支持使用 HTTPS 通道发送API请求。

字符编码

请求及返回结果都使用 UTF-8 字符集进行编码。

AddFace

AddFace接口用于向人脸库中添加人脸

请求参数

参数 类型 是否必选 示例值 描述
Action String AddFace 系统规定参数。取值:AddFace。
Group String default(长度限制20) 新添加人脸的分组。
Image String front(长度限制20) 新添加人脸的编号。
Person String 张三(长度限制20) 新添加人脸的姓名。
Content String abadfewfwewefdsf 新添加人脸所在图片的Base64内容。
ImageUrl String http://***.com/***.jpg 新添加人脸所在图片的URL地址。

返回参数

参数 类型 示例值 描述
RequestId String F6414398-4258-440C-B8C1-98B60142A2BE 请示返回的UUID。
Success Boolean true 成功标志
Code String MissingParameter 错误码
Message String Parameters is mandatory for this action. 错误消息
Data String ok 人脸添加结果

示例

请求示例

  1. http(s)://face.cn-shanghai.aliyuncs.com/?Action=AddFace
  2. &Group=default
  3. &Image=front
  4. &Person=Ishikawa-Kasumi
  5. &<公共请求参数>

正常返回示例

  1. {
  2. "Data":"ok",
  3. "RequestId":"F6414398-4258-440C-B8C1-98B60142A2BE",
  4. "Success":true
  5. }

JSON格式

异常返回示例

  1. null

JSON格式

DeleteFace

DeleteFace接口用于从人脸库中删除人脸

请求参数

参数 类型 是否必选 示例值 描述
Action String DeleteFace 系统规定参数。取值:DeleteFace。
Group String default(长度限制20) 要删除人脸的分组
Image String front(长度限制20) 要删除人脸的编号
Person String Ishikawa-Kasumi(长度限制20) 要删除人脸的姓名

返回参数

参数 类型 示例值 描述
RequestId String F6414398-4258-440C-B8C1-98B60142A2BE 请示识别码
Success Boolean true 成功标识
Code String sdfdsf 错误码
Message String sdf 错误消息
Data String sdf 返回数据

示例

请求示例

  1. http(s)://face.cn-shanghai.aliyuncs.com/?Action=DeleteFace
  2. &Group=default
  3. &Image=front
  4. &Person=Ishikawa-Kasumi
  5. &<公共请求参数>

正常返回示例

  1. {
  2. "Data":"ok",
  3. "RequestId":"F6414398-4258-440C-B8C1-98B60142A2BE",
  4. "Success":true
  5. }

JSON格式

异常返回示例

  1. null

JSON格式

ListFace

ListFace接口用于列举注册库中的人脸。

请求参数

参数 类型 是否必选 示例值 描述
Action String ListFace 系统规定参数。取值:ListFace。
Group String default 需要列举的人脸分组
Mark Long 0 预留参数

返回参数

参数 类型 示例值 描述
RequestId String F6414398-4258-440C-B8C1-98B60142A2BE 请求识别码
Success Boolean true 成功标识
Code String MissingParameter 错误码
Message String Parameters is mandatory for this action. 错误信息
Data String { “mark”: 0,”list”: [{“person”: “Ishikawa-Kasumi”,”image”: “default”}] } 人脸查找结果

示例

请求示例

  1. http(s)://face.cn-shanghai.aliyuncs.com/?Action=ListFace
  2. &Group=default
  3. &<公共请求参数>

正常返回示例

  1. {
  2. "Data":{
  3. "list":[{
  4. "image":"default",
  5. "person":"Ishikawa-Kasumi"
  6. }],
  7. "mark":0
  8. },
  9. "RequestId":"87AD40B5-C66D-4A50-9133-62BB3A092942",
  10. "Success":true
  11. }

JSON格式

异常返回示例

  1. null

JSON格式

ListGroup

ListGroup接口用于列举人脸组。

请求参数

参数 类型 是否必选 示例值 描述
Action String ListGroup 系统规定参数。取值:ListGroup。

返回参数

参数 类型 示例值 描述
Code String MissingParameter 错误码

示例

请求示例

  1. http(s)://face.cn-shanghai.aliyuncs.com/?Action=ListGroup
  2. &<公共请求参数>

正常返回示例

  1. {
  2. "Data":["default"],
  3. "RequestId":"AA8E1203-9036-46AB-8D00-150492284DB5",
  4. "Success":true
  5. }

JSON格式

异常返回示例

  1. null

JSON格式

RecognizeFace

RecognizeFace接口用于查找注册库中的人脸。

请求参数

参数 类型 是否必选 示例值 描述
Action String RecognizeFace 系统规定参数。取值:RecognizeFace。
Content String c2RmYWZkd2VmZHNmYWRm… 图像内容,base64编码
ImageUrl String http://a.com/a.jpg 图像URL

返回参数

参数 类型 示例值 描述
RequestId String 76E5F73C-A3EE-4A1B-80A5-E56078646F07 请求识别码
Success Boolean true 成功标识
Code String MissingParam 错误码
Message String Type is mandatory for this action. 错误消息
Data String [{ “person”: “anyway”, “score”: 1.0000005, “image”: “anyway”, “rect”: [487, 142, 345, 447] }] 查找信息

示例

请求示例

  1. http(s)://face.cn-shanghai.aliyuncs.com/?Action=RecognizeFace
  2. &<公共请求参数>

正常返回示例

  1. {
  2. "Data":[{
  3. "image":"anyway",
  4. "person":"anyway",
  5. "rect":[
  6. 487,
  7. 142,
  8. 345,
  9. 447
  10. ],
  11. "score":1.0000005
  12. }],
  13. "RequestId":"A759AD98-F400-490E-930F-959B78351987",
  14. "Success":true
  15. }

JSON格式

异常返回示例

  1. null

JSON格式