热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

腾讯云人脸识别活体检测人员库管理

人脸识别如果无特殊要求的话流程应该是:通过前端传来的图片检测是否为活体。通过用户或其他方式获取当前用户所在人员库,没有时自动创建。判断当前用户是否为第

人脸识别如果无特殊要求的话流程应该是:


  1. 通过前端传来的图片检测是否为活体。
  2. 通过用户或其他方式获取当前用户所在人员库,没有时自动创建。
  3. 判断当前用户是否为第一次使用人脸识别,第一次使用时应该是收入用户人脸数据(创建人员)。
  4. 如果用户是第二次使用人脸识别,应该走人员检测接口,通过当前用户的人员ID和当前获取到的图片检测。
  5. 第三步和第四步是同一等级,一次只能走其中一个,再判断结果并把处理结果返还给前端。

安装腾讯云SDK

composer安装


  • 选择需要的版本添加到项目的composer.json文件中。
  • 添加完以后直接composer更新即可。

获取图片

人脸识别都依赖于图像,所以第一步我们应该获取前端传过来的图片,如果不需要保存的话让前端传一个Base64字符串,直接用base64来进行活体检测,如果需要保存就先保存图片再拿到图片的URL地址,也可以直接获取到当前图片的base64字符串。

如果图片不需要前端及时上传,那直接获取数据库保存的URL即可。


use文件

use TencentCloud\Bda\V20200324\Models\CreateGroupRequest;
use TencentCloud\Bda\V20200324\Models\DeletePersonRequest;
use TencentCloud\Iai\V20200303\Models\CreatePersonRequest;
use TencentCloud\Common\Credential;
use TencentCloud\Common\Exception\TencentCloudSDKException;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Iai\V20200303\IaiClient;
use TencentCloud\Iai\V20200303\Models\DetectLiveFaceRequest;
use TencentCloud\Iai\V20200303\Models\VerifyPersonRequest;

引用的文件可根据自己的需求进行删减
注意:SDK中会包含低版本的代码,所以引用的文件一定要跟API Explorer中生成的一样,我就引用过低版本,跟腾讯技术人员找了半天都没找到问题。


活体检测

全称是:人脸静态活体检测,点击进入腾讯云官方文档

//实例化一个证书对象,入参需要腾讯云账户secretId,secretKey
$cred = new Credential("", "");
// 实例化一个http选项
$httpProfile = new HttpProfile();
// 指定接入地域(默认就近接入)
$httpProfile->setEndpoint("iai.tencentcloudapi.com");
//实例化客户端
$clientProfile = new ClientProfile();
//配置http
$clientProfile->setHttpProfile($httpProfile);
//实例化人脸识别对象 第二个参数是地域参数
$client = new IaiClient($cred, "ap-chongqing", $clientProfile);
//人脸识别图像对象
$req = new DetectLiveFaceRequest();
//组装请求参数 我当前使用的是URL 如果是base64的话可以使用:["Image"=>$base64]
$params = array("Url" => $imgUrl
);
//赋值json化数据
$req->fromJsonString(json_encode($params));
//这里加try的原因是如果当前图像检测有误,或参数有误如直接报错
try {//进行活体检测$resp = $client->DetectLiveFace($req);//获取请求结果$res = $resp->toJsonString();//请求结果转数组$res = json_decode($res, true);
}catch(TencentCloudSDKException $e) {return $this->setErrorData(40006,$e->getMessage());
}
//判断结果 这一步是进一步判断 也可以省掉 直接进行下一步判断
if(empty($res["Score"])){return $this->setErrorData(40005,"验证失败,请重新获取认证图像");
}
//判断活体值 腾讯云判断小于87分的不为活体 一般只要是自拍照 无美颜 没有遮挡的图片活体值都是95以上
if($res["Score"] <85){return $this->setErrorData(40006,"验证失败,请重新获取认证图像");
}
//当前图像是活体,可以直接跟上自己的业务逻辑

在这里插入图片描述


创建人员库

