微信小程序——人脸识别

来自:互联网
时间:2019-07-08
阅读:

首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片

然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器

public function login(){  
      // 上传文件路径  
      $dir = "./Uploads/temp/";  
      if(!file_exists($dir)){  
        mkdir($dir,0777,true);  
      }  
      $upload = new ThinkUpload();  
      $upload->maxSize = 2048000 ;// 设置附件上传大小  
      $upload->exts = array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型  
      $upload->savepath = '';  
      $upload->autoSub = false;  
      $upload->rootPath = $dir; // 设置附件上传根目录  
      // 上传单个文件  
      $info = $upload->uploadOne($_FILES['file']);  
      if(!$info) {// 上传错误提示错误信息  
          echo json_encode(array('error'=>true,'msg'=>$upload->getError()),JSON_UNESCAPED_UNICODE);  
      }else{// 上传成功 获取上传文件信息  
        $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','student',$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($score>=95){  
            $data = M('student')->where("no = '{$no}'")->find();  
            $data['score'] = $score;  
            // $data['name'] = json_decode($data['name'],true);  
            // $data['sex'] = json_decode($data['sex'],true);  
            echo '识别成功' . json_encode($data,JSON_UNESCAPED_UNICODE);  
          }else{  
            echo '识别失败' . $data['score'];  
          }  
        }  
      }  
    }

然后进行前台设计

<camera device-position="{{device?'back':'front'}}" flash="off"  binderror="error" style="width: 100%; height: 300px;"></camera>  
        <view class="weui-cells__title" >开关</view>  
        <view class="weui-cells weui-cells_after-title">  
            <view class="weui-cell weui-cell_Switch">  
                <view class="weui-cell__bd">切换摄像头</view>  
                <view class="weui-cell__ft" >  
                    <switch bindtap="devicePosition" />  
                </view>  
            </view>  
        </view>  
<button type="primary" bindtap="takePhoto">刷脸登录</button>

这个方法是用来调用相机的,它有device-position,前置或后置,值为front, back。flash,闪光灯,值为auto, on, off。bindstop,摄像头在非正常终止时触发,如退出后台等情况

devicePosition() {  
this.setData({  
  device: !this.data.device,  
})  
console.log("当前相机摄像头为:", this.data.device ? "后置" : "前置");  
    
camera() {  
  let { ctx, type, startRecord } = this.data;  },  
data: {  
  src: null,  
},

在js里面调用接口

takePhoto() {  
     const ctx = wx.createCameraContext()  
     ctx.takePhoto({  
       quality: 'high',  
       success: (res) => {  
         this.setData({  
           src: res.tempImagePath  
         })  
         console.log(res)  
         wx.uploadFile({  
           url: '', //仅为示例,非真实的接口地址  
           filePath: this.data.src,  
           name: 'file',  
           formData: {  
           },  
           success: function (res) {  
             // var data = res.data  
             // var json = JSON.parse(data)  
             console.log(res)  
             wx.showModal({  
               title: "提示",  
               content: res.data,  
               showCancel: false,  
               confirmText: "确定"  
             })  
           }  
         })  
       }  
     })  
   },

刷脸登录就成功了

返回顶部
顶部