Node.js SDK
本章节介绍新版Node.js SDK,您可以参考本章节进行快速集成开发。
准备工作
- 注册华为账号并开通华为云,并完成实名认证,账号不能处于欠费或冻结状态。
- 已具备开发环境,支持Node 10.16.1 及其以上版本。
- 登录“我的凭证 > 访问秘钥”页面,获取Access Key(AK)和Secret Access Key(SK)。
图1 获取AK、SK
- 登录“我的凭证”页面,获取“IAM用户名”、“账号名”以及待使用区域的“项目ID”。调用服务时会用到这些信息,请提前保存。
本样例以“华北-北京四”区域为例,获取对应的项目ID(project_id)。
图2 我的凭证
安装SDK
使用SDK前,需要安装“@huaweicloud/huaweicloud-sdk-core”和“@huaweicloud/huaweicloud-sdk-frs”。
推荐您使用 npm 安装 SDK。
npm install @huaweicloud/huaweicloud-sdk-core npm i @huaweicloud/huaweicloud-sdk-frs
开始使用
在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以通过运行以下命令来检查并更新SDK至最新版本。
npm list @huaweicloud/huaweicloud-sdk-core npm list @huaweicloud/huaweicloud-sdk-frs npm update @huaweicloud/huaweicloud-sdk-core npm update @huaweicloud/huaweicloud-sdk-frs
详细的SDK介绍请参见SDK中心、Node.js SDK使用指导、Node.js SDK视频指导。
- 导入依赖模块
const core = require('@huaweicloud/huaweicloud-sdk-core'); const frs = require("@huaweicloud/huaweicloud-sdk-frs");
- 配置客户端链接参数
- 默认配置
const client = frs.FrsClient.newBuilder()
- 网络代理(可选)
// 使用代理服务器(可选) client.withProxyAgent("http://username:password@proxy.huaweicloud.com:8080")
- SSL配置(可选)
// 配置跳过服务端证书验证(可选) process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
- 默认配置
- 配置认证信息
配置AK、SK、project_id信息。华为云通过AK识别用户的身份,通过SK对请求数据进行签名验证,用于确保请求的机密性、完整性和请求者身份的正确性。AK、SK和project_id获取方法请参见准备工作。
const ak = process.env.HUAWEICLOUD_SDK_AK; const sk = process.env.HUAWEICLOUD_SDK_SK; const project_id = process.env.PROJECT_ID; const credentials = new core.BasicCredentials() .withAk(ak) .withSk(sk) .withProjectId(project_id)
- 认证用的 ak 和sk 硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
- 本示例以 ak 和 sk 保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK,HUAWEICLOUD_SDK_SK和PROJECT_ID。
图3 Windows环境新建环境变量
- 初始化客户端
指定云服务endpoint方式
// 指定终端节点,以 FRS 服务北京四的 endpoint 为例 const endpoint = "https://face.cn-north-4.myhuaweicloud.com"; const client = frs.FrsClient.newBuilder() .withCredential(credentials) .withEndpoint(endpoint) .build();
endpoint是华为云各服务应用区域和各服务的终端节点,详情请查看 地区和终端节点 。
- 发送请求并查看响应
// 以调用人脸检测接口 DetectFaceByBase64 为例 const request = new frs.DetectFaceByBase64Request(); const body = new frs.FaceDetectBase64Req(); body.withImageBase64("图片的base64编码"); request.withBody(body); const result = client.detectFaceByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
使用人脸比对SDK时,image1、image2参数需为相同类型,即同为url、base64或file。
SDK demo 代码解析
- 人脸检测
const request = new frs.DetectFaceByBase64Request(); const body = new frs.FaceDetectBase64Req(); body.withImageBase64("图片的base64编码"); request.withBody(body); const result = client.detectFaceByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 人脸比对
const request = new frs.CompareFaceByBase64Request(); const body = new frs.FaceCompareBase64Req(); body.withImage1Base64("图片1的base64编码"); body.withImage2Base64("图片2的base64编码"); request.withBody(body); const result = client.compareFaceByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 人脸搜索
const request = new frs.SearchFaceByBase64Request(); const body = new frs.FaceSearchBase64Req(); body.withImageBase64("图片的base64编码"); request.withBody(body); const result = client.searchFaceByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 创建人脸库
const request = new frs.CreateFaceSetRequest(); const body = new frs.CreateFaceSetReq(); body.withFaceSetName("人脸库名称"); request.withBody(body); const result = client.createFaceSet(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 查询人脸库
const request = new frs.ShowFaceSetRequest(); request.faceSetName = "人脸库名称"; const result = client.showFaceSet(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 查询所有人脸库
const request = new frs.ShowAllFaceSetsRequest(); const result = client.showAllFaceSets(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 删除人脸库
const request = new frs.DeleteFaceSetRequest(); request.faceSetName = "人脸库名称"; const result = client.deleteFaceSet(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 添加人脸
const request = new frs.AddFacesByBase64Request(); const body = new frs.AddFacesBase64Req(); body.withImageBase64("图片的base64编码"); request.withBody(body); const result = client.addFacesByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 删除人脸
const request = new frs.DeleteFaceByFaceIdRequest(); request.faceSetName = "人脸库名称"; request.faceId = "人脸ID"; const result = client.deleteFaceByFaceId(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 批量删除人脸
const request = new frs.BatchDeleteFacesRequest(); request.faceSetName = "人脸库名称"; const body = new frs.DeleteFacesBatchReq(); body.withFilter("过滤条件"); request.withBody(body); const result = client.batchDeleteFaces(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 更新人脸
const request = new frs.UpdateFaceRequest(); request.faceSetName = "人脸库名称"; const body = new frs.UpdateFaceReq(); body.withFaceId("人脸库ID"); request.withBody(body); const result = client.updateFace(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 查询人脸
const request = new frs.ShowFacesByFaceIdRequest(); request.faceSetName = "人脸库名称"; request.faceId = "人脸ID"; const result = client.showFacesByFaceId(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 动作活体检测
const request = new frs.DetectLiveByBase64Request(); const body = new frs.LiveDetectBase64Req(); body.withActions("动作代码顺序列表"); body.withVideoBase64("视频数据的base64编码"); request.withBody(body); const result = client.detectLiveByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
- 静默活体检测
const request = new frs.DetectLiveFaceByBase64Request(); const body = new frs.LiveDetectFaceBase64Req(); body.withImageBase64("图片的base64编码"); request.withBody(body); const result = client.detectLiveFaceByBase64(request); result.then(result => { console.log("JSON.stringify(result)::" + JSON.stringify(result)); }).catch(ex => { console.log("exception:" + JSON.stringify(ex)); });
SDK代码自动生成
API Explorer提供API检索及平台调试,支持全量快速检索、可视化调试、帮助文档查看和在线咨询。
您只需要在API Explorer中修改接口参数,即可自动生成对应的代码示例。同时,可在集成开发环境CloudIDE中完成代码的构建、调试和运行等操作。