• 沒有找到結果。

CSharp SDK_人脸识别服务 FRS_SDK参考_SDK(旧版)_华为云

N/A
N/A
Protected

Academic year: 2022

Share "CSharp SDK_人脸识别服务 FRS_SDK参考_SDK(旧版)_华为云"

Copied!
60
0
0

加載中.... (立即查看全文)

全文

(1)

SDK 参考

文档版本 01

发布日期 2022-02-15

(2)

版权所有 © 华为技术有限公司 2022。 保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传 播。

商标声明

和其他华为商标均为华为技术有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受华为公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或 特性可能不在您的购买或使用范围之内。除非合同另有约定,华为公司对本文档内容不做任何明示或暗示的声 明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文 档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

华为技术有限公司

地址: 深圳市龙岗区坂田华为总部办公楼 邮编:518129 网址:

https://www.huawei.com

客户服务邮箱:

[email protected]

客户服务电话:4008302118

(3)

目 录

1 简介...1

2 Java SDK...3

3 Python SDK... 11

4 Go SDK... 18

5 .NET SDK...24

6 Node.js SDK...34

7 PHP SDK...39

8 C++ SDK... 47

A 修订记录... 57

(4)

1 简介

人脸识别服务软件开发工具包(FRS SDK)是对人脸识别服务提供的REST API进行的 封装,以简化用户的开发工作。FRS SDK目前支持Java、Python、Go、.NET、

Node.js、PHP、C++版本。

接口与 API 对应关系

人脸识别接口与API对应关系请参见表1-1。

1-1 接口与 API 对应关系表

接口 API

人脸检测 POST /v2/{project_id}/face-detect 人脸比对 POST /v2/{project_id}/face-compare 人脸搜索 POST /v2/{project_id}/face-sets/

{face_set_name}/search

活体检测 动作活体检测 POST /v1/{project_id}/live-detect 静默活体检测 POST /v1/{project_id}/live-detect-face 人脸库资源管

创建人脸库 POST /v2/{project_id}/face-sets 查询所有人脸

GET /v2/{project_id}/face-sets

查询人脸库 GET /v2/{project_id}/face-sets/{face_set_name}

删除人脸库 DELETE /v2/{project_id}/face-sets/

{face_set_name}

人脸资源管理 添加人脸 POST /v2/{project_id}/face-sets/

{face_set_name}/faces

查询人脸 GET /v2/{project_id}/face-sets/

{face_set_name}/faces?offset=xxx&limit=xxx

(5)

接口 API

更新人脸 PUT /v2/{project_id}/face-sets/

{face_set_name}/faces

删除人脸 DELETE /v2/{project_id}/face-sets/

{face_set_name}/faces?field_name=field_value 批量删除人脸 DELETE /v2/{project_id}/face-sets/

{face_set_name}/faces/batch

(6)

2 Java SDK

本章节介绍人脸识别服务Java SDK,您可以参考本章节进行快速集成开发。

准备工作

● 已注册华为云帐号,并完成实名认证,帐号不能处于欠费或冻结状态。

● 已开通人脸识别服务。如未开通,请登录人脸识别管理控制台开通所需服务。

● 已具备开发环境,支持Java JDK 1.8 及其以上版本。

● 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key

(SK)。

● 登录“我的凭证”页面,获取“IAM用户名”“、帐号名”以及待使用区域的

“项目ID”。调用服务时会用到这些信息,请提前保存。

本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。

2-1 我的凭证

安装 SDK

推荐您通过Maven方式获取和安装SDK,首先需要在您的操作系统中下载并安装

Maven,安装完成后您只需要在Java项目的pom.xml文件中加入相应的依赖项即可。

使用SDK前,需要安装“huaweicloud-sdk-core”和“huaweicloud-sdk-frs”。SDK 的版本信息请参见SDK中心。

<dependency>

<groupId>com.huaweicloud.sdk</groupId>

<artifactId>huaweicloud-sdk-core</artifactId>

<version>3.0.56</version>

</dependency>

<dependency>

(7)

<groupId>com.huaweicloud.sdk</groupId>

<artifactId>huaweicloud-sdk-frs</artifactId>

<version>3.0.56</version>

</dependency>

开始使用

详细的SDK介绍,使用异步客户端,配置日志请参见SDK中心、Java SDK使用指导、

Java SDK使用视频。

1. 导入依赖模块

import com.huaweicloud.sdk.core.auth.ICredential;

import com.huaweicloud.sdk.core.auth.BasicCredentials;

import com.huaweicloud.sdk.core.exception.ConnectionException;

import com.huaweicloud.sdk.core.exception.RequestTimeoutException;

import com.huaweicloud.sdk.core.exception.ServiceResponseException;

//导入v2版本sdk

import com.huaweicloud.sdk.frs.v2.region.FrsRegion;

import com.huaweicloud.sdk.frs.v2.*;

import com.huaweicloud.sdk.frs.v2.model.*;

2. 配置认证信息

配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名 验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法 请参见准备工作。

public static ICredential getCredential(String ak, String sk) { return new BasicCredentials()

.withAk(ak) .withSk(sk);

}

3. 初始化客户端 指定region方式

