华为云人脸识别服务FRS对接使用完全指南
1. 人脸识别服务FRS概述
华为云人脸识别服务(Face Recognition Service,简称FRS)是一种基于计算机视觉技术的云服务,能够在图像中快速检测人脸、分析人脸关键点信息、获取人脸属性、实现人脸的精确比对和检索。该服务可广泛应用于身份验证、人脸识别支付、人脸识别考勤、人脸识别门禁系统、安防监控等场景。
FRS服务需要用户通过调用API接口,识别图片中的人脸信息,然后返回JSON格式的识别结果,用户需要通过编码将识别结果对接到业务系统。FRS目前支持的编程语言SDK包括Java、Python、Go、.NET、Node.js、PHP、C++等多个版本。
1.1 核心功能
FRS服务主要提供以下四大核心能力:
- 人脸检测:检测图像中的人脸,返回人脸在图像中的位置( bounding_box )、人脸关键点坐标以及人脸属性(年龄、性别、表情等)。
- 人脸比对:将两张人脸图像进行比对,判断是否为同一个人,返回比对置信度分数。
- 人脸搜索:在人脸库中搜索与目标人脸最相似的人脸,返回匹配结果及相似度。
- 活体检测:分为动作活体检测和静默活体检测,用于判断图像或视频中的人脸是否来自真人而非照片、视频等翻拍手段。
1.2 使用流程
使用FRS服务的整体流程如下:(1)开通FRS服务;(2)准备人脸数据;(3)调用API或集成SDK进行开发;(4)统计API使用量;(5)根据业务需要关闭服务或持续运营。
2. 服务开通与前置准备
要使用华为云人脸识别服务,首先需要完成服务开通和一系列前置配置工作。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2.1 开通FRS服务
登录华为云人脸识别管理控制台,根据业务需求选择服务部署区域,开通所需的服务(如人脸检测、人脸比对等),单击右侧的"开通服务"按钮即可。服务开通一次即可,后续使用时无需再重复开通。
在开通服务时,可选择是否进行OBS委托授权。仅当您需要从对象存储服务(OBS)中读取图片数据时,才需要进行委托授权。如果您的图片来自本地文件或Base64编码,则无需配置OBS委托。
2.2 获取终端节点(Endpoint)
终端节点是调用FRS API的必要参数,不同区域的服务终端节点不同。您需要登录"地区和终端节点"页面,查询人脸识别服务在各区域对应的Endpoint地址。例如,"中国-香港"区域的人脸检测服务请求URL为:https://face.ap-southeast-1.myhuaweicloud.com/v2/{project_id}/face-detect。服务部署的区域必须与调用的服务所在区域一致。
2.3 获取项目ID(Project ID)
项目ID是调用FRS API时URL路径中的必填参数。登录华为云控制台,进入"我的凭证 > API凭证"页面,即可查看当前账号在各区域的项目ID。
2.4 获取AK/SK访问密钥
AK(Access Key ID)和SK(Secret Access Key)是调用华为云API的身份凭证,用于请求签名认证。获取方式如下:
- 登录华为云控制台,进入"我的凭证"页面。
- 选择"管理访问密钥 > 新增访问密钥"。
- 系统会生成并下载一个包含AK和SK的 credentials.csv 文件,请妥善保管。
如果之前已经生成过AK/SK,可在"我的凭证"页面查看已有密钥。AK/SK认证是FRS SDK Demo中默认采用的鉴权方式。
3. API调用方式详解
华为云FRS提供了两种主要的调用方式:直接调用REST API和通过SDK进行集成。对于初次体验的用户,推荐使用Postman等工具零编码快速体验API功能。
3.1 通过Postman调用API(以人脸检测为例)
使用Postman调用FRS API的步骤如下:
步骤1:Token认证鉴权
在Postman中新建请求,请求方式为POST,输入Token获取URL(格式为 https://iam.{region}.myhuaweicloud.com/v3/auth/tokens)。在Headers中添加 Content-Type: application/json。在Body的raw模式下输入以下JSON:
{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "your_username",
"password": "your_password",
"domain": {
"name": "your_domain_name"
}
}
}
},
"scope": {
"project": {
"name": "ap-southeast-1"
}
}
}
}发送请求后,从响应头中获取 X-Subject-Token 的值,即Token凭证(有效期24小时)。
步骤2:调用人脸检测API
新建请求,请求方式为POST,URL为:https://face.{region}.myhuaweicloud.com/v2/{project_id}/face-detect。在Headers中添加:
Content-Type: application/jsonX-Auth-Token: {上一步获取的Token值}
在Body的raw模式下,传入图片的Base64编码:
{
"image_base64": "/9j/4AAQSkZJRgABAgEASABIAAD/..."
}发送请求后,即可在响应中看到人脸检测结果,包括人脸位置、关键点坐标、年龄、性别等属性信息。
3.2 通过Java SDK调用
FRS Java SDK是对FRS REST API的封装,可大幅简化开发工作。
环境准备:
- 从GitHub下载FRS Java SDK:
https://github.com/huaweicloud/huaweicloud-sdk-java-frs。 - 安装JDK 1.8及以上版本,并配置Eclipse或IntelliJ IDEA等Java开发环境。
- 将下载的SDK工程导入IDE,添加JAR依赖。
配置AK/SK:
// 在Main函数中配置AK/SK
String ak = "your_access_key_id";
String sk = "your_secret_access_key";
String endpoint = "face.ap-southeast-1.myhuaweicloud.com";
String region = "ap-southeast-1";
String projectId = "your_project_id";人脸检测代码示例:
import com.huaweicloud.sdk.frs.v2.FrsClient;
import com.huaweicloud.sdk.frs.v2.model.DetectFaceByBase64Request;
import com.huaweicloud.sdk.frs.v2.model.DetectFaceByBase64Response;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.region.Region;
public class FaceDetectDemo {
public static void main(String[] args) {
// 1. 初始化认证信息
BasicCredentials auth = new BasicCredentials()
.withAk(ak)
.withSk(sk)
.withProjectId(projectId);
// 2. 创建FRS客户端
FrsClient client = FrsClient.newBuilder()
.withCredential(auth)
.withRegion(new Region(region, endpoint))
.build();
// 3. 构造请求
DetectFaceByBase64Request request = new DetectFaceByBase64Request();
request.setBody(new DetectFaceByBase64Req()
.withImageBase64("base64_encoded_image_data"));
// 4. 发送请求并获取响应
DetectFaceByBase64Response response = client.detectFaceByBase64(request);
System.out.println(response.toString());
}
}Java SDK Demo中包含了人脸识别所有接口的样例,如果只验证人脸检测接口,需要将Main.java文件中其他接口进行注释或删除。
3.3 通过Python SDK调用
Python SDK同样提供了简洁的接口调用方式。
安装SDK:
pip install huaweicloudsdkfrs人脸检测代码示例:
from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkfrs.v2.region.frs_region import FrsRegion
from huaweicloudsdkfrs.v2 import FrsClient, DetectFaceByBase64Request, DetectFaceByBase64Req
import base64
# 1. 初始化认证
credentials = BasicCredentials(ak, sk, project_id)
# 2. 创建客户端
client = FrsClient.new_builder() \
.with_credentials(credentials) \
.with_region(FrsRegion.value_of(region)) \
.build()
# 3. 读取图片并转为Base64
with open("/path/to/face.jpg", "rb") as f:
image_base64 = base64.b64encode(f.read()).decode("utf-8")
# 4. 构造请求
request = DetectFaceByBase64Request()
request.body = DetectFaceByBase64Req(image_base64=image_base64)
# 5. 发送请求
try:
response = client.detect_face_by_base64(request)
print(response)
except Exception as e:
print(e.error_msg)此外,华为云API Explorer提供了在线调试功能,在"代码示例"中可直接选择Python语言生成示例代码。
3.4 通过Go SDK调用
Go SDK的使用方式与其他语言类似。
安装SDK:
go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3@v0.1.71人脸比对代码示例:
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
frs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2/model"
regionFrs "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/frs/v2/region"
)
func main() {
// 1. 初始化认证
auth := basic.NewCredentialsBuilder().
WithAk(ak).
WithSk(sk).
Build()
// 2. 创建客户端
client := frs.NewFrsClient(
frs.FrsClientBuilder().
WithRegion(regionFrs.CN_NORTH_4).
WithCredential(auth).
Build())
// 3. 构造人脸比对请求(Base64方式)
request := &model.CompareFaceByBase64Request{}
request.Body = &model.FaceCompareBase64Req{
Image1Base64: image1Base64,
Image2Base64: image2Base64,
}
// 4. 发送请求
response, err := client.CompareFaceByBase64(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}4. 人脸库管理
人脸库是人脸搜索功能的基础,用于存储已注册的人脸特征数据。
4.1 人脸库创建
每个用户可免费使用10个人脸库,每个人脸库容量为10万个人脸特征。如需扩容,可联系华为云客服确认扩容规模和价格。
创建人脸库的API为:POST /v2/{project_id}/face-sets
POST https://face.{region}.myhuaweicloud.com/v2/{project_id}/face-sets
{
"face_set_name": "employee_face_library",
"face_set_capacity": 100000
}4.2 人脸添加
向指定人脸库中添加人脸,支持通过图片URL、本地文件或Base64编码方式传入。
POST /v2/{project_id}/face-sets/{face_set_name}/faces
{
"image_base64": "base64_encoded_face",
"external_image_id": "employee_001",
"external_fields": {
"name": "张三",
"department": "技术部"
}
}添加人脸时,建议一张照片仅包含一个人的正脸。如果照片中有多个人脸,系统会选取尺寸最大的那个人脸进行注册。
4.3 人脸搜索
在人脸库中搜索与目标人脸最相似的人脸:
POST /v2/{project_id}/face-sets/{face_set_name}/search
{
"image_base64": "base64_encoded_target_face",
"top_n": 5
}响应中会返回匹配的人脸列表及对应的相似度分数,一般来说置信度大于0.93可以被判定为同一个人。
4.4 人脸库管理其他操作
FRS还支持查询所有人脸库、查询单个人脸库详情、删除人脸库、查询人脸、更新人脸、删除人脸、批量删除人脸等操作。
5. 活体检测
活体检测是防止照片、视频、面具等攻击手段的重要安全机制。FRS提供两种活体检测方式。
5.1 动作活体检测
要求用户按照指定动作(如眨眼、张嘴、点头、摇头等)完成一系列动作,通过分析动作序列判断是否为真人。API为:POST /v1/{project_id}/live-detect。目前支持检测视频文件或视频的Base64编码,不支持直接检测视频流。
5.2 静默活体检测
无需用户配合做动作,通过分析单张图片中的细微特征(如皮肤纹理、反光等)判断是否为真人。API为:POST /v1/{project_id}/live-detect-face。
静默活体检测主要检测图片是否翻拍,如果想有效避免员工用照片识别,可以结合动作活体接口使用。
6. 权限管理与安全
6.1 IAM细粒度权限控制
FRS支持通过IAM(统一身份认证服务)进行细粒度的权限管理。管理员可以创建用户组和IAM子用户,为不同子用户分配不同的FRS服务权限。例如,可以为开发人员分配人脸检测权限,为运维人员分配人脸库管理权限。
FRS还支持自定义策略和委托权限最小化配置,遵循最小权限原则保障账号安全。
6.2 企业项目管理
FRS支持通过企业项目管理(EPS)对不同用户组和用户的资源使用进行分账,当前仅支持按需计费模式。在调用API时可通过 Enterprise-Project-Id 请求头指定企业项目ID。
7. 监控与运维
7.1 监控指标
FRS服务上报云监控服务的监控指标包括API调用次数、调用成功率、延迟等。用户可以通过云监控服务提供的管理控制台或API接口来检索FRS服务产生的监控指标和告警信息。
7.2 错误码排查
当API调用出错时,HTTP请求返回4xx或5xx的HTTP状态码,消息体中包含具体的错误代码及错误信息。常见错误码包括:
- FRS.0002:Token认证失败,用户Token不正确或已过期,需要重新获取Token。
- FRS.0305:超过最大人脸库数量,无法创建新的人脸库。
- FRS.0306:超过人脸库容量限制,无法增加更多的人脸。
当遇到"APIGW"开头的错误码时,需要参考API网关错误码进行处理。
8. 计费模式与成本优化
8.1 计费模式
FRS服务提供三种计费模式:
- 按需计费:开通服务后默认为按需计费,不使用不扣费,按照API调用次数计费,按月累计。
- 套餐包计费:套餐包提供了更大的折扣,对于长期使用者推荐该方式。
- QPS计费:QPS(Queries Per Second)即API接口每秒钟完成的请求量。FRS服务默认动作活体检测1QPS、其他接口10QPS,如需更大并发可购买QPS套餐。
8.2 免费额度
促销活动期间,每个用户每月前2000次调用免费(动作活体检测、静默活体检测不免费)。人脸库资源管理下的接口均免费。
8.3 成本优化建议
- 合理选择存储方式:如果图片存储在华为云OBS中,需完成OBS委托授权,FRS可从OBS直接读取图片。
- 利用免费额度:充分利用每月2000次的免费调用额度,将测试环境与生产环境分离。
- 选择合适的计费模式:对于调用量稳定的业务,建议购买套餐包享受折扣。
- 监控调用量:通过云监控服务实时监控API调用量,避免超出预期产生高额费用。
9. 常见问题解答
问1:FRS服务支持哪些图片格式?
答:FRS服务支持识别JPG、PNG、JPEG、BMP格式的图片。Base64编码后的图片大小不超过5MB。
问2:人脸比对的可信度阈值是多少?
答:一般来说,置信度大于0.93可以被判定为同一个人。实际应用中可根据业务场景调整阈值。
问3:一个人脸库最多可以存储多少张人脸?
答:每个人脸库默认容量为10万个人脸特征,每个用户可免费使用10个人脸库。
问4:子账号能否调用FRS服务?
答:主账号开通FRS服务后,子账号需要单独开通服务才能调用。子账号的权限由主账号通过IAM进行分配。
问5:Token的有效期是多久?
答:通过IAM获取的Token有效期为24小时。过期后需要重新获取新的Token。
问6:如何实现高并发的人脸识别?
答:FRS默认QPS为动作活体检测1QPS、其他接口10QPS。如需更高并发,可购买QPS套餐包进行扩容。



