写点什么

华为云 API 人脸识别服务 FRS 的感知力—偷偷藏不住的你

  • 2023-09-07
    广东
  • 本文字数:9225 字

    阅读完需:约 30 分钟

云服务、API、SDK,调试,查看,我都行


阅读短文您可以学习到:人工智能 AI 人脸的识别、检测、搜索、比对

1、IntelliJ IDEA 之 API 插件介绍

API 插件支持 VS Code IDE、IntelliJ IDEA 等平台、以及华为云自研 CodeArts IDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API 插件关联华为云服务下的 API Explorer、DevStar、CodeLabs、SDK 中心和 CLI 中心产品,致力于为开发者提供更稳定、快速、安全的编程体验。


在本插件中,我们提供了但不局限于如下的功能:


对接华为云 API 开放平台,支持用户检索 API、查看 API 文档、调试 API、以及提供 SDK 示例代码供用户学习如何使用 API。


提供华为云 SDK 代码片段补全功能,SDK 依赖包自动引入,加速用户集成华为云 API。


对接华为云开发体验馆 Codelabs,提供 500+云服务代码示例,向导式教程帮助用户快速学习。


说明:


在 IntelliJ IDEA 等系列平台和 VS Code IDE,华为云 API 插件的名称是 Huawei Cloud API。而在 CodeArts IDE,API 插件是 IDE 原生内置的,名称是华为云 API 开发套件。


API 插件在 IntelliJ IDEA 等系列平台和 VS Code IDE 的使用依赖底座插件,请提前安装底座插件。

2、API 插件安装--IntelliJ IDEA

2.1 IntelliJ IDEA 等平台

安装准备:下载并安装 JDK1.8 或更高版本。下载并安装 IntelliJ IDEA 2020.2 或更高版本。


须知:IntellIj 平台同时支撑包括 Goland、Pycharm 等在内的 IDE,若在其它相关 IDE 上开发,请下载配置好对应语言的编译器或者解释器。这里以 IDEA 为例介绍 IntelliJ 平台插件的安装流程,其他 IntelliJ 系列的 IDE 请参考 IDEA。


开始安装:


您可以在直接在 IDE 插件市场或者直接在 JetBrains 插件市场下载离线包安装。


https://developer.huaweicloud.com/develop/toolkit.html


IDE 安装


  1. 在 IntelliJ IDEA 顶部菜单栏中选择 File > Settings,在 Settings 对话框的左侧导航栏中单击 Plugins。

  2. Plugins 区域单击 Marketplace,在搜索栏中输入 Huawei Cloud API。

  3. Search Results 区域会出现 Huawei Cloud API,单击 Install,完成后重启 IDE。


离线包安装:


  1. 进入插件市场搜索 Huawei Cloud API,进入插件详情页,在 Versions 页签下选择想要版本的 API 插件,点击 Download 下载离线的插件压缩包保存到本地。。

  2. 在 IntelliJ IDEA 顶部菜单栏中选择 File > Settings,在 Settings 对话框的左侧导航栏中单击 Plugins。

  3. 在 Plugins 区域单击 ,再单击 Install Plugin from Disk...。

  4. 在 Choose Plugin File 对话框中选择离线安装包(不用解压),并按照 IntelliJ IDEA 安装页面的提示,完成后续安装步骤。


说明:若当前您想要安装插件的 IntelliJ IDE 已经在桌面打开,则进入插件市场搜索 Huawei Cloud API,进入插件详情页,在右上角会识别到本地已经打开的 IDE,点击相应按钮,在弹出的 IDE 窗口中点击 ok,则 IDE 后台会开始安装相应版本的 API 插件。


安装验证:在 IntelliJ 系列平台上安装插件成功后在左侧的导航栏中可以看到 Huawei Cloud Toolkit 图标,点击后面板会出现 Huawei Cloud API 的字样,则说明安装成功。

2.2 华为云 API

https://developer.huaweicloud.com/develop/toolkit.html


左侧展示 API 列表,可以查询所有 API,目前云服务 206,APIs9213

3、抓住偷偷藏不住的你

3.1 前期准备

华为云提供了人脸识别服务端 SDK,您可以直接集成服务端 SDK 来调用人脸识别服务的相关 API,从而实现对人脸识别服务的快速操作。


该示例展示了如何通过 Java 版 SDK 实现人脸识别。