public static FrsClient getClient(Region region, ICredential auth) { // 初始化人脸识别服务的客户端

return FrsClient.newBuilder() .withCredential(auth)

.withRegion(region) // 选择服务所在区域 FrsRegion.valueOf("cn-north-4") .build();

}

服务部署区域请参见终端节点。

4. 发送请求并查看响应

// 以调用人脸检测 DetectFaceByBase64 接口为例

DetectFaceByBase64Request request = new DetectFaceByBase64Request();

FaceDetectBase64Req body = new FaceDetectBase64Req();

body.withImageBase64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

request.withBody(body);

DetectFaceByBase64Response response = client.detectFaceByBase64(request);

System.out.println(response.toString());

说明

使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。

5. 异常处理

2-1 异常处理

一级分类 一级分类说明 二级分类 二级分类说明

ConnectionExcepti

on 连接类异常 HostUnreachableE

xception 网络不可达、被拒 绝。

(8)

一级分类 一级分类说明 二级分类 二级分类说明 SslHandShakeExce

ption SSL认证异常。

RequestTimeoutEx

ception 响应超时异常 CallTimeoutExcept

ion 单次请求,服务器

处理超时未返回。

RetryOutageExcep

tion 在重试策略消耗完

成后,仍无有效的 响应。

ServiceResponseEx

ception 服务器响应异

常 ServerResponseEx

ception 服务端内部错误,

Http响应码:

[500,]。

ClientRequestExce

ption 请求参数不合法,

Http响应码:[400, 500)

DetectFaceByBase64Request request = new DetectFaceByBase64Request();

