微信开发人脸识别中,检测人脸功能需将人脸入库,并对上传的人脸进行分组管理。人脸入库时,选择合适的文件进行上传。
第一步:初始化人脸识别
首先获取APP_ID,APP_KEY和SECRET_KEY,并将其写成init_face()方法。
第二步:添加学生信息,包括no,name,sex,age等信息。添加出错时,提醒添加出错。
public function index($no,$name,$sex,$age){
$data['no']=$no;
$data['name']=$name;
$data['sex']=$sex;
$data['age']=$age;
$id=M('student')->add($data);
if($id){
return $this->ajaxReturn(array('error'=>false,id=>$id));
}else{
return $this->ajaxReturn(array('error'=>true,'msg'=>"添加出错"));
}
}
第三步:文件上传。
//文件上传
public function upload($id=''){
$upload = new \Think\Upload();// 实例化上传类
$upload->maxSize = 3145728 ;// 设置附件上传大小
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
$upload->rootPath = './Uploads/'; // 设置附件上传根目录
$upload->savePath = ''; // 设置附件上传(子)目录
// 上传文件
$info = $upload->uploadOne($_FILES['file']);
if(!$info) {// 上传错误提示错误信息
return $this->ajaxReturn(array('error'=>true,'msg'=>$upload->getError()));
}else{// 上传成功
return $this->ajaxReturn(array('error'=>false,'msg'=>$info['savepath'].$info['savename'],'id'=>$id));
}
}
第四步:文件上传之后,获取小组名。将其组名命名为face _group。
//获取小组
private function face_group(){
//组名
$groupname='face_group';
$client=$this->init_face();
$ret=$client->getGroupList();
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;
}
}
第五步:人脸检测。首先上传文件,判断文件是否存在,如果不存在,提醒文件不存在。选择成功后,并将文件及进行编码
$image=base64_encode(file_get_contents($file));
然后判断是否有人脸,人脸数量是否为1,可靠性是否为1。如果没有人脸,则提醒没有人脸,然后判断人脸数量,如果不为1,输出人脸数量大于1,然后判断其可靠性,如果可靠性为1,则提醒人脸检测完成,并已入库,如果不为1时,输出可靠性。
//人脸检测
public function facevalid(){
// $token=access_token();
// echo $token;
$file='./Uploads/02.jpeg';
if(!file_exists($file)){
die('文件不存在');
}
$image=base64_encode(file_get_contents($file));
//如果有可选参数
$options=array();
$options['max_face_num']=2;
$client=$this->init_face();
$ret=$client->detect($image,'BASE64',$options);
// print_r($ret);
if($ret['error_code']==0){ //有人脸
$result=$ret['result'];
$face_num=$result['face_num'];
if(1==$face_num){ //人脸数量为1
$face_probability=$result['face_list'][0]['face_probability'];
if(1==$face_probability){ //可靠性为1
$guid=myguid();
$group=$this->face_group();
$client->addUser($image,'BASE64',$group,$guid);
echo "人脸检测完成,并已入库";
}else{
die('可靠性为:'.$face_probability);
}
}else{
die('人脸数量大于1');
}
}else{
die('没有人脸');
}
}
}
以上人脸入库的步骤。