1. 程式人生 > >微信小程式人臉識別的實現

微信小程式人臉識別的實現

首先我們建立一個前臺的頁面設計

<!--pages/camera/camera.wxml-->
<camera device-position="{{device}}" flash="off" binderror="error" style="width: 100%; height: 300px;"></camera>
<switch bindtap='switchchange'></switch>
<button type="primary" bindtap="takePhoto">刷臉登入</button>

通過遠端預覽來進行拍照,在後臺進行操作

public function login(){
	    	$dir="./Uploads/temp/";
	    	if(!file_exists($dir)){
	    		mkdir($dir,0777,true);
	    	}
		      $upload = new \Think\Upload();// 例項化上傳類
		      $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) {// 上傳錯誤提示錯誤資訊
		      echo json_encode(array('error'=>true,'msg'=>$upload->getError()));
		      }else{// 上傳成功 獲取上傳檔案資訊
		        // return $this->ajaxReturn(array('error'=>false,'msg'=>$info['savepath'].$info['savename']));
		        $file=$dir.$info['savepath'].$info['savename'];
		        $image=base64_encode(file_get_contents($file));
		        $dir=APP_PATH.'/face-sdk/';
				require_once $dir . 'AipFace.php';
				$APP_ID='11257174';
				$API_KEY='8e9X3fP68QQ4lWqRGm9usYQh';
				$SECRET_KEY='GVst6bFZ4nnEk7pVWzqsAO2FnRcr9Vyy';
				$client= new \AipFace($APP_ID,$API_KEY,$SECRET_KEY);
		        $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;
		        			echo json_encode($data,JSON_UNESCAPED_UNICODE);
		        		}

		        		}else{
		        			echo "本資料庫沒有該學生";
		        		}
		        	}else{
		        		echo "活體檢測失敗";
		        	}     
	
			}
		}

通過介面進行操作

takePhoto() {
    const ctx = wx.createCameraContext()
    ctx.takePhoto({
      quality: 'high',
      success: (res) => {
        // console.log(res);
        // this.setData({
        //   src: res.tempImagePath
        // })
        wx.showLoading({
          title: '正在核驗身份...',
        })
        this.setData({ logindisabled: true });
        wx.uploadFile({
          url: '', //僅為示例,非真實的介面地址
          filePath: res.tempImagePath,
          name: 'file',
          formData: {
            'user': 'test'
          },
          success:  (res)=> {
            console.log(res.data);
            wx.hideLoading();
            this.setData({logindisabled:false});
            var data=res.data;
            console.log(data);
            wx.showModal({
              title:'提示',
              content:data,
              showCance:false
            })
          }
        })
      }
    })
  },
這樣就可以在人臉庫中查詢,實現人臉識別的功能