您的位置:首页 > 移动开发 > 微信开发

微信小程序人脸核身---快速入门到实战(附开发工具类,复制即用)

2020-05-10 04:15 1146 查看

文章目录

  • 二、术语概述
  • 三、基本接口说明使用
  • 四、开发工具类
  • 这里我们使用腾讯云的人脸核身来给大家做一个基础的介绍和使用

    一、基本介绍

    1.概述

    人脸核身:一般是对一组对用户身份信息真实性进行验证审核的服务套件提供各类认证功能模块,包含证件 OCR 识别、活体检测、人脸1 : 1对比等能力,以解决行业内大量对用户身份信息核实的需求。

    2.功能特点

    OCR 识别
    支持识别身份证正反面,一次扫描即可返回身份证号、姓名、有效时间等所有字段,数字识别准确率达到 99.9% 以*上,在多个字段上处于领先水平。处理倾斜、暗光、曝光、阴影等异常情况稳定性好,自适应判别纠正技术大大提高识别准确率。

    活体检测
    活体检测, 主要针对高安全性要求的人脸核身验证而研发的一种技术, 防止照片、视频、静态3D建模等各种不同类型的攻击; 目前支持唇语读数、动作、静默等多种活体模式,适用于多类验证场景。

    1:1人脸比对
    人脸比对,根据面部特征,计算两张人脸的相似度,自动进行身份鉴别。立足于腾讯社交数据大平台收集的海量人脸训练集,结合高维 LBP、PCA、LDA 联合贝叶斯、度量学习、迁移学习、深度神经网络,2017年 LFW 测评准确度为 99.80%。并支持多场景下的识别验证,对年龄、姿态及光强均有较好的支持度。

    3.使用场景

    • 综合政务服务、公安微警务、工商企业注册、养老金领取生存验证等
    • 银行开户、保险验证
    • 各大运营提供的在线申请号码、购买手机卡、预装宽带等 网吧上网实名登记、酒店住宿实名登记等
    • 机场安检登机、铁路安检购票、长途客运购票、边检口岸通关等

    二、术语概述

    我们主要是使用其中的两个接口,DetectAuth(实名核身鉴权)、GetDetectInfo(获取实名核身结果信息)。这两个功能基本可以实现我们的的人脸核身这个功能需求。

    基础参数说明

    参数名称 类型 必选 描述
    Action String 操作的接口名称。取值参考接口文档中输入参数公共参数 Action 的说明。例如云服务器的查询实例列表接口,取值为 DescribeInstances。
    ruleid String 用于调用配置的业务流程,可在 人脸核身控制台-自助接入 创建业务流程,流程审核通过后,系统会自动创建流程并分配业务 ID(ruleid),创建 ruleid 的过程中,需要确定以下问题:
    Region String 地域参数,用来标识希望操作哪个地域的数据。接口接受的地域取值参考接口文档中输入参数公共参数 Region 的说明。注意:某些接口不需要传递该参数,接口文档中会对此特别说明,此时即使传递该参数也不会生效。
    Timestamp Integer 当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误。
    Nonce Integer 随机正整数,与 Timestamp 联合起来,用于防止重放攻击。
    SecretId String 云API密钥上申请的标识身份的 SecretId,一个 SecretId 对应唯一的 SecretKey ,而 SecretKey 会用来生成请求签名 Signature。
    Signature String 请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。具体计算方法参见接口鉴权文档。
    Version String 操作的 API 的版本。取值参考接口文档中入参公共参数 Version 的说明。例如云服务器的版本 2017-03-12。
    SignatureMethod String 签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。
    Token String 临时证书所用的 Token ,需要结合临时密钥一起使用。临时密钥和 Token 需要到访问管理服务调用接口获取。长期密钥不需要 Token 。

    DetectAuth(实名核身鉴权)

    在使用人脸核身之前需要:先调用本接口获取BizToken,用来串联核身流程,在验证完成后,用于获取验证结果信息。

    GetDetectInfo(获取实名核身结果信息)

    为了获取用户的验证信息,是否通过。如果通过可以指定拉取的结果信息,取值(0:全部;1:文本类;2:身份证正反面;3:视频最佳截图照片;4:视频)

    三、基本接口说明使用

    DetectAuth(实名核身鉴权)

    输入参数

    这里我们就只要一些基础信息就可以完成集成,如果有其它需求请根据参数再传递即可。

    这里我们就只用一些它的必传参数,还有一个回调地址即可。

    参数名称 必选 类型 描述
    Action String 公共参数,本接口取值:DetectAuth。
    Version String 公共参数,本接口取值:2018-03-01。
    Region String 公共参数,详见产品支持的 地域列表
    RuleId String 用于细分客户使用场景,申请开通服务后,可以在腾讯云慧眼人脸核身控制台(https://console.cloud.tencent.com/faceid) 自助接入里面创建,审核通过后即可调用。如有疑问,请加慧眼小助手微信(faceid001)进行咨询。
    TerminalType String 本接口不需要传递此参数。
    IdCard String 身份标识(未使用OCR服务时,必须传入)。 规则:a-zA-Z0-9组合。最长长度32位。
    Name String 姓名。(未使用OCR服务时,必须传入)最长长度32位。中文请使用UTF-8编码。
    RedirectUrl String 认证结束后重定向的回调链接地址。最长长度1024位。
    Extra String 透传字段,在获取验证结果时返回。
    ImageBase64 String 用于人脸比对的照片,图片的BASE64值; BASE64编码后的图片数据大小不超过3M,仅支持jpg、png格式。

    输出参数

    参数名称 类型 描述
    Url String 用于发起核身流程的URL,仅微信H5场景使用。
    BizToken String 一次核身流程的标识,有效时间为7,200秒; 完成核身后,可用该标识获取验证结果信息。
    RequestId String 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

    GetDetectInfo(获取实名核身结果信息)

    输入参数

    以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数

    参数名称 必选 类型 描述
    Action String 公共参数,本接口取值:GetDetectInfo。
    Version String 公共参数,本接口取值:2018-03-01。
    Region String 公共参数,详见产品支持的 地域列表
    BizToken String 人脸核身流程的标识,调用DetectAuth接口时生成。
    RuleId String 用于细分客户使用场景,申请开通服务后,可以在腾讯云慧眼人脸核身控制台(https://console.cloud.tencent.com/faceid) 自助接入里面创建,审核通过后即可调用。如有疑问,请加慧眼小助手微信(faceid001)进行咨询。
    InfoType String 指定拉取的结果信息,取值(0:全部;1:文本类;2:身份证正反面;3:视频最佳截图照片;4:视频)。 如 134表示拉取文本类、视频最佳截图照片、视频。 默认值:0

    输出参数

    参数名称 类型 描述
    DetectInfo String JSON字符串。 { // 文本类信息 “Text”: { “ErrCode”: null, // 本次核身最终结果。0为成功 “ErrMsg”: null, // 本次核身最终结果信息描述。 “IdCard”: “”, // 本次核身最终获得的身份证号。 “Name”: “”, // 本次核身最终获得的姓名。 “OcrNation”: null, // ocr阶段获取的民族 “OcrAddress”: null, // ocr阶段获取的地址 “OcrBirth”: null, // ocr阶段获取的出生信息 “OcrAuthority”: null, // ocr阶段获取的证件签发机关 “OcrValidDate”: null, // ocr阶段获取的证件有效期 “OcrName”: null, // ocr阶段获取的姓名 “OcrIdCard”: null, // ocr阶段获取的身份证号 “OcrGender”: null, // ocr阶段获取的性别 “LiveStatus”: null, // 活体检测阶段的错误码。0为成功 “LiveMsg”: null, // 活体检测阶段的错误信息 “Comparestatus”: null,// 一比一阶段的错误码。0为成功 “Comparemsg”: null, // 一比一阶段的错误信息 “Location”: null, // 地理位置信息 “Extra”: “”, // DetectAuth结果传进来的Extra信息 “Detail”: { // 活体一比一信息详情 “LivenessData”: [] } }, // 身份证正反面照片Base64 “IdCardData”: { “OcrFront”: null, “OcrBack”: null }, // 视频最佳帧截图Base64 “BestFrame”: { “BestFrame”: null }, // 活体视频Base64 “VideoData”: { “LivenessVideo”: null } }
    RequestId String 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

    四、开发工具类

    maven导包

    <!-- 腾讯人脸核身-->
    <dependency>
    <groupId>com.tencentcloudapi</groupId>
    <artifactId>tencentcloud-sdk-java</artifactId>
    <version>3.0.112</version>
    </dependency>

    常量管理

    /**
    * 人脸核身相关参数
    */
    public static final String FACEKERNEL_SECRETID = "标识身份的 SecretId |";
    public static final String FACEKERNEL_SECRETKEY = "标识身份的SecretKey ,SecretKey 会用来生成请求签名 Signature。 ";
    public static final Object FACEKERNEL_RULEID = "用于调用配置的业务流程";

    代码

    import com.jeesite.common.collect.MapUtils;
    import com.jeesite.common.mapper.JsonMapper;
    import com.jeespring.common.constant.TencentFaceConstant;
    import com.tencentcloudapi.common.Credential;
    import com.tencentcloudapi.common.exception.TencentCloudSDKException;
    import com.tencentcloudapi.common.profile.ClientProfile;
    import com.tencentcloudapi.common.profile.HttpProfile;
    import com.tencentcloudapi.faceid.v20180301.FaceidClient;
    import com.tencentcloudapi.faceid.v20180301.models.DetectAuthRequest;
    import com.tencentcloudapi.faceid.v20180301.models.DetectAuthResponse;
    import com.tencentcloudapi.faceid.v20180301.models.GetDetectInfoRequest;
    import com.tencentcloudapi.faceid.v20180301.models.GetDetectInfoResponse;
    
    import java.util.Map;
    
    /**
    * 人脸识别工具类
    */
    public class RealNameAuthUtils {
    
    /**
    * 获取实名核身鉴权结果
    * @param redirectUrl 认证结束后重定向的回调链接地址。最长长度1024位
    * @return
    */
    public static String getDetectAuthResult(String redirectUrl){
    String result = "";
    try{
    //用户验证 id和对应密钥
    Credential cred = new Credential(TencentFaceConstant.FACEKERNEL_SECRETID, TencentFaceConstant.FACEKERNEL_SECRETKEY);
    
    HttpProfile httpProfile = new HttpProfile();
    httpProfile.setEndpoint("faceid.ap-chengdu.tencentcloudapi.com");
    
    ClientProfile clientProfile = new ClientProfile();
    clientProfile.setHttpProfile(httpProfile);
    //设置前置信息,如用户验证信息,地域信息(越近越快),请求域名地址
    FaceidClient client = new FaceidClient(cred, "ap-chengdu", clientProfile);
    Map<String,Object> paramMap = MapUtils.newHashMap();
    //paramMap.put("RedirectUrl",Constant.FACEKERNEL_REDIRECTURL);
    //设置了一个回调地址链接
    paramMap.put("RedirectUrl",redirectUrl);
    paramMap.put("RuleId", TencentFaceConstant.FACEKERNEL_RULEID);
    
    String params = JsonMapper.toJson(paramMap);
    DetectAuthRequest req = DetectAuthRequest.fromJsonString(params, DetectAuthRequest.class);
    
    DetectAuthResponse resp = client.DetectAuth(req);
    result = DetectAuthRequest.toJsonString(resp);
    System.out.println(result);
    } catch (TencentCloudSDKException e) {
    System.out.println(e.toString());
    result = "error";
    }
    return result;
    }
    
    /**
    * 获取实名核身结果信息
    * @param bizToken
    * @return
    */
    public static String getDetectInfo(String bizToken){
    String result = "";
    try{
    
    Credential cred = new Credential(TencentFaceConstant.FACEKERNEL_SECRETID, TencentFaceConstant.FACEKERNEL_SECRETKEY);
    
    HttpProfile httpProfile = new HttpProfile();
    httpProfile.setEndpoint("faceid.ap-chengdu.tencentcloudapi.com");
    
    ClientProfile clientProfile = new ClientProfile();
    clientProfile.setHttpProfile(httpProfile);
    
    FaceidClient client = new FaceidClient(cred, "ap-chengdu", clientProfile);
    
    Map<String,Object> paramMap = MapUtils.newHashMap();
    paramMap.put("BizToken",bizToken);
    paramMap.put("RuleId", TencentFaceConstant.FACEKERNEL_RULEID);
    String params =JsonMapper.toJson(paramMap);
    
    GetDetectInfoRequest req = GetDetectInfoRequest.fromJsonString(params, GetDetectInfoRequest.class);
    
    GetDetectInfoResponse resp = client.GetDetectInfo(req);
    result = GetDetectInfoRequest.toJsonString(resp);
    System.out.println(result);
    } catch (TencentCloudSDKException e) {
    System.out.println(e.toString());
    result = "error";
    }
    return result;
    }
    }
    ChengHuanHuaning 原创文章 24获赞 68访问量 1万+ 关注 私信
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: