访问人脸识别功能演示页面可以在线体验人脸识别服务
https://cloud.tencent.com/act/event/iaidemo
--1)API 密钥是构建腾讯云 API 请求的重要凭证,使用腾讯云 API 可以操作您名下的所有腾讯云资源,为了您的财产和服务安全,请妥善保存和定期更换密钥。
注:请勿通过任何方式(如 GitHub)上传或者分享您的密钥信息,一旦泄露至外部渠道,可能造成您的云上资产重大损失
--2)成功注册腾讯云账号之后,可以通过如下演示获取API秘钥
推荐使用API Explorer,因为API Explorer提供了在线调用、签名验证、 SDK 代码生成和快速检索接口等能力,能显著降低使用云 API 的难度。
使用方式说明:
这里我们以人脸识别-人脸检测与分析这个API为例,首先,通过参照人脸检测与分析的接口文档来填写API Explorer中调用人脸检测与分析的各项参数,然后点“在线调用”,点"发送请求"按钮即可
测试地址如下:
腾讯云人脸识别离线 SDK 提供在设备端本地集成的人脸采集、活体检测、人脸比对和人脸搜索等能力,可在无网络环境下离线使用。支持常见的 Android、ARM Linux(海思 DV300)、Windows(C++)等计算平台。
当前仅开放 Android 平台的自助申请,您可登录 人脸识别控制台 - 离线识别 SDK 管理页面 申请测试及使用。如有疑问,或有其它平台需求,请添加人脸识别小助手(微信号:PJY-SJZ)对接,并备注“咨询人脸识别离线 SDK”。
人脸打卡的本质其实就是通过将打卡人的标准人脸照片与存储在人脸识别-人脸库中的人脸照片进行比对,当比对分数大于某个阈值时,可认为是同一个人,也就是打卡通过。
我们分析下该系统使用人脸识别各接口的逻辑:
第一步:因为我们要提前将人员的标准人脸图片存储到人脸识别人脸库中,所以我们需要调用“创建人员库”接口来创建一个用于存放人员人脸图片的存储空间,创建人员库接口的参考文档如下:
https://cloud.tencent.com/document/product/867/45015
第二步:人员库创建完成之后,我们需要调用“创建人员”接口创建人员,创建人员时需要上传一张人员的标准人脸照片,后续还可以调用“增加人脸”接口为该人员添加额外的标准人脸照片(最多支持5张),涉及到的接口参考文档如下:
创建人员接口的参考文档:
https://cloud.tencent.com/document/product/867/45014
增加人脸接口的参考文档(可选):
https://cloud.tencent.com/document/product/867/45016
第三步:既然是打卡考勤,那么肯定要对打卡人进行活体检测,这里我们推荐使用另外一款产品下的接口来实现活体检测,即人脸核身-活体检测,接口参考文档如下:
https://cloud.tencent.com/document/api/1007/35330
第四步:活体检测通过之后,可以提取活体检测视频中的一帧图片用于与人脸库中的人脸图片进行比对,这里我们需要调用人脸识别的“人脸搜索”接口,我们可以根据搜索出的人员匹配得分来判断打卡人是谁,通常推荐以大于80分的匹配值作为判断条件,人脸搜索接口参考文档如下:
https://cloud.tencent.com/document/product/867/44994
--1)如果您的人脸图片是Url入参,请核对如下问题:
--2)如果您的人脸图片是Image入参,请核对如下问题:
data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAEAAAAAAAD/2wBDAAIBAQIBAQICAgICAgICAwUD
那么,您在入参时,是需要去掉"data:image/jpeg;base64,"
http://tool.chinaz.com/tools/imgtobase/
注意:还原时,base64字符需要携带特征头,如这里的"data:image/jpeg;base64,"
同样是出于安全方面的考虑,人脸识别服务的IP没有固定的IP段,IP切换是动态无规律可循的,关于您的需求,我们为您提供如下解决方案: 方案一:您可以将您的业务服务器部署到您的内网环境中,然后搭建一台代理服务器,您的业务服务器发起的人脸识别服务请求通过代理服务器转发到人脸识别服务端,这样可以提升您的业务服务器的安全性
方案二:也是基于代理服务器的逻辑,我们向您推荐API网关,使用API网关之后,您可以将人脸识别API请求托管到API网关,然后您可以通过请求API网关发起人脸识别服务请求。
API网关参考文档:https://cloud.tencent.com/document/product/628/41654
十分抱歉,人脸识别的权限控制是服务级的,目前仅支持人脸识别(FR)全读写访问权限和人脸识别(FR)只读访问权限
更细粒度的权限配置,目前我们正在调试阶段,敬请期待。更新信息,请留意官方文档动态。
目前腾讯云人脸识别服务仅提供境内的调用请求(不覆盖港澳台及国外),如果您的图片在境外,而人脸识别服务的图片下载器在境内,由于境内服务器访问境外服务器受到跨境带宽的限制,下载速度会非常不稳定(普遍存在的现象);为了保证您在调用境内的人脸识别服务时,图片的下载速度不受影响,我们推荐如下两种方案: 方案一:使用腾讯云内容分发网络CDN 在您现有的境外图片服务器的基础上搭配腾讯云内容分发网络CDN的海外加速服务,通过将您境外的图片同步到境内的分发节点,可有效提升人脸图片的下载速度进而提升人脸识别服务接口的调用效率。腾讯云内容分发网络CDN参考文档如下:
https://cloud.tencent.com/document/product/228/3149
方案二:使用腾讯云对象存储COS
如果您的客户在境外,您可以在境内创建一个存储桶,例如将存储桶设置为广州地域,然后利用COS的全球加速功能,将您的客户的人脸图片上传到广州存储桶,然后在调用境内的人脸识别服务时,境内人脸识别服务的图片下载器去下载广州存储通的人脸图片时,下载速度就可以有质的提升。对象存储全球加速参考文档如下:
https://cloud.tencent.com/document/product/436/38866
由于腾讯云暂时无法完全支持企业微信开放平台的技术问题,还请参考如下文档联系专人对接
https://work.weixin.qq.com/api/doc/90002/90625/91333
根据报错,我们可以推测您的图片入参方式是Url,这里的Url指的是基于HTTP协议的Web访问地址,通俗的说就是一个HTTP协议的网络地址,通过公网要能正常访问图片,建议您做如下排查:
如果SDK运行在内网服务器中,需要通过内网服务器中的SDK发起人脸识别服务器请求到代理服务器,再由代理服务器将请求转发至人脸识别服务端。 1)首先我们假设您的代理服务器已经配置完成,此时需要在SDK的接口调用中配置代理服务器的信息,我们这里为您提供各开发语言版本SDK的代理配置方法
第一步:设置环境变量,设置https_proxy、http_proxy环境变量即可
第二步:下载您需要的开发语言SDK
https://cloud.tencent.com/document/sdk/Java
第三步:在SDK的接口调用Demo中进行配置
//代理方案 $httpProfile->setProxy('https://ip:port');
$httpProfile = new HttpProfile();
$httpProfile->setProxy("http://127.0.0.1:12639");
不支持代码中设置代理,可通过环境变量设置
#如果需要指定proxy访问接口,可以按照如下方式初始化 python2
httpProfile = HttpProfile(proxy="http://用户名:密码@代理IP:代理端口")
#python3
httpProfile.proxy = "http://127.0.0.1:12639" #http://用户名:密码@代理IP:代理端口 也可
HttpProfile httpProfile = new HttpProfile();
httpProfile.setProxyHost("127.0.0.1");
httpProfile.setProxyPort("12639");
// 代理服务器,当你的环境下有代理服务器时设定
httpProfile.WebProxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
//或者
httpProfile.WebProxy = "http://127.0.0.1:12639";
不支持代码中设置代理,可通过环境变量设置
2)如果您还没有搭建好代理服务器,我们以人脸识别-人脸检测与分析这个接口为例,为您提供Nginx代理服务器的搭建方式以及Java SDK调用Nginx代理服务器的整个过程,请参考如下文档和示例Demo 文档:
示例Demo
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.iai.v20200303.IaiClient;
import com.tencentcloudapi.iai.v20200303.models.DetectFaceRequest;
import com.tencentcloudapi.iai.v20200303.models.DetectFaceResponse;
public class DetectFace
{
public static void main(String [] args) {
try{
Credential cred = new Credential("AKIDbx60g9mLlwxhBLAYFfneDbKlwqTpxxxx", "JL5oGVSDhGYzCD3ctxkHVVM8cpokaD4D");
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("iai.tencentcloudapi.com");
System.setProperty("https.proxyHost", "tencent.cdhwdl.com");
System.setProperty("https.proxyPort", "443");
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
IaiClient client = new IaiClient(cred, "ap-guangzhou", clientProfile);
String params = "{\"Url\":\"https://tencent-1256311141.cos.ap-chengdu.myqcloud.com/ai/%E4%BA%BA%E8%84%B8%E5%9B%BE%E7%89%87.jpg\"}";
DetectFaceRequest req = DetectFaceRequest.fromJsonString(params, DetectFaceRequest.class);
DetectFaceResponse resp = client.DetectFace(req);
System.out.println(DetectFaceResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
}
}
Web服务器访问人脸识别服务时,会涉及到双向认证,所以您的Apache服务端也需要配置证书。请参考如下解决方案:
第一步:到 https://curl.haxx.se/ca/cacert.pem 下载证书文件cacert.pem
,将其保存到 PHP 安装路径下。
第二步:编辑php.ini
文件,删除curl.cainfo
配置项前的分号注释符(;),值设置为保存的证书文件cacert.pem
的绝对路径。
第三步:重启Apache服务或其他Web服务
您可以将Nodejs3.0(tencentcloud-sdk-nodejs)部署到微信小程序云开发环境中,然后通过小程序调用相机组件在线拍摄人脸照片并将人脸照片传入到云开发服务端,然后由云开发服务端携带人脸图片参数向人脸识别服务端发起请求。具体实现过程及Demo可以参考云加社区的文档:
https://cloud.tencent.com/developer/article/1621119
您可以通过如下Github获取集成了V3签名算法的Nodejs 3.0,然后配置签名算法参数为TC-HmacSHA256
https://github.com/TencentCloud/tencentcloud-sdk-nodejs/tree/signature3
clientProfile.signMethod = "TC3-HMAC-SHA256";
V1的特点:
V3的特点:
对于签名计算逻辑,我们以人脸识别-人脸检测与分析这个接口的POST请求为例进行分析,可以使用API Explorer工具来辅助签名计算
V1签名的计算逻辑:
第一步:将所有请求参数(注意是所有,包含业务参数和公共参数)按照参数名的字典序升序排序,获得A
{
'Action' : 'DetectFace',
'Language' : 'zh-CN',
'Nonce' : '3351',
'Region' : 'ap-guangzhou',
'SecretId' : 'AKIDbx60g9mLlwxhBLAYFfneDbKlwqTxxxx',
'Timestamp' : '1600507388',
'Url' : 'https://tencent-1256311141.cos.ap-chengdu.myqcloud.com/ai/%E4%BA%BA%E8%84%B8%E5%9B%BE%E7%89%87.jpg',
'Version' : '2020-03-03',
}
第二步:将排序好的请求参数转换为"A=B&C=D&E=F"格式,获得B
Action=DetectFace
Language=zh-CN
Nonce=3351
Region=ap-guangzhou
SecretId=AKIDbx60g9mLlwxhBLAYFfneDbKlwqTpooQp
Timestamp=1600507388
Url=https://tencent-1256311141.cos.ap-chengdu.myqcloud.com/ai/%E4%BA%BA%E8%84%B8%E5%9B%BE%E7%89%87.jpg
Version=2020-03-03
第三步:拼接签名原文串,获得C
POSTiai.tencentcloudapi.com/?Action=DetectFace&Language=zh-CN&Nonce=3351&Region=ap-guangzhou&SecretId=AKIDbx60g9mLlwxhBLAYFfneDbKlwqTpxxxx&Timestamp=1600507388&Url=https://tencent-1256311141.cos.ap-chengdu.myqcloud.com/ai/%E4%BA%BA%E8%84%B8%E5%9B%BE%E7%89%87.jpg&Version=2020-03-03
第四步:调用HmacSha1加密算法,以C为加密内容,SecretKey为秘钥进行加密处理,获得签名D
ij5TTZ4By45s81jCVZLUvW8MdOo=
V3签名的计算逻辑:
第一步:拼接规范请求串
规范请求串=HTTP方法+HTTPURI+URL查询字符串+参与签名的Header(键值对)+参与签名的Header(键)+请求主体的16进制小写SHA256值
POST
/
content-type:application/json
host:iai.tencentcloudapi.com
content-type;host
ebceaf7ac530ad0f31861941ef4c28c35e510d7b27a6a8044f45305f630f60a5
第二步:拼接待签名字符串
待签名字符串=签名方法+时间戳+凭证范围+规范请求串的哈希值(SHA256)
TC3-HMAC-SHA256
1600508422
2020-09-19/iai/tc3_request
82bd31084c670fe9febb0a86685c6f80b55e662a8830e6d221eb9d3e14451c48
第三步:计算签名,签名的计算包含如下三个值
SecretKey(控制台可获取) Date(即待签名字符串中的凭证范围中的date值) Service(即待签名字符串中的凭证范围中的service,人脸识别是iai
计算签名又包含四个步骤
--1)计算SecretDate
拼接TC3和SecretKey作为HMACSHA256加密算法的秘钥,Date作为HMACSHA256加密算法的消息
--2)计算SecretService 将SecretDate作为HMACSHA256加密算法的秘钥,Service作为HMACSHA256加密算法的消息
--3)计算SecretSigning 将SecretService作为HMACSHA256加密算法的秘钥,tc3_request作为HMACSHA256加密算法的消息
--4)计算签名 将SecretSigning作为HMACSHA256加密算法的消息,将待签名字符串作为HMACSHA256加密算法的秘钥(转16进制小写)
e0fb9ec2d229c3d9b802abf5796e2a25d3a543ccefd1510bdc7e2b37fb929bfc
第四步:拼接Authorization
Authorization=签名方法(TC3-HMAC-SHA256)+"空格"+"Credential=SecretId/凭证范围"+"逗号"+"空格"+"SignedHeaders=content-type;host"+"逗号"+"空格"+"Signature=签名
TC3-HMAC-SHA256 Credential=AKIDbx60g9mLlwxhBLAYFfneDbKlwqTpxxxx/2020-09-19/iai/tc3_request, SignedHeaders=content-type;host, Signature=e0fb9ec2d229c3d9b802abf5796e2a25d3a543ccefd1510bdc7e2b37fb929bfc
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。