开发前准备:


  • 已注册华为云,并完成实名认证 。

  • 已订阅人脸识别服务。

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

  • 已获取华为云账号对应的 Access Key(AK)和 Secret Access Key(SK)。请在华为云控制台“我的凭证 > 访问密钥”页面上创建和查看您的 AK/SK。具体请参见 访问密钥 。

  • 已获取直播服务对应区域的项目 ID,请在华为云控制台“我的凭证 > API 凭证”页面上查看项目 ID。具体请参见 API 凭证。


安装 SDK:


您可以通过 Maven 配置所依赖的人脸识别服务 SDK


<dependency>
<groupId>com.huaweicloud.sdk</groupId>
<artifactId>huaweicloud-sdk-frs</artifactId>
<version>3.1.19</version>
</dependency>
复制代码


开始使用:


导入依赖模块


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.*;
复制代码


初始化认证信息


public static ICredential getCredential(String ak, String sk) {
return new BasicCredentials()
.withAk(ak)
.withSk(sk);
}
复制代码


相关参数说明如下所示:


ak:华为云账号 Access Key。


sk:华为云账号 Secret Access Key 。


初始化人脸识别服务的客户端


public static FrsClient getClient(Region region, ICredential auth) {
// 初始化人脸识别服务的客户端
return FrsClient.newBuilder()
.withCredential(auth)
.withRegion(region) // 选择服务所在区域 FrsRegion.CN_NORTH_4
.build();
}
复制代码


相关参数说明如下所示:


service region: 服务所在区域,例如:


CN_NORTH_1 北京一


CN_NORTH_4 北京四


SDK demo 代码解析

3.2 人脸识别/检测

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());}3.2.1  人脸比对CompareFaceByBase64Request compareRequest = new CompareFaceByBase64Request();FaceCompareBase64Req faceCompareBase64Req = new FaceCompareBase64Req();faceCompareBase64Req.withImage1Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");faceCompareBase64Req.withImage2Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");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());}
复制代码

3.2.2 人脸搜索

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());}
复制代码


查询人脸库


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 faceAddFacesByBase64Request 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());    System.out.println(e.getErrorMsg());}
复制代码


删除人脸


//delete face by faceIdDeleteFaceByFaceIdRequest 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());}
复制代码


批量删除人脸


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);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 faceIdShowFacesByFaceIdRequest 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());}
复制代码

3.3 活体识别/检测

3.3.1 动作活体检测

//detect live by base64DetectLiveByBase64Request 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());    System.out.println(e.getErrorCode());    System.out.println(e.getErrorMsg());}
复制代码

3.3.2 默活体检测

//detect live face by base64DetectLiveFaceByBase64Request 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());}
复制代码

3.4 人脸搜索

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());}
复制代码

3.5 人脸比对

CompareFaceByBase64Request compareRequest = new CompareFaceByBase64Request();FaceCompareBase64Req faceCompareBase64Req = new FaceCompareBase64Req();faceCompareBase64Req.withImage1Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");faceCompareBase64Req.withImage2Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");compareRequest.withBody(faceCompareBase64Req);try {CompareFaceByBase64Request compareRequest = new CompareFaceByBase64Request();FaceCompareBase64Req faceCompareBase64Req = new FaceCompareBase64Req();faceCompareBase64Req.withImage1Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");faceCompareBase64Req.withImage2Base64("/9j/4AAQSkZJRgABAQAAAQABAAD...");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());}    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());}
复制代码

4、偷偷藏不住的你

身份验证


使用人脸检测与比对功能,可进行身份核实,适用于机场、海关等人证合一验证场景。



电子考勤


人脸检测及比对功能适用于客户企业对员工进行电子考勤。


客流分析


客流分析对于商场具有重要价值。基于人脸识别、搜索技术,帮助客户精准营销。

5、参考文献

https://support.huaweicloud.com/usermanual-cbs/cbs_01_0029.html


https://console.huaweicloud.com/cbs/?region=cn-north-4#/cbs/management/skills

6、体验插件的魅力

华为云 devkit 已上线:

用户头像

公众号:华为云PaaS服务,有见面礼等你哦! 2022-09-26 加入

还未添加个人简介

评论

发布
暂无评论
华为云API人脸识别服务FRS的感知力—偷偷藏不住的你_人工智能_华为云PaaS服务小智_InfoQ写作社区