1.什么是人脸识别?
人脸识别可以分为两个方面,一个是人脸验证,另一个是人脸识别。
人脸验证指的是:假设我们有一个人的画像(A),我们需要根据这个画像验证来人是不是A本人。
人脸识别指的是:如果我们有一个人脸数据集(大小为K),我们需要识别来人是不是我们的人脸数据集里面的人。
人脸识别的准确率必须依托于人脸验证的准确率。
2.安装人脸识别php sdk
人脸识别 PHP SDK目录结构
主要用lib就可以了
3.人脸检测
人脸检测:检测图片中的人脸并标记出位置信息;
//人脸检测 public function facevaild($no,$img){ $options = array(); $options['max_face_num'] = 2; $client = $this->init_face(); $ret = $client->detect($img,'BASE64',$options); // print_r($ret); if($ret['error_code']==0){//有人脸 $result = $ret['result']; $face_num = $result['face_num']; if(1 == $face_num){ $face_probability = $result['face_list'][0]['face_probability']; if(1 == $face_probability){ $group = $this->face_group(); $client->addUser($img,'BASE64',$group,$no); // echo "人脸检测完成,并已入库"; return true; }else{ die('可靠性为:' . $face_probability); } }else{ die('人脸数量大于1'); } } }并且要在人脸识别库中创建组,组中存放自己的照片,这样在人脸识别时才能找到自己的信息
//创建分组 public function face_group(){ $groupname = 'face_group3'; $client = $this->init_face(); $ret = $client->getGroupList(); // print_r($ret); // exit; if($ret['error_code'] == 0){ $grouplist = $ret['result']['group_id_list']; if(in_array($groupname, $grouplist)){ return $groupname; }else{ $ret = $client->groupAdd($groupname); if($ret['error_code']==0){ return $groupname; }else{ return false; } } }else{ return false; } }4.在线活体检测
接口能力
人脸基础信息:包括人脸框位置,人脸空间旋转角度,人脸置信度等信息。
人脸质量检测:判断人脸的遮挡、光照、模糊度、完整度等质量信息。可用于判断上传的人脸是否符合标准。
基于图片的活体检测:基于单张图片,判断图片中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节)。此能力可用于H5场景下的一些人脸采集场景中,增加人脸注册的安全性和真实性。
5.人脸对比
接口能力
两张人脸图片相似度对比:比对两张图片中人脸的相似度,并返回相似度分值;
多种图片类型:支持生活照、证件照、身份证芯片照、带网纹照四种类型的人脸对比;
活体检测:基于图片中的破绽分析,判断其中的人脸是否为二次翻拍(举例:如用户A用手机拍摄了一张包含人脸的图片一,用户B翻拍了图片一得到了图片二,并用图片二伪造成用户A去进行识别操作,这种情况普遍发生在金融开户、实名认证等环节。);
质量检测:返回模糊、光照等质量检测信息,用于辅助判断图片是否符合识别要求;
业务应用
用于比对多张图片中的人脸相似度并返回两两比对的得分,可用于判断两张脸是否是同一人的可能性大小。
6.人脸注册
用于从人脸库中新增用户,可以设定多个用户所在组,及组内用户的人脸图片,
典型应用场景:构建您的人脸库,如会员人脸注册,已有用户补全人脸信息等。
人脸库、用户组、用户、用户下的人脸层级关系如下所示:
6.人脸搜索
1:N人脸搜索:也称为1:N识别,在指定人脸集合中,找到最相似的人脸;
1:N人脸认证:基于uid维度的1:N识别,由于uid已经锁定固定数量的人脸,所以检索范围更聚焦;
1:N人脸识别与1:N人脸认证的差别在于:人脸搜索是在指定人脸集合中进行直接地人脸检索操作,而人脸认证是基于uid,先调取这个uid对应的人脸,再在这个uid对应的人脸集合中进行检索(因为每个uid通常对应的只有一张人脸,所以通常也就变为了1:1对比);实际应用中,人脸认证需要用户或系统先输入id,这增加了验证安全度,但也增加了复杂度,具体使用哪个接口需要视您的业务场景判断。
public function camera(){ $dir="./Uploads/camera/"; if (!file_exists($dir)) { mkdir($dir,0777,true); } $upload = new ThinkUpload();// 实例化上传类 $upload->maxSize = 2048000 ;// 设置附件上传大小 $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型 $upload->rootPath = $dir; // 设置附件上传根目录 $upload->savePath = ''; // 设置附件上传(子)目录 $upload->autoSub=false; //上传文件 $info = $upload->uploadOne($_FILES['file']); if(!$info) {// 上传错误提示错误信息 return $this->ajaxReturn(array('error'=>true,'msg'=>$upload->getError()),JSON_UNESCAPED_UNICODE); }else{ // $this->ajaxReturn('上传成功'); $file=$dir.$info['savepath'].$info['savename']; $image=base64_encode(file_get_contents($file)); $client=$this->init_face(); $options['liveness_control']='NORMAL'; $options['max_user_num']='1'; $ret=$client->search($image,'BASE64',$this->face_group(),$options); // echo json_encode($ret,JSON_UNESCAPED_UNICODE); // exit; if ($ret['error_code']==0) { $user=$ret['result']['user_list'][0]; $no=$user['user_id']; $score=$user['score']; if (!empty($no)) { $data=M('student')->field('no,name,sex')->where("no='{$no}'")->find(); if ($data) { $data['score']=$score; // if ($score>95) { // echo "姓名:".$data['name']; // }else{ echo json_encode($data,JSON_UNESCAPED_UNICODE); // } }else{ echo "本地数据库没有该学生,百度云库信息:个人信息:{$no},分值:{$score}"; } } }else{ echo "活体检测失败".json_encode($ret,JSON_UNESCAPED_UNICODE); } } }