try {

DetectFaceByBase64Response response = client.detectFaceByBase64(request);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

SDK demo 代码解析

● 人脸检测

DetectFaceByBase64Request detectRequest = new DetectFaceByBase64Request();

FaceDetectBase64Req faceDetectBase64Req = new FaceDetectBase64Req();

faceDetectBase64Req.withImageBase64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

faceDetectBase64Req.withAttributes("2");

detectRequest.setBody(faceDetectBase64Req);

try {

DetectFaceByBase64Response detectResponse = client.detectFaceByBase64(detectRequest);

System.out.println(detectResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 人脸比对

CompareFaceByBase64Request compareRequest = new CompareFaceByBase64Request();

FaceCompareBase64Req faceCompareBase64Req = new FaceCompareBase64Req();

faceCompareBase64Req.withImage1Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

faceCompareBase64Req.withImage2Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

(9)

compareRequest.withBody(faceCompareBase64Req);

try {

CompareFaceByBase64Response compareResponse = client.compareFaceByBase64(compareRequest);

System.out.println(compareResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 人脸搜索

SearchFaceByBase64Request searchRequest = new SearchFaceByBase64Request();

searchRequest.withFaceSetName("face_set_name");

FaceSearchBase64Req faceSearchBase64Req = new FaceSearchBase64Req();

List<Map<String, String>> listbodySort = new ArrayList<>();

Map<String, String> map = new HashMap<>();

map.put("timestamp","asc");

listbodySort.add(map);

List<String> listbodyReturnFields = new ArrayList<>();

listbodyReturnFields.add("timestamp");

listbodyReturnFields.add("id");

faceSearchBase64Req.withSort(listbodySort);

faceSearchBase64Req.withReturnFields(listbodyReturnFields);

faceSearchBase64Req.withImageBase64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

searchRequest.withBody(faceSearchBase64Req);

try {

SearchFaceByBase64Response searchResponse = client.searchFaceByBase64(searchRequest);

System.out.println(searchResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 创建人脸库

CreateFaceSetRequest createFaceSetRequest = new CreateFaceSetRequest();

CreateFaceSetReq createFaceSetReq = new CreateFaceSetReq();

createFaceSetReq.withFaceSetName("face_set_name");

Map<String, TypeInfo> stringTypeInfoMap = new HashMap<>();

TypeInfo typeInfo = new TypeInfo();

typeInfo.withType("long");

stringTypeInfoMap.put("timestamp", typeInfo);

createFaceSetReq.withExternalFields(stringTypeInfoMap);

createFaceSetRequest.withBody(createFaceSetReq);

try {

CreateFaceSetResponse createFaceSetResponse = client.createFaceSet(createFaceSetRequest);

System.out.println(createFaceSetResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 查询人脸库

(10)

ShowFaceSetRequest showFaceSetRequest = new ShowFaceSetRequest();

showFaceSetRequest.withFaceSetName("face_set_name");

try {

ShowFaceSetResponse showFaceSetResponse = client.showFaceSet(showFaceSetRequest);

System.out.println(showFaceSetResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 查询所有人脸库

ShowAllFaceSetsRequest showAllFaceSetsRequest = new ShowAllFaceSetsRequest();

try {

ShowAllFaceSetsResponse showAllFaceSetsResponse = client.showAllFaceSets(showAllFaceSetsRequest);

System.out.println(showAllFaceSetsResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 删除人脸库

DeleteFaceSetRequest deleteFaceSetRequest = new DeleteFaceSetRequest();

deleteFaceSetRequest.withFaceSetName("face_set_name");

try {

DeleteFaceSetResponse deleteFaceSetResponse = client.deleteFaceSet(deleteFaceSetRequest);

System.out.println(deleteFaceSetResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 添加人脸

//add face

AddFacesByBase64Request addFacesByBase64Request = new AddFacesByBase64Request();

addFacesByBase64Request.withFaceSetName("face_set_name");

AddFacesBase64Req addFacesBase64Req = new AddFacesBase64Req();

addFacesBase64Req.withExternalFields("{\"timestamp\":12}");

addFacesBase64Req.withImageBase64("9j/4AAQSkZJRgABAQAAAQABAAD...");

addFacesByBase64Request.withBody(addFacesBase64Req);

try {

AddFacesByBase64Response addFacesByBase64Response = client.addFacesByBase64(addFacesByBase64Request);

System.out.println(addFacesByBase64Response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

(11)

System.out.println(e.getErrorMsg());

}

● 删除人脸

//delete face by faceId

DeleteFaceByFaceIdRequest deleteFaceByFaceIdRequest = new DeleteFaceByFaceIdRequest();

deleteFaceByFaceIdRequest.withFaceSetName("face_set_name");

deleteFaceByFaceIdRequest.withFaceId("iexEBb6t");

try {

DeleteFaceByFaceIdResponse deleteFaceByFaceIdResponse = client.deleteFaceByFaceId(deleteFaceByFaceIdRequest);

System.out.println(deleteFaceByFaceIdResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

//delete face by externalImageId

DeleteFaceByExternalImageIdRequest deleteFaceRequest = new DeleteFaceByExternalImageIdRequest();

deleteFaceRequest.withFaceSetName("face_set_name");

deleteFaceRequest.withExternalImageId("iexEBb6t");

try {

DeleteFaceByExternalImageIdResponse response = client.deleteFaceByExternalImageId(deleteFaceRequest);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 批量删除人脸

BatchDeleteFacesRequest batchDeleteFacesRequest = new BatchDeleteFacesRequest();

batchDeleteFacesRequest.withFaceSetName("face_set_name");

DeleteFacesBatchReq deleteFacesBatchReq = new DeleteFacesBatchReq();

deleteFacesBatchReq.withFilter("age:[20 TO 30]");

batchDeleteFacesRequest.withBody(deleteFacesBatchReq);

try {

BatchDeleteFacesResponse batchDeleteFacesResponse = client.batchDeleteFaces(batchDeleteFacesRequest);

System.out.println(batchDeleteFacesResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 更新人脸

UpdateFaceRequest updateFaceRequest = new UpdateFaceRequest();

updateFaceRequest.withFaceSetName("face_set_name");

UpdateFaceReq updateFaceReq = new UpdateFaceReq();

updateFaceReq.withFaceId("iexEBb6t");

updateFaceRequest.withBody(updateFaceReq);

(12)

try {

UpdateFaceResponse response = client.updateFace(updateFaceRequest);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 查询人脸

//show faces by faceId

ShowFacesByFaceIdRequest showFacesByFaceIdRequest = new ShowFacesByFaceIdRequest();

showFacesByFaceIdRequest.withFaceSetName("face_set_name");

showFacesByFaceIdRequest.withFaceId("iexEBb6t");

try {

ShowFacesByFaceIdResponse response = client.showFacesByFaceId(showFacesByFaceIdRequest);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

//show faces by limit

ShowFacesByLimitRequest showFacesByLimitRequest = new ShowFacesByLimitRequest();

showFacesByLimitRequest.withFaceSetName("face_set_name");

showFacesByLimitRequest.withOffset(0);

showFacesByLimitRequest.withLimit(10);

try {

ShowFacesByLimitResponse showFacesByLimitResponse = client.showFacesByLimit(showFacesByLimitRequest);

System.out.println(showFacesByLimitResponse.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 动作活体检测

//detect live by base64

DetectLiveByBase64Request request = new DetectLiveByBase64Request();

LiveDetectBase64Req body = new LiveDetectBase64Req();

body.withActions("1,2,3,4");

body.withVideoBase64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

request.withBody(body);

try {

DetectLiveByBase64Response response = client.detectLiveByBase64(request);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

(13)

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

● 静默活体检测

//detect live face by base64

DetectLiveFaceByBase64Request request = new DetectLiveFaceByBase64Request();

LiveDetectFaceBase64Req body = new LiveDetectFaceBase64Req();

body.withImageBase64("/9j/4AAQSkZJRgABAQAAAQABAAD...");

request.withBody(body);

try {

DetectLiveFaceByBase64Response response = client.detectLiveFaceByBase64(request);

System.out.println(response.toString());

} catch (ConnectionException e) { e.printStackTrace();

} catch (RequestTimeoutException e) { e.printStackTrace();

} catch (ServiceResponseException e) { e.printStackTrace();

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

}

SDK 代码自动生成

API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查

看、在线咨询。

您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在 集成开发环境CloudIDE中完成代码的构建、调试、运行等操作。

2-2 API Explorer

(14)

3 Python SDK

本章节介绍人脸识别服务Python SDK,您可以参考本章节进行快速集成开发。

准备工作

● 已注册华为云帐号,并完成实名认证,帐号不能处于欠费或冻结状态。

● 已开通人脸识别服务。如未开通,请登录人脸识别管理控制台人脸识别管理控制 台开通所需服务。

● 已具备开发环境,支持Python3及以上版本。

● 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key

(SK)。

● 登录“我的凭证”页面,获取“IAM用户名”“、帐号名”以及待使用区域的

“项目ID”。调用服务时会用到这些信息,请提前保存。

本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。

3-1 我的凭证

安装 SDK

支持Python3及以上版本,执行python --version检查当前Python的版本信息。

使用SDK前,需要安装“huaweicloudsdkcore”和“huaweicloudsdkfrs”。

# 安装核心库

pip install huaweicloudsdkcore

# 安装FRS服务库

pip install huaweicloudsdkfrs

(15)

开始使用

详细的SDK介绍,使用异步客户端,配置日志请参见SDK中心、Python SDK使用指

导、Python SDK使用视频。

1. 导入依赖模块

from huaweicloudsdkcore.auth.credentials import BasicCredentials from huaweicloudsdkcore.exceptions import exceptions

# 导入v2版本sdk

from huaweicloudsdkfrs.v2.region.frs_region import FrsRegion from huaweicloudsdkfrs.v2 import *

2. 配置认证信息

配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名 验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法 请参见准备工作。

def GetCredential():

return BasicCredentials(ak, sk)

3. 初始化客户端 指定region方式

# 初始化人脸识别服务的客户端,并选择服务部署区域 def GetClient():

return FrsClient.new_builder(FrsClient) \ .with_credentials(credentials) \

.with_region(FrsRegion.value_of("cn-north-4")) \ .build()

服务部署区域请参见终端节点。

4. 发送请求并查看响应

# 以调用人脸检测 DetectFaceByBase64 接口为例 request = DetectFaceByBase64Request() request.body = FaceDetectBase64Req(

image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)response = client.detect_face_by_base64(request) print(response)

说明

使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。

5. 异常处理

3-1 异常处理

一级分类 一级分类说明 二级分类 二级分类说明

ConnectionExcepti

on 连接类异常 HostUnreachableE

xception 网络不可达、被拒 绝。

SslHandShakeExce

ption SSL认证异常。

RequestTimeoutEx

ception 响应超时异常 CallTimeoutExcept

ion 单次请求,服务器

处理超时未返回。

RetryOutageExcep

tion 在重试策略消耗完

成后,仍无有效的 响应。

(16)

一级分类 一级分类说明 二级分类 二级分类说明 ServiceResponseEx

ception 服务器响应异

常 ServerResponseEx

ception 服务端内部错误,

Http响应码:

[500,]。

ClientRequestExce

ption 请求参数不合法,

Http响应码:[400, 500)

try: request = DetectFaceByBase64Request() request.body = FaceDetectBase64Req(

image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.detect_face_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

SDK 代码解析

● 人脸检测

def detectFaceByBase64():

try:

request = DetectFaceByBase64Request() request.body = FaceDetectBase64Req(

image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD...", attributes="2,4"

)

response = client.detect_face_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 人脸比对

def compareFaceByBase64():

try:

request = CompareFaceByBase64Request() request.body = FaceCompareBase64Req(

image1_base64="/9j/4AAQSkZJRgABAQAAAQABAAD...", image2_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.compare_face_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 人脸搜索

def searchFaceByBase64():

try:

request = SearchFaceByBase64Request() request.face_set_name = "face_set_name"

listFaceSearchBase64ReqReturnFieldsbody = [ "timestamp"

(17)

]

request.body = FaceSearchBase64Req(

return_fields=listFaceSearchBase64ReqReturnFieldsbody, image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.search_face_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 创建人脸库

def createFaceSet():

try:

request = CreateFaceSetRequest() request.body = CreateFaceSetReq(

face_set_name="face_set_name",

external_fields={"timestamp": {"type": "long"}}

)

response = client.create_face_set(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 查询人脸库

def showFaceSet():

try:

request = ShowFaceSetRequest() request.face_set_name = "face_set_name"

response = client.show_face_set(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 查询所有人脸库

def showAllFaceSet():

try:

request = ShowAllFaceSetsRequest() response = client.show_all_face_sets(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 删除人脸库

def deleteFaceSet():

try:

request = DeleteFaceSetRequest() request.face_set_name = "face_set_name"

response = client.delete_face_set(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 添加人脸

def addFacesByBase64():

try:

request = AddFacesByBase64Request()

(18)

request.face_set_name = "face_set_name"

request.body = AddFacesBase64Req(

external_fields="{\"timestamp\":12}",

image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.add_faces_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 删除人脸

def deleteFace():

# Delete Face By FaceId try:

request = DeleteFaceByFaceIdRequest() request.face_set_name = "face_set_name"

request.face_id = "LkPJblq6"

response = client.delete_face_by_face_id(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

# Delete Face By ExternalImageId try:

request = DeleteFaceByExternalImageIdRequest() request.face_set_name = "face_set_name"

request.external_image_id = "external_image_id"

response = client.delete_face_by_external_image_id(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 批量删除人脸

def batchDeleteFaces():

try:

request = BatchDeleteFacesRequest() request.face_set_name = "face_set_name"

request.body = DeleteFacesBatchReq(

filter="age:[20 TO 30]"

)

response = client.batch_delete_faces(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 更新人脸

def updateFace():

try:

request = UpdateFaceRequest()

request.face_set_name = "face_set_name"

request.body = UpdateFaceReq(face_id="LkPJblq6") response = client.update_face(request)

print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

(19)

● 查询人脸

def showFaces():

# Show Faces By FaceId try:

request = ShowFacesByFaceIdRequest() request.face_set_name = "face_set_name"

request.face_id = "LkPJblq6"

response = client.show_faces_by_face_id(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) # Show Faces By Limit try:

request = ShowFacesByLimitRequest() request.face_set_name = "face_set_name"

request.offset = 0 request.limit = 10

response = client.show_faces_by_limit(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 动作活体检测

def detectLiveByBase64():

try:

request = DetectLiveByBase64Request() request.body = LiveDetectBase64Req(

actions="1,2,3,4",

video_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.detect_live_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

● 静默活体检测

def detectLiveFaceByBase64():

try:

request = DetectLiveFaceByBase64Request() request.body = LiveDetectFaceBase64Req(

image_base64="/9j/4AAQSkZJRgABAQAAAQABAAD..."

)

response = client.detect_live_face_by_base64(request) print(response)

except exceptions.ClientRequestException as e:

print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg)

SDK 代码自动生成

API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查

看、在线咨询。

您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在 集成开发环境CloudIDE中完成代码的构建、调试、运行等操作。

(20)

3-2 API Explorer

(21)

4 Go SDK

本章节介绍人脸识别服务Go SDK,您可以参考本章节进行快速集成开发。

准备工作

● 已注册华为云帐号,并完成实名认证,帐号不能处于欠费或冻结状态。

● 已开通人脸识别服务。如未开通,请登录人脸识别管理控制台人脸识别管理控制 台开通所需服务。

● 已具备开发环境,Go SDK 支持 go 1.14 及以上版本,可执行 go version 检查当 前 Go 的版本信息。

● 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key

(SK)。

● 登录“我的凭证”页面,获取“IAM用户名”“、帐号名”以及待使用区域的

“项目ID”。调用服务时会用到这些信息,请提前保存。

本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。

4-1 我的凭证

安装 SDK

使用SDK前需要安装华为云Go SDK 库。

# 安装华为云Go库

go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3

# 安装依赖

go get github.com/json-iterator/go

(22)

开始使用

详细的SDK介绍请参见SDK中心、Go SDK使用指导、Go SDK使用视频。

1. 导入依赖模块

import ( "fmt"

"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"

// 导入v2版本sdk

frs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2"

"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2/model"

region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2/region"

)

2. 配置认证信息

配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名 验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法 请参见准备工作。

func GetCredential(ak, sk string) basic.Credentials { // Init Auth Info

return basic.NewCredentialsBuilder().

WithAk(ak).

WithSk(sk).

Build() }

3. 初始化客户端 指定region方式

// # 初始化人脸识别服务的客户端,并选择服务部署区域 func GetClient(auth basic.Credentials) *frs.FrsClient { return frs.NewFrsClient(

frs.FrsClientBuilder().

WithRegion(region.CN_NORTH_4).

WithCredential(auth).

Build()) }

服务部署区域请参见终端节点。

4. 发送请求并查看下响应

request := &model.DetectFaceByBase64Request{}

request.Body = &model.FaceDetectBase64Req{

ImageBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.DetectFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

说明

使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。

5. 异常处理

4-1 异常处理

一级分类 一级分类说明

ServiceResponseError 服务响应异常

url.Error url异常

(23)

response, err := client.DetectFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

SDK demo 代码解析

● 人脸检测

request := &model.DetectFaceByBase64Request{}

attributesFaceDetectBase64Req := "2"

request.Body = &model.FaceDetectBase64Req{

Attributes: &attributesFaceDetectBase64Req, ImageBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.DetectFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 人脸比对

request := &model.CompareFaceByBase64Request{}

request.Body = &model.FaceCompareBase64Req{

Image1Base64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", Image2Base64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.CompareFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 人脸搜索

request := &model.SearchFaceByBase64Request{}

request.FaceSetName = "face_set_name"

var listReturnFieldsbody = []string{

"timestamp", "id",

}request.Body = &model.FaceSearchBase64Req{

ReturnFields: &listReturnFieldsbody,

ImageBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.SearchFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 创建人脸库

request := &model.CreateFaceSetRequest{}

request.Body = &model.CreateFaceSetReq{

FaceSetName: "face_set_name",

}response, err := client.CreateFaceSet(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 查询人脸库

request := &model.ShowFaceSetRequest{}

request.FaceSetName = "face_set_name"

response, err := client.ShowFaceSet(request)

(24)

if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 查询所有人脸库

request := &model.ShowAllFaceSetsRequest{}

response, err := client.ShowAllFaceSets(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 删除人脸库

request := &model.DeleteFaceSetRequest{}

request.FaceSetName = "face_set_name"

response, err := client.DeleteFaceSet(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 添加人脸

request := &model.AddFacesByBase64Request{}

request.FaceSetName = "face_set_name"

var externalFieldsAddFacesBase64Req interface{} = "{\"timestamp\":12}"

request.Body = &model.AddFacesBase64Req{

ExternalFields: &externalFieldsAddFacesBase64Req, ImageBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.AddFacesByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 删除人脸

request := &model.DeleteFaceByExternalImageIdRequest{}

request.FaceSetName = "face_set_name"

request.ExternalImageId = "external_image_id"

response, err := client.DeleteFaceByExternalImageId(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 批量删除人脸

request := &model.BatchDeleteFacesRequest{}

request.FaceSetName = "face_set_name"

request.Body = &model.DeleteFacesBatchReq{

Filter: "age:[20 TO 30]",

}response, err := client.BatchDeleteFaces(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 更新人脸

request := &model.UpdateFaceRequest{}

request.FaceSetName = "face_set_name"

externalImageIdUpdateFaceReq:= "external_image_id"

var externalFieldsUpdateFaceReq interface{} = "{\"timestamp\":12}"

request.Body = &model.UpdateFaceReq{

FaceId: "LkPJblq6",

(25)

ExternalImageId: &externalImageIdUpdateFaceReq, ExternalFields: &externalFieldsUpdateFaceReq, }response, err := client.UpdateFace(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 查询人脸

//Show Faces By FaceId

request := &model.ShowFacesByFaceIdRequest{}

request.FaceSetName = "face_set_name"

request.FaceId = "LkPJblq6"

response, err := client.ShowFacesByFaceId(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 动作活体检测

//detect live by base64

request := &model.DetectLiveByBase64Request{}

request.Body = &model.LiveDetectBase64Req{

Actions: "1,2,3,4",

VideoBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.DetectLiveByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

● 静默活体检测

//detect live face by base64

request := &model.DetectLiveFaceByBase64Request{}

request.Body = &model.LiveDetectFaceBase64Req{

ImageBase64: "/9j/4AAQSkZJRgABAQAAAQABAAD...", }response, err := client.DetectLiveFaceByBase64(request) if err == nil {

fmt.Printf("%+v\n", response) } else {

fmt.Println(err) }

SDK 代码自动生成

API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查

看、在线咨询。

您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在 集成开发环境CloudIDE中完成代码的构建、调试、运行等操作。

(26)

4-2 API Explorer

(27)

5 .NET SDK

本章节介绍.NET SDK,您可以参考本章节进行快速集成开发。

准备工作

● 已注册华为云帐号,并完成实名认证,帐号不能处于欠费或冻结状态。

● 已具备开发环境,.NET SDK 适用于.NET Standard 2.0 及其以上版本;C# 4.0 及 其以上版本。

● 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key

(SK)。

● 登录“我的凭证”页面,获取“IAM用户名”“、帐号名”以及待使用区域的

“项目ID”。调用服务时会用到这些信息,请提前保存。

本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。

5-1 我的凭证

安装 SDK

使用SDK前,需要安装“HuaweiCloud.SDK.Core”和“HuaweiCloud.SDK.Frs”,有 两种安装方式,分别如下。

● 使用 .NET CLI 工具

dotnet add package HuaweiCloud.SDK.Core dotnet add package HuaweiCloud.SDK.Frs

● 使用 Package Manager

Install-Package HuaweiCloud.SDK.Core Install-Package HuaweiCloud.SDK.Frs

(28)

开始使用

详细的SDK介绍,使用异步客户端,配置日志请参见SDK中心、.NET SDK使用指

导、.NET SDK视频指导。

1. 导入依赖模块

using System;

using System.Collections.Generic;

using HuaweiCloud.SDK.Core;

using HuaweiCloud.SDK.Core.Auth;

using HuaweiCloud.SDK.Frs;

using HuaweiCloud.SDK.Frs.V2;

using HuaweiCloud.SDK.Frs.V2.Model;

2. 配置客户端连接参数 – 默认配置

// 使用默认配置

var config = HttpConfig.GetDefaultConfig();

– 网络代理(可选)

// 根据需要配置网络代理

config.ProxyHost = "proxy.huaweicloud.com";

config.ProxyPort = 8080;

config.ProxyUsername = "test";

config.ProxyPassword = "test";

– 超时配置(可选)

// 默认超时时间为120秒,可根据需要调整 config.Timeout = 120;

– SSL配置(可选)

// 根据需要配置是否跳过SSL证书验证 config.IgnoreSslVerification = true;

3. 配置认证信息

配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名 验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法 请参见准备工作。

const string ak = "<YOUR AK>";

const string sk = "<YOUR SK>";

var auth = new BasicCredentials(ak, sk);

4. 初始化客户端

– 指定云服务region方式(推荐)

// 初始化指定云服务的客户端 {Service}Client ,以初始化FRS服务的 FrsClient 为例 var client = FrsClient.NewBuilder()

.WithCredential(auth)

.WithRegion(FrsRegion.ValueOf("cn-north-4")) .WithHttpConfig(config)

.Build();

– 指定云服务endpoint方式

// 指定终端节点,以FRS服务北京四的 endpoint 为例

String endpoint = "https://face.cn-north-4.myhuaweicloud.com";

// 初始化客户端认证信息,需要填写相应 projectId,以初始化 BasicCredentials 为例 var auth = new BasicCredentials(ak, sk, projectId);

// 初始化指定云服务的客户端 {Service}Client,以初始化FRS服务的 FrsClient 为例 var client = FrsClient.NewBuilder()

.WithCredential(auth) .WithEndPoint(endpoint) .WithHttpConfig(config) .Build();

endpoint是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和

终端节点 。

(29)

5. 发送请求并查看响应

// 以调用人脸检测接口 DetectFaceByBase64 为例 var req = new DetectFaceByBase64Request {};

req.Body = new FaceDetectBase64Req() { ImageBase64 = "图片的base64编码"

};

try{

var resp = client.DetectFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

说明

使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。

6. 异常处理

5-1 异常处理

一级分类 一级分类说明 二级分类 二级分类说明

ConnectionExcepti

on 连接类异常 HostUnreachableE

xception 网络不可达、被拒 绝。

SslHandShakeExce

ption SSL认证异常。

RequestTimeoutEx

ception 响应超时异常 CallTimeoutExcept

ion 单次请求,服务器

处理超时未返回。

RetryOutageExcep

tion 在重试策略消耗完

成后,仍无有效的 响应。

ServiceResponseEx

ception 服务器响应异

常 ServerResponseEx

ception 服务端内部错误,

Http响应码:

[500,]。

ClientRequestExce

ption 请求参数不合法,

Http响应码:[400, 500)

try{

var resp = client.DetectFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}catch (RequestTimeoutException requestTimeoutException) { Console.WriteLine(requestTimeoutException.ErrorMessage);

}catch (ServiceResponseException clientRequestException) { Console.WriteLine(clientRequestException.HttpStatusCode);

(30)

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}catch (ConnectionException connectionException) { Console.WriteLine(connectionException.ErrorMessage);

}

SDK demo 代码解析

● 人脸检测

var req = new DetectFaceByBase64Request {

};

req.Body = new FaceDetectBase64Req() {

ImageBase64 = "图片的base64编码"

};

try {

var resp = client.DetectFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 人脸比对

var req = new CompareFaceByBase64Request {

};

req.Body = new FaceCompareBase64Req() {

Image1Base64 = "图片1的base64编码", Image2Base64 = "图片2的base64编码"

};

try {

var resp = client.CompareFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

(31)

● 人脸搜索

var req = new SearchFaceByBase64Request {

};

req.Body = new FaceSearchBase64Req() {

ImageBase64 = "图片的base64编码"

};

try {

var resp = client.SearchFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 创建人脸库

var req = new CreateFaceSetRequest {

};

req.Body = new CreateFaceSetReq() {

FaceSetName = "人脸库名称"

};

try {

var resp = client.CreateFaceSet(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 查询人脸库

var req = new ShowFaceSetRequest {

FaceSetName = "人脸库名称"

};

try {

var resp = client.ShowFaceSet(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException)

(32)

{

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 查询所有人脸库

var req = new ShowAllFaceSetsRequest {

};

try {

var resp = client.ShowAllFaceSets(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 删除人脸库

var req = new DeleteFaceSetRequest {

FaceSetName = "人脸库名称"

};

try {

var resp = client.DeleteFaceSet(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 添加人脸

var req = new AddFacesByBase64Request {

};

req.Body = new AddFacesBase64Req()

(33)

{

ImageBase64 = "图片的base64编码"

};

try {

var resp = client.AddFacesByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 删除人脸

var req = new DeleteFaceByFaceIdRequest {

FaceSetName = "人脸库名称", FaceId = "人脸ID"

};

try {

var resp = client.DeleteFaceByFaceId(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 批量删除人脸

var req = new BatchDeleteFacesRequest {

};

req.Body = new DeleteFacesBatchReq() {

Filter = "过滤条件"

};

try {

var resp = client.BatchDeleteFaces(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException)

(34)

{

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 更新人脸

var req = new UpdateFaceRequest {

};

req.Body = new UpdateFaceReq() {

FaceId = "人脸库ID"

};

try {

var resp = client.UpdateFace(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

} }

● 查询人脸

var req = new ShowFacesByFaceIdRequest {

FaceSetName = "人脸库名称", FaceId = "人脸ID"

};

try {

var resp = client.ShowFacesByFaceId(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 动作活体检测

var req = new DetectLiveByBase64Request {

(35)

};

req.Body = new LiveDetectBase64Req() {

Actions = "动作代码顺序列表",

VideoBase64 = "视频数据的base64编码"

};

try {

var resp = client.DetectLiveByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

● 静默活体检测

var req = new DetectLiveFaceByBase64Request {

};

req.Body = new LiveDetectFaceBase64Req() {

ImageBase64 = "图片的base64编码"

};

try {

var resp = client.DetectLiveFaceByBase64(req);

var respStatusCode = resp.HttpStatusCode;

Console.WriteLine(respStatusCode);

}

catch (RequestTimeoutException requestTimeoutException) {

Console.WriteLine(requestTimeoutException.ErrorMessage);

}

catch (ServiceResponseException clientRequestException) {

Console.WriteLine(clientRequestException.HttpStatusCode);

Console.WriteLine(clientRequestException.ErrorCode);

Console.WriteLine(clientRequestException.ErrorMsg);

}

catch (ConnectionException connectionException) {

Console.WriteLine(connectionException.ErrorMessage);

}

SDK 代码自动生成

API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查

看、在线咨询。

您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。

(36)

5-2 API Explorer

(37)

6 Node.js SDK

本章节介绍新版Node.js SDK,您可以参考本章节进行快速集成开发。

准备工作

● 已注册华为云帐号,并完成实名认证,帐号不能处于欠费或冻结状态。

● 已具备开发环境,支持Node 10.16.1 及其以上版本。

● 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key

(SK)。

● 登录“我的凭证”页面,获取“IAM用户名”“、帐号名”以及待使用区域的

“项目ID”。调用服务时会用到这些信息,请提前保存。

本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。

6-1 我的凭证

安装 SDK

使用SDK前,需要安装“@huaweicloud/huaweicloud-sdk-core”和

“@huaweicloud/huaweicloud-sdk-frs”。

推荐您使用 npm 安装 SDK。

npm install @huaweicloud/huaweicloud-sdk-core npm i @huaweicloud/huaweicloud-sdk-frs

开始使用

详细的SDK介绍请参见SDK中心、Node.js SDK使用指导、Node.js SDK视频指导。

(38)

1. 导入依赖模块

const core = require('@huaweicloud/huaweicloud-sdk-core');

const frs = require("@huaweicloud/huaweicloud-sdk-frs");

2. 配置客户端链接参数 – 默认配置

const client = frs.FrsClient.newBuilder()

– 网络代理(可选)

// 使用代理服务器(可选)

client.withProxyAgent("http://username:[email protected]:8080")

– SSL配置(可选)

// 配置跳过服务端证书验证(可选)

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

3. 配置认证信息

配置AK、SK、project_id信息。华为云通过AK识别用户的身份,通过SK对请求数 据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。

const credentials = new core.BasicCredentials() .withAk(ak)

.withSk(sk)

.withProjectId(project_id)

认证参数说明:

– ak、sk:访问秘钥信息,获取方法请参见准备工作。

– project_id:华为云项目ID,获取方法请参见准备工作。

4. 初始化客户端

指定云服务endpoint方式

// 指定终端节点,以 FRS 服务北京四的 endpoint 为例

const endpoint = "https://face.cn-north-4.myhuaweicloud.com";

const client = frs.FrsClient.newBuilder() .withCredential(credentials) .withEndpoint(endpoint) .build();

endpoint是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和终端

节点 。

5. 发送请求并查看响应

// 以调用人脸检测接口 DetectFaceByBase64 为例 const request = new frs.DetectFaceByBase64Request();

const body = new frs.FaceDetectBase64Req();

body.withImageBase64("图片的base64编码");

request.withBody(body);

const result = client.detectFaceByBase64(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

说明

使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。

SDK demo 代码解析

● 人脸检测

const request = new frs.DetectFaceByBase64Request();

const body = new frs.FaceDetectBase64Req();

body.withImageBase64("图片的base64编码");

request.withBody(body);

const result = client.detectFaceByBase64(request);

result.then(result => {

(39)

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 人脸比对

const request = new frs.CompareFaceByBase64Request();

const body = new frs.FaceCompareBase64Req();

body.withImage1Base64("图片1的base64编码");

body.withImage2Base64("图片2的base64编码");

request.withBody(body);

const result = client.compareFaceByBase64(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 人脸搜索

const request = new frs.SearchFaceByBase64Request();

const body = new frs.FaceSearchBase64Req();

body.withImageBase64("图片的base64编码");

request.withBody(body);

const result = client.searchFaceByBase64(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 创建人脸库

const request = new frs.CreateFaceSetRequest();

const body = new frs.CreateFaceSetReq();

body.withFaceSetName("人脸库名称");

request.withBody(body);

const result = client.createFaceSet(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 查询人脸库

const request = new frs.ShowFaceSetRequest();

request.faceSetName = "人脸库名称";

const result = client.showFaceSet(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 查询所有人脸库

const request = new frs.ShowAllFaceSetsRequest();

const result = client.showAllFaceSets(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

● 删除人脸库

const request = new frs.DeleteFaceSetRequest();

request.faceSetName = "人脸库名称";

const result = client.deleteFaceSet(request);

result.then(result => {

console.log("JSON.stringify(result)::" + JSON.stringify(result));

}).catch(ex => {

console.log("exception:" + JSON.stringify(ex));

});

參考文獻

相關文件

In the inverse boundary value problems of isotropic elasticity and complex conductivity, we derive estimates for the volume fraction of an inclusion whose physical parameters

(6) (a) In addition to the powers of the Permanent Secretary under subsection (1) the Chief Executive in Council may order the Permanent Secretary to refuse to

Recommendation 14: Subject to the availability of resources and the proposed parameters, we recommend that the Government should consider extending the Financial Assistance

(g) the existing Financial Assistance Scheme for Post-secondary Students (FASP) be improved by providing post-secondary students with means-tested loans to cover their living

7 we define the critical exponents characterizing the singular behaviour of the parti- tion function and the susceptibilities of the order parameters as

You may spend more time chatting online than talking face-to-face with your friends or family.. So, are you a heavy

• How social media shape our relationship to and understanding of breaking news events. – How do we know if information shared on social media

Beauty Cream 9001, GaTech DVFX 2003.