云服务器内容精选
-
开始使用 详细的SDK介绍,使用异步客户端,配置日志请参见 SDK中心 、Python SDK使用指导、Python SDK使用视频。 导入依赖模块 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 * import os 配置认证信息 配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。 def GetCredential(ak, sk): return BasicCredentials(ak, sk) 初始化认证信息: ak = os.environ.get("HUAWEICLOUD_SDK_AK") sk = os.environ.get("HUAWEICLOUD_SDK_SK") credentials = GetCredential(ak, sk) 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 图3 Windows环境新建环境变量 初始化客户端 指定region方式 # 初始化 人脸识别服务 的客户端,并选择服务部署区域 def GetClient(): client = FrsClient.new_builder(FrsClient) \ .with_credentials(credentials) \ .with_region(FrsRegion.value_of("cn-north-4")) \ .build() return client 服务部署区域请参见终端节点。 发送请求并查看响应 # 以调用人脸检测 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。 异常处理 表1 异常处理 一级分类 一级分类说明 二级分类 二级分类说明 ConnectionException 连接类异常 HostUnreachableException 网络不可达、被拒绝。 SslHandShakeException SSL认证异常。 RequestTimeoutException 响应超时异常 CallTimeoutException 单次请求,服务器处理超时未返回。 RetryOutageException 在重试策略消耗完成后,仍无有效的响应。 ServiceResponseException 服务器响应异常 ServerResponseException 服务端内部错误,Http响应码:[500,]。 ClientRequestException 请求参数不合法,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代码解析 人脸检测 # detect face by base64 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) # detect face by file def detectFaceByFile(): try: request = DetectFaceByFileRequest() with open("/root/picture.jpg", "rb") as f: request.body = DetectFaceByFileRequestBody(image_file=FormFile(f)) response = client.detect_face_by_file(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) 人脸比对 # compare face by base64 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) # compare face by file def compareFaceByFile(): try: request = CompareFaceByFileRequest() with open("/root/picture1.jpg", "rb") as f1: with open("/root/picture2.jpg", "rb") as f2: request.body = CompareFaceByFileRequestBody(image1_file=FormFile(f1), image2_file=FormFile(f2)) response = client.compare_face_by_file(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) 人脸搜索 # search face by base64 def searchFaceByBase64(): try: request = SearchFaceByBase64Request() request.face_set_name = "face_set_name" listFaceSearchBase64ReqReturnFieldsbody = [ "timestamp" ] 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) # search face by file def searchFaceByFile(): try: request = SearchFaceByFileRequest() request.face_set_name = "face_set_name" with open("/root/picture.jpg", "rb") as f: request.body = SearchFaceByFileRequestBody( return_fields="[\"timestamp\"]", filter="timestamp:10", top_n=10, image_file=FormFile(f) ) response = client.search_face_by_file(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) 添加人脸 # add face by base64 def addFacesByBase64(): try: request = AddFacesByBase64Request() 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) # add face by file def addFacesByFile(): try: request = AddFacesByFileRequest() request.face_set_name = "face_set_name" with open("/root/picture.jpg", "rb") as f: request.body = AddFacesByFileRequestBody( external_fields="{\"timestamp\":12}", image_file=FormFile(f) ) response = client.add_faces_by_file(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) 查询人脸 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) 动作活体检测 # detect live by base64 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) # detect live by file def detectLiveByFile(): try: request = DetectLiveByFileRequest() with open("/root/video.mp4", "rb") as f: request.body = DetectLiveByFileRequestBody( video_file=FormFile(f), actions="1,2,3,4" ) response = client.detect_live_by_file(request) print(response) except exceptions.ClientRequestException as e: print(e.status_code) print(e.request_id) print(e.error_code) print(e.error_msg) 静默活体检测 # detect live face by base64 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) # detect live face by file def detectLiveFaceByFile(): try: request = DetectLiveFaceByFileRequest() with open("/root/picture.jpg", "rb") as f: request.body = DetectLiveFaceByFileRequestBody( image_file=FormFile(f) ) response = client.detect_live_face_by_file(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介绍,使用异步客户端,配置日志请参见SDK中心、Java SDK使用指导、Java SDK使用视频。 导入依赖模块 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.*; 配置认证信息 配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。 public static ICredential getCredential(String ak, String sk) { return new BasicCredentials() .withAk(ak) .withSk(sk); } 初始化认证信息: String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); ICredential credential = getCredential(ak, sk); 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 图3 Windows环境新建环境变量 初始化客户端 指定region方式 public static FrsClient getClient(Region region, ICredential auth) { // 初始化 人脸识别 服务的客户端 FrsClient client = FrsClient.newBuilder() .withCredential(auth) .withRegion(FrsRegion.valueOf("cn-north-4")) // 选择服务所在区域 FrsRegion.valueOf("cn-north-4") .build(); return client; } 服务部署区域请参见终端节点。 发送请求并查看响应 // 以调用人脸检测 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。 异常处理 表1 异常处理 一级分类 一级分类说明 二级分类 二级分类说明 ConnectionException 连接类异常 HostUnreachableException 网络不可达、被拒绝。 SslHandShakeException SSL认证异常。 RequestTimeoutException 响应超时异常 CallTimeoutException 单次请求,服务器处理超时未返回。 RetryOutageException 在重试策略消耗完成后,仍无有效的响应。 ServiceResponseException 服务器响应异常 ServerResponseException 服务端内部错误,Http响应码:[500,]。 ClientRequestException 请求参数不合法,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 推荐使用 Composer 安装 SDK 。 Composer 是 php 的依赖管理工具,允许您在项目中声明依赖关系并安装这些依赖: // 安装 Composer curl -sS https://getcomposer.org/installer | php // 安装 PHP SDK composer require huaweicloud/huaweicloud-sdk-php 安装完毕后,你需要引入 Composer 的自动加载文件: require 'path/to/vendor/autoload.php';
-
开始使用 详细的SDK介绍,使用异步客户端,配置日志请参见SDK中心、.NET SDK使用指导、.NET SDK视频指导。 导入依赖模块 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; 配置客户端连接参数 默认配置 // 使用默认配置 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; 配置认证信息 配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。 const string ak = Environment.GetEnvironmentVariable("HUAWEICLOUD_SDK_AK"); const string sk = Environment.GetEnvironmentVariable("HUAWEICLOUD_SDK_SK"); var auth = new BasicCredentials(ak, sk); 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 图3 Windows环境新建环境变量 初始化客户端 指定云服务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是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和终端节点 。 发送请求并查看响应 // 以调用人脸检测接口 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。 异常处理 表1 异常处理 一级分类 一级分类说明 二级分类 二级分类说明 ConnectionException 连接类异常 HostUnreachableException 网络不可达、被拒绝。 SslHandShakeException SSL认证异常。 RequestTimeoutException 响应超时异常 CallTimeoutException 单次请求,服务器处理超时未返回。 RetryOutageException 在重试策略消耗完成后,仍无有效的响应。 ServiceResponseException 服务器响应异常 ServerResponseException 服务端内部错误,Http响应码:[500,]。 ClientRequestException 请求参数不合法,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); Console.WriteLine(clientRequestException.ErrorCode); Console.WriteLine(clientRequestException.ErrorMsg); } catch (ConnectionException connectionException) { Console.WriteLine(connectionException.ErrorMessage); }
-
安装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
-
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); } 人脸搜索 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) { 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() { 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) { 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 { }; 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介绍请参见SDK中心、Go SDK使用指导、Go SDK使用视频。 导入依赖模块 import ( "fmt" "os" "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" ) 配置认证信息 配置AK、SK信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK获取方法请参见准备工作。 func GetCredential(ak, sk string) basic.Credentials { // Init Auth Info return basic.NewCredentialsBuilder(). WithAk(ak). WithSk(sk). Build() } 初始化认证信息: ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") client := GetCredential(ak, sk) 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 图3 Windows环境新建环境变量 初始化客户端 指定region方式 // # 初始化人脸识别服务的客户端,并选择服务部署区域 func GetClient(auth basic.Credentials) *frs.FrsClient { client := frs.NewFrsClient( frs.FrsClientBuilder(). WithRegion(region.ValueOf('cn-north-4')). WithCredential(auth). Build()) return client } 服务部署区域请参见终端节点。 发送请求并查看下响应 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。 异常处理 表1 异常处理 一级分类 一级分类说明 ServiceResponseError 服务响应异常 url.Error url异常 // 捕获和处理不同类型的异常 response, err := client.DetectFaceByBase64(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
-
SDK demo代码解析 人脸检测 // detect face by base64 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) } // detect face by file file, err := os.Open("/root/picture.jpg") if err != nil { fmt.Println(err) } defer file.Close() request := &model.DetectFaceByFileRequest{} request.Body = &model.DetectFaceByFileRequestBody{ Attributes: def.NewMultiPart(attributes), ImageFile: def.NewFilePart(file), } response, err := client.DetectFaceByFile(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } 人脸比对 // compare face by base64 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) } // compare face by file file1, err := os.Open("/root/picture1.jpg") if err != nil { fmt.Println(err) } defer file1.Close() file2, err := os.Open("/root/picture2.jpg") if err != nil { fmt.Println(err) } defer file2.Close() request := &model.CompareFaceByFileRequest{} request.Body = &model.CompareFaceByFileRequestBody{ Image1File: def.NewFilePart(file1), Image2File: def.NewFilePart(file2), } response, err := client.CompareFaceByFile(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } 人脸搜索 // face search by base64 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) } // face search by file file, err := os.Open("/root/picture.jpg") if err != nil { fmt.Println(err) } defer file.Close() request := &model.SearchFaceByFileRequest{} request.FaceSetName = "face_set_name" request.Body = &model.SearchFaceByFileRequestBody{ ReturnFields: def.NewMultiPart("[\"timestamp\"]"), Filter: def.NewMultiPart("timestamp:10"), ImageFile: def.NewFilePart(file), } response, err := client.SearchFaceByFile(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) 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) } 添加人脸 // add face by base64 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) } // add face by file file, err := os.Open("/root/picture.jpg") if err != nil { fmt.Println(err) } defer file.Close() request := &model.AddFacesByFileRequest{} request.FaceSetName = "face_set_name" request.Body = &model.AddFacesByFileRequestBody{ ExternalFields: def.NewMultiPart("{\"timestamp\":100}"), ImageFile: def.NewFilePart(file), } response, err := client.AddFacesByFile(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", 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 by file file, err := os.Open("/root/video.mp4") if err != nil { fmt.Println(err) } defer file.Close() request := &model.DetectLiveByFileRequest{} request.Body = &model.DetectLiveByFileRequestBody{ Actions: def.NewMultiPart(action), VideoFile: def.NewFilePart(file), } response, err := client.DetectLiveByFile(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) } //detect live face by file file, err := os.Open("/root/picture.jpg") if err != nil { fmt.Println(err) } defer file.Close() request := &model.DetectLiveFaceByFileRequest{} request.Body = &model.DetectLiveFaceByFileRequestBody{ ImageFile: def.NewFilePart(file), } response, err := client.DetectLiveFaceByFile(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) }
-
参数说明 表1 结构格式说明表 名称 类型 说明 age Integer 年龄。 dress List of strings 包含glass和hat两个属性结果。 glass String 是否戴眼镜: yes:戴眼镜 none:未戴眼镜 unknown:未知 hat String 是否戴帽子: yes:戴帽子 none:未戴帽子 unknown:未知 mask String 是否戴口罩: yes:戴口罩 none:未戴口罩 unknown:未知 hair String 发型: long:长发 short:短发 unknown:未知 beard String 胡须: yes:有胡须 none:无胡须 unknown:未知 phototype String 图片类型: idcard:证件照 monitor:摄像头监控 internet photo:网络图片 smile String 笑脸。 quality FaceQuality 图片中人脸的遮挡度、模糊度、光照强度、姿态角度。 expression FaceExpression 人脸表情,包括中性、高兴、害怕、惊讶、伤心、生气、厌恶。 face_angle Integer 人脸图片旋转角(顺时针偏转角度),支持0°、90°、180°和270°图片旋转。 dress List of strings 包含glass和hat两个属性结果。 glass String 是否带眼镜: yes:带眼镜 dark:带墨镜 none:未戴眼镜 unknown:未知 hat String 是否带帽子: yes:带帽子 none:未戴帽子 unknown:未知 headpose List of doubles 人脸轮廓坐标值。 pitch_angle Double 围绕X轴旋转,俯仰角,范围[-180,180]。 roll_angle Double 围绕Z轴旋转,翻滚角,范围[-180,180]。 yaw_angle Double 围绕Y轴旋转,偏航角,范围[-180,180]。
-
请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 用于获取操作API的权限。获取方法请参见认证鉴权。 Content-Type 是 String 发送的实体的MIME类型,参数值为“application/json”。 Enterprise-Project-Id 否 String 企业项目ID。FRS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用,进行分账,当前仅支持按需计费模式。 获取方法:进入“企业项目管理”页面,单击企业项目名称,在企业项目详情页获取Enterprise-Project-Id(企业项目ID)。 说明: 创建企业项目后,在传参时,有以下三类场景。 携带正确的ID,正常使用FRS服务,账单的企业项目会被分类到企业ID对应的企业项目中。 携带格式正确但不存在的ID,正常使用FRS服务,账单的企业项目会显示对应不存在的企业项目ID。 不携带ID或格式错误ID(包含特殊字符等),正常使用FRS服务,账单的企业项目会被分类到"default"中。 表3 请求Body参数 参数名 是否必选 参数类型 说明 image_url 与image_file、image_base64三选一 String 图片的URL路径,目前仅支持华为云上OBS的URL,使用时只需保证FRS有权限读取该OBS桶的数据。开通读取权限的操作请参见服务授权。 OBS URL格式如下,可在OBS控制台获取。 https://BucketName.obs.xxxx.com/ObjectName image_file 与image_url、image_base64三选一 File 本地图片文件,要求: 图片不能超过8MB,建议小于1MB。 上传文件时,请求格式为multipart。 image_base64 与image_file、image_url三选一 String 图像数据,Base64编码,要求: Base64编码后大小不超过8MB,建议小于1MB。 图片为JPG/JPEG/BMP/PNG格式。 attributes 否 String 是否返回人脸属性,希望获取的属性列表,多个属性间使用逗号(,)隔开。目前支持的属性有: 2:年龄 4:装束(帽子、眼镜) 6:口罩 7:发型 8:胡须 11:图片类型 12:质量 13:表情 21:人脸图片旋转角(顺时针偏转角度),支持0°、90°、180°和270°图片旋转。
-
响应参数 状态码:200 表4 响应Body参数 参数 参数类型 描述 faces Array of DetectFace objects 检测到的人脸。 调用失败时无此字段。 表5 DetectFace 参数 参数类型 描述 bounding_box BoundingBox object 人脸在图像中的位置。 attributes Attributes object 人脸关键属性,比如头部姿态。 表6 BoundingBox 参数 参数类型 描述 width Integer 人脸图像所在矩形框的宽度。 top_left_y Integer 矩形框左上角纵坐标。 top_left_x Integer 矩形框左上角横坐标。 height Integer 人脸图像所在矩形框的高度。 表7 Attributes 参数 参数类型 描述 dress Dress object 包含glass和hat两个属性结果。 glass String 是否带眼镜: yes:带眼镜 dark:带墨镜 none:未戴眼镜 unknown:未知 hat String 是否戴帽子: yes:戴帽子 none:未戴帽子 unknown:未知 age Integer 年龄。 mask String 是否戴口罩: yes:戴口罩 none:未戴口罩 unknown:未知 beard String 胡须: yes:有胡须 none:无胡须 unknown:未知 phototype String 图片类型: idcard:证件照 monitor:摄像头监控 internet photo:网络图片 quality FaceQuality object 图片中人脸的遮挡度、模糊度、光照强度、姿态角度。 hair String 发型: long:长发 short:短发 unknown:未知 expression expression object 人脸表情,包括中性、高兴、害怕、惊讶、伤心、生气、厌恶。 face_angle Integer 人脸图片旋转角(顺时针偏转角度),支持0°、90°、180°和270°图片旋转。 表8 Dress 参数 参数类型 描述 glass String 是否带眼镜: yes:带眼镜 dark:带墨镜 none:未戴眼镜 unknown:未知 hat String 是否戴帽子: yes:戴帽子 none:未戴帽子 unknown:未知 表9 FaceQuality 参数 参数类型 描述 推荐值 total_score Double 人脸质量总分,取值范围[0-1],分值越大质量越高。 大于0.45 blur Double 模糊度,取值范围[0-1],分值越大模糊问题越严重。 小于0.3 pose Double 姿态,取值范围[0-1],分值越大姿态问题越严重。 小于0.3 occlusion Double 遮挡,取值范围[0-1],分值越大遮挡问题越严重。 小于0.3 illumination Double 光照,取值范围[0-1],分值越大光照问题越严重。 小于0.3 表10 expression 参数 参数类型 描述 type String 人脸表情类型: neutral:中性 happy:高兴 fear:害怕 surprise:惊讶 sad:伤心 angry:生气 disgust:厌恶 unknown:图片质量问题导致未识别 probability Double 表情置信度,取值范围[0-1]。 状态码: 400 表11 响应Body参数 参数 参数类型 描述 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
-
人脸搜索 人脸搜索给用户提供了人脸集操作相关的API。用户可以通过创建人脸集合接口创建属于用户的人脸集;通过添加人脸接口向人脸集中添加图片;通过查询人脸搜索接口,返回与输入人脸相似度最高的N张人脸图片;通过删除人脸接口从人脸集中删除用户不需要的人脸特征;通过删除人脸集接口删除用户创建的人脸集。 人脸搜索可用于企业、住宅的安全管理等多种场景,但由于翻拍照片和本人照片人脸搜索服务无法感知,不可用于防翻拍场景。 图3 人脸搜索示意图
-
参数说明 表1 结构格式说明表 名称 类型 说明 alive Boolean 是否是活体。 picture String 检测出最大人脸的图片base64。 actions List 动作列表。详细参数请参见表 字段要素说明。 表2 actions字段要素说明 名称 类型 说明 action Integer 动作编号,取值范围:[1,2,3,4],其中: 1:左摇头 2:右摇头 3:点头 4:嘴部动作 confidence Double 系统对检测对象是否为活体的判定置信程度,取值范围为0到1。置信度越高,表示系统越确定检测对象是一个真实的活体。可结合alive参数进行判断,alive返回true表示为活体。
-
操作步骤 进入 API Explorer 平台获取 IAM 用户Token接口。 选择Region,编辑获取用户Token接口的请求参数,进行具体的API调用。 Region 在Region下拉列表选取您需要访问的区域。 Params nocatalog为非必填,如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。 Body 通过切换输入方式可以选择表单填写或文本输入请求体。 表单填写:通过表单填写完成请求体,无需了解JSON语法,参考示例填写参数值。 文本输入:通过文本输入完成请求体,可以直接在编辑框内编写JSON格式的请求体。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "IAM用户所属账号名" }, "name": "IAM用户名", "password": "IAM用户的登录密码" } } }, "scope": { "project": { "name": "人脸识别服务部署的区域,如cn-nouth-4" } } } } 参数说明请参见:请求参数。 如果是第三方系统用户,没有在本系统设置登录密码,可以通过系统登录页面的找回密码功能设置登录密码,并在password中输入新设置的密码。 单击调试,发送API请求。 在返回的响应体中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 关于Token有效期的详细说明请参见获取IAM用户Token(使用密码)。 如果返回错误码,例如401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格