//实例化一个证书对象,入参需要腾讯云账户secretId,secretKey
$cred = new Credential("", "");
// 实例化一个http选项
$httpProfile = new HttpProfile();
// 指定接入地域(默认就近接入)
$httpProfile->setEndpoint("iai.tencentcloudapi.com");
//实例化客户端
$clientProfile = new ClientProfile();
//配置http
$clientProfile->setHttpProfile($httpProfile);
//实例化人脸识别对象 第二个参数是地域参数
$client = new IaiClient($cred, "ap-chongqing", $clientProfile);
try {//在这之前一定要先获取当当前人脸使用的人员库名以及人员库ID 并添加到数据库 避免下次还会请求添加人员库//还要开启事务 避免腾讯云添加失败 但数据库已经记录//获取人体库请求对象$req = new CreateGroupRequest();//组装创建人体库所需参数$params = array("GroupName" => $data["group_name"],"GroupId" => $data["group_id"],);//赋值json对象数据$req->fromJsonString(json_encode($params));//创建人员库$resp = $client->CreateGroup($req);//获取请求结果$res = $resp->toJsonString();//请求结果转数组$res = json_decode($res, true);//判断结果if(empty($res["FaceModelVersion"])){//事务回滚 数据库与腾讯云人员库同步$this->rollback();return $this->setErrorData(40005,"创建腾讯云人员库失败");}$this->commit();
}catch(TencentCloudSDKException $e) {$this->rollback();return $this->setErrorData(40006,$e->getMessage());
}
//人员库添加成功 跟上自己的业务逻辑

创建人员

//实例化一个证书对象,入参需要腾讯云账户secretId,secretKey
$cred = new Credential("", "");
// 实例化一个http选项
$httpProfile = new HttpProfile();
// 指定接入地域(默认就近接入)
$httpProfile->setEndpoint("iai.tencentcloudapi.com");
//实例化客户端
$clientProfile = new ClientProfile();
//配置http
$clientProfile->setHttpProfile($httpProfile);
//实例化人脸识别对象 第二个参数是地域参数
$client = new IaiClient($cred, "ap-chongqing", $clientProfile);
//获取创建人员对象
$req = new CreatePersonRequest();
//组装请求参数
$params = array("GroupId" => "人员库ID","PersonName" => "人员姓名","PersonId" => "人员ID",//人员ID一定要保存到数据库 人员的后续操作都依赖于人员ID"Url" => $imgUrl,//图像信息"QualityControl" => 3,//图像要求等级"NeedRotateDetection" => 1,//是否旋转识别
);
//赋值json化数据
$req->fromJsonString(json_encode($params));
try {//创建人员$resp = $client->CreatePerson($req);//获取请求结果$res = $resp->toJsonString();//请求结果转数组$res = json_decode($res, true);
}catch(TencentCloudSDKException $e) {return $this->setErrorData(40006,$e->getMessage());
}
//判断FaceId是否为空 这一步判断是为了严谨一点
if(empty($res["FaceId"])){return $this->setErrorData(40005,"验证失败,当前认证图像有误,请刷新重试");
}
//人员添加成功 可根据自己的需要实现自己的业务逻辑

人员验证

通过人员ID和人脸图片判断是否为同一个人

//实例化一个证书对象,入参需要腾讯云账户secretId,secretKey
$cred = new Credential("", "");
// 实例化一个http选项
$httpProfile = new HttpProfile();
// 指定接入地域(默认就近接入)
$httpProfile->setEndpoint("iai.tencentcloudapi.com");
//实例化客户端
$clientProfile = new ClientProfile();
//配置http
$clientProfile->setHttpProfile($httpProfile);
//实例化人脸识别对象 第二个参数是地域参数
$client = new IaiClient($cred, "ap-chongqing", $clientProfile);
//人员验证对象
$req = new VerifyPersonRequest();
//组装请求参数
$params = array("Url" => $imgUrl,//图像数据"PersonId" => $personId,//人员ID"QualityControl" => 3//图像等级
);
//赋值json化数据
$req->fromJsonString(json_encode($params));
try {//进行人员验证$resp = $client->VerifyPerson($req);//获取请求结果$res = $resp->toJsonString();//请求结果转数组$res = json_decode($res, true);
}catch(TencentCloudSDKException $e) {return $this->setErrorData(40006,$e->getMessage());
}
//判断结果
if(empty($res["IsMatch"]) || $res["IsMatch"] == false){return $this->setErrorData(40005,"验证失败,请账号拥有者验证");
}
//人员验证成功 当前人员ID和人脸是同一个人 可根据自己的需要实现自己的业务逻辑

推荐阅读
  • 微服务应用性能分析实战15 数据磐石:APM 收集端的存储模型
    分布式监控的重要设计就是数据存储模型,而SkyWalking的分布式追踪数据模型就是一个经典代表,这也是它会在APM领域脱颖而出的原因。所以今天我就以 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 技术分享:如何在没有公钥的情况下实现JWT密钥滥用
      ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 今天周六,原则上要休息,但想到下周还有一堆任务,还是先做一部分工作吧,就把之前做的票面设计器改了改,增加了上传图片和更换背景底图的功能。现在打算整理下这个设计器,也算对齐一个总结。不过这属于我们部门的 ... [详细]
  • 从C#Byte数组加载图像,并使用AngularJS将图像放在html标记中我正在使用ByteArrayforms的Image,因为我正在使用以下C#方法转换字节数组publicH ... [详细]
author-avatar
凡惜弟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有