作者:凡惜弟 | 来源:互联网 | 2023-08-25 13:58
人脸识别如果无特殊要求的话流程应该是:
通过前端传来的图片检测是否为活体。 通过用户或其他方式获取当前用户所在人员库,没有时自动创建。 判断当前用户是否为第一次使用人脸识别,第一次使用时应该是收入用户人脸数据(创建人员)。 如果用户是第二次使用人脸识别,应该走人员检测接口,通过当前用户的人员ID和当前获取到的图片检测。 第三步和第四步是同一等级,一次只能走其中一个,再判断结果并把处理结果返还给前端。 安装腾讯云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和人脸是同一个人 可根据自己的需要实现自己的业务逻辑