PHP调用百度人脸识别姓名身份证检测

2021-04-18 08:01 php实例 155 梁俊威

今日,应客户要求,制作一个检测用户是否未成年的微信小程序,需要使用到百度的姓名、身份证、人像的检测功能,这个API功能调用起来还算是比较简单的,废话不多说,直接上流程。

首先我们需要到百度人脸识别的官网(https://ai.baidu.com)注册一个账号,能用企业认证最好用企业实名认证,因为企业认证能够获取的QPS(并发)次数更多。

创建相应的应用,获取到client_id跟client_secret这两个参数,通常情况下,我们常用的是CURL方法去调用API,这篇文章也只针对CURL来说明,则我们需要使用到以下方法:

protected function request_post($url = '', $param = ''){
    if (empty($url) || empty($param)){
        return false;
    }
    $postUrl = $url;
    $curlPost = $param;
    $curl = curl_init();
    //初始化curl
    
    curl_setopt($curl, CURLOPT_URL,$postUrl);
    //抓取指定网页
    curl_setopt($curl, CURLOPT_HEADER, 0);
    //设置header
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    //要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_POST, 1);
    //post提交方式
    
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    $data = curl_exec($curl);
    //运行curl
    curl_close($curl);
    return $data;
}

想要调用实名三要素检测功能的API接口,就需要先获得access_token这个值,代码如下:

protected function getBaiduToken(){
    // 请求获取access_token的api地址
    $url = 'https://aip.baidubce.com/oauth/2.0/token';
    // 这里固定填写client_credentials不变
    $post_data['grant_type'] = 'client_credentials';
    // 填写你刚刚创建应用的两个参数
    $post_data['client_id'] = '';
    $post_data['client_secret'] = '';
    
    $o = "";
    foreach($post_data as $k => $v){
        $o.= "$k=" . urlencode( $v ). "&" ;
    }
    
    $post_data = substr($o,0,-1);
    $token = $this->request_post($url, $post_data);
    $token = json_decode($token, true);
    return $token['access_token'];
}

两要素(姓名+身份证)检测示例代码:

public function idmath(){
    // 简单的判断是否填写参数
    if(empty($this->input['name'])){
        // 我这里写得是exit+json进行返回,你也可以使用其他的
        exit(json_encode(["code"=>0,'msg'=>"请输入姓名及身份号"]));
    }
    if(empty($this->input['idcard'])){
        exit(json_encode(["code"=>0,'msg'=>"请输入姓名及身份号"]));
    }
    
    // 百度人脸识别:姓名身份证(两要素)API地址
    $url = "https://aip.baidubce.com/rest/2.0/face/v3/person/idmatch";
    
    // 调用上面所述的获取access_token的方法
    $token = $this->getBaiduToken();
    
    $post_data['access_token'] = $token;
    $post_data['name']=$this->input['name'];
    $post_data['id_card_number']=$this->input['idcard'];
    
    $o = "";
    foreach ( $post_data as $k => $v ){
        $o.= "$k=" . urlencode( $v ). "&" ;
    }
    $post_data = substr($o,0,-1);
    
    // 返回请求结果
    $res = $this->request_post($url, $post_data);
    $res = json_decode($res, true);
    
    // 如果返回的error_code是0,那么校验成功,否则校验失败。
    if($res['error_code']==0){
        // 进行你的逻辑执行
    }
}

三要素检(姓名+身份证+人像)测示例代码:

public function face(){
    $file = request()->file('imgs');
    // 移动到框架应用根目录/public/uploads/ 目录下
    if($file){
        // 我这里使用的是TP的上传方法,替换成你的即可
        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
        
        if($info){
            // 百度人脸识别三要素API地址
            $url = "https://aip.baidubce.com/rest/2.0/face/v3/person/verify";
            // 调用上面所述的获取access_token的方法
            $token = $this->getBaiduToken();
            
            $post_data['access_token'] = $token;
            
            $imgs = "uploads/".$info->getSaveName();
            // 将图片转换为BASE64格式,当然你也可以使用URL连接,将上面的图片地址补全,将下面的image_type改成URL即可。
            if($fp = fopen($imgs, "rb", 0)){
                $gambar = fread($fp,filesize($imgs));
                fclose($fp);
                $base64 = chunk_split(base64_encode($gambar));
            }
            $post_data['image']=$base64;
            $post_data['image_type']="BASE64";
            
            $post_data['id_card_number']=$this->wuser['idcard'];
            $post_data['name']=$this->wuser['name'];
            
            $o = "";
            foreach ( $post_data as $k => $v ){
            $o.= "$k=" . urlencode( $v ). "&" ;
            }
            $post_data = substr($o,0,-1);
            
            // 获取请求结果
            $res = $this->request_post($url, $post_data);
            $res = json_decode($res, true);
            
            // 当返回参数的result下的score>80时,人像吻合的概率非常大,当然80这个数值也可以进行跳转
            if($res['error_code']==0&&$res['result']['score']>80){
                // 你的逻辑执行代码
                
                return json([
                    'code'   => 1,
                    'msg'   => '人像校准成功!'
                ]);
        
            }else{
                // 你的逻辑执行代码
            
                return json([
                    'code' => 0,
                    'msg' => '人像校准错误,请重试!'
                ]);
            }
        }
    }else{
        // 上传失败获取错误信息
        return json([
            'code' => 0,  
            'msg'=> '人像识别错误,请重试'
        ]);
    }
}


若无特殊说明,本站点所有内容均为原创,转载请说明出处!

原文链接:https://www.ljwei.com.cn/read/241.html

QQ客服

QQ客服

微信客服

微信客服

微信客服二维码
意见反馈

意见反馈

一键置顶