云服务器内容精选
-
操作步骤 进入 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中请求参数填写正确后重新发送请求。
-
操作步骤 编辑获取用户Token接口的Request URL、Header、Body,进行具体的API调用。 Request URL 格式为:https://IAM地区与终端节点地址/API接口URI 访问网址:地区与终端节点,获取IAM区域与终端节点地址。 图1 IAM区域与终端节点 访问网址:获取用户Token,获取API接口的URI。 以cn-north-1为例,则Request URL为:https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens 选择API接口获取方式,并将Request URL填写至postman中。 图2 Request URL示例 Request Header key:Content-Type,value:application/json;charset=utf8 图3 Headers参数示例 Request Body 修改Request Body样例中参数。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "账号名" }, "name": "IAM用户名", "password": "IAM用户密码" } } }, "scope": { "project": { "name": " 人脸识别 服务部署的区域,如cn-nouth-4" } } } } 登录 获取Token 的IAM用户,并获取账号名、IAM用户名,方法请参见:获取账号、IAM用户、项目名称和ID。 单击“Send”,发送API请求。 图4 发送API请求 在返回的响应头中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 图5 获取Token 如果返回值为401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。 如果返回值为400,表示body体格式错误,请检查body体格式是否满足json语法。详细错误请参考获取token返回值。 如果您的调试结果异常,提示“Header Overflow”,可以参考故障处理解决Header溢出问题。
-
为子用户分配权限,子用户自行开通FRS服务 使用主账号登录IAM服务控制台。 打开用户组列表,找到子用户所在的用户组,单击该用户组的“授权”操作。 勾选需要授予用户组的权限,单击“确定”,完成用户组授权。FRS全部系统权限请参见权限管理。 当现有策略不满足时,可使用FRS自定义策略。 子账户被赋予相应权限后,可使用子账户登录FRS控制台,开通所需的服务。 开通服务:主账号开通FRS的某个服务时,子账号未开通此服务,则子账号无法调用此服务,需子账号开通此服务后才可调用。 关闭服务:主账号关闭FRS的某个服务时,子账号未关闭此服务,则子账号依然可以调用此服务,并产生相应费用。如果需要暂停此服务,需要对应的子账号也关闭此服务。
-
安装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';
-
数值类型 数值类型的范围查询,[]包含两端点值,{}不包含两端点值。 rowkey:[1 TO *] 大于等于1 rowkey:[* TO 1] 小于等于1 rowkey:[1 TO 10] 1到10 Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "number:[1 TO *]" } 单值。 rowkey:1 值为1 Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "number:10" } 多条件,使用()区分优先级。 rowkey:[1 TO *] && externalImageID:1 (rowkey:[1 TO *] && externalImageID:1) || timestamp:1000 rowkey:[1 TO *] && (externalImageID:1 || timestamp:1000) Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "number:[1 TO 20] && external_image_id:test" } 非,需要在非语句前后加括号。 externalImageID:1 && (!rowkey:2) Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "external_image_id:test && (!number:10)" }
-
字符串类型 单值 title:quick Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "id:zhangsan" } 多条件 title:quick && color:brown Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "id:zhangsan && number:30" } 非,使用括号分隔 (!color:brown) Request Body示例: { "image_base64":"/9j/4AAQSkZJRgABAQAAAQABAAD...", "filter" : "(!id:zhangsan)" }
-
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中心 、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介绍,使用异步客户端,配置日志请参见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 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中心、.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代码解析 人脸检测 // 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) }
-
开始使用 详细的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) }
-
响应参数 状态码:200 表4 响应Body参数 参数 参数类型 描述 face_set_id String 人脸库ID。 调用失败时无此字段。 face_set_name String 人脸库名称。 调用失败时无此字段。 faces Array of FaceSetFace objects 人脸库当中的人脸结构,详见FaceSetFace。 调用失败时无此字段。 表5 FaceSetFace 参数 参数类型 描述 bounding_box BoundingBox object 人脸在图像中的位置。 BoundingBox结构见BoundingBox。 external_fields Object 用户添加的额外字段。 external_image_id String 人脸所在的外部图片ID。 face_id String 人脸ID,由系统内部生成的唯一ID。 表6 BoundingBox 参数 参数类型 描述 width Integer 矩形框宽度。 top_left_y Integer 矩形框左上角纵坐标。 top_left_x Integer 矩形框左上角横坐标。 height Integer 矩形框高度。 状态码: 400 表7 响应Body参数 参数 参数类型 描述 error_code String 调用失败时的错误码,具体请参考错误码。 调用成功时无此字段。 error_msg String 调用失败时的错误信息。 调用成功时无此字段。
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格