1. 程式人生 > >微信小程式-人臉識別(1)照片入庫

微信小程式-人臉識別(1)照片入庫

現在我們的科技是越來越發達了,我們現在有的手機有一個功能就是刷臉登入,那這是什麼原理呢?那就是人臉識別。首先你要把你的照片(包括整張人臉)傳給伺服器,他將你的照片傳入到資料庫當中。在你要登入的時候,將你刷臉是的照片與傳入伺服器資料庫裡面的照片進行對比,從而實現刷臉登入。下面是我寫的一個微信小程式的關於學生的一個人臉識別功能,下面的程式碼是將照片傳入資料庫中

1.首先寫一個上傳圖片的方法在後臺

//初始化人臉識別
  private function init_face(){
       //自己百度雲上面的資訊
       $APP_ID='***';
       $APP_KEY='****';
       $SECRET_KEY='*****';
      
       //給face-sdk定義路徑,方便引用
       $dir = APP_PATH . '/face-sdk/';
       require_once $dir .'AipFace.php';//引用AipFace.php
       return new \AipFace($APP_ID,$APP_KEY,$SECRET_KEY);
  }
上傳到阿里雲的方法
public function upload($id=''){
  
        $no = M('student')->where("id = {$id}")->getField('no');

        $dir = "./Upload/studentface/";
        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->saveName = $no;
        //覆蓋
        $upload->replace = true;
        //阻止建資料夾
        $upload->autoSub = false;
        // 上傳檔案
        $info = $upload->uploadOne($_FILES['file']);
    
        if(!$info) {// 上傳錯誤提示錯誤資訊
            return $this->ajaxReturn(array('error'=>true,'msg'=>$upload->getError()),JSON_UNESCAPED_UNICODESON);
        }else{// 上傳成功 獲取上傳檔案資訊
            // return $this->ajaxReturn(array('error'=>false,'msg'=>$info['savepath'].$info['savename'],'id'=>$id));
            $path = $dir.$info['savepath'].$info['savename'];
            $file = file_get_contents($path);
            $img = base64_encode($file);
            // echo $no;

     //呼叫facevalid方法檢測人臉併入庫
            $this->facevalid($no,$img);

            $m = M('head');
            $model = $m->where("no = $no")->find();

            if($model){
                // $m->where("no = {$no}")->save(array('base64'=>$img,'path'=>$path));
              $data['base64'] = $img;
              $data['path'] = $path;
              $ret = M('head')->where("no = {$no}")->save($data);
            }else{
                // $ret = $m->add(array('no'=>$no,'base64'=>$img,'path'=>$path));
              $data['no'] = $no;
              $data['base64'] = $img;
              $data['path'] = $path;
              $ret = M('head')->add($data);
            }

        }
    }

這個方法是將照片傳到阿里雲伺服器,它是根據前臺傳過來資訊的id,在與資料庫中的資訊id對比,

2.再寫一個方法facevalid,他是將你的照片傳到百度雲,它的功能是判斷你傳過來的圖片是否是人臉,還是有幾張人臉,如果是沒有人臉或有多張人臉,它將不會傳到百度雲上的庫裡面。否則將照片傳到庫裡。

public function facevalid($no,$img){//$no是傳過來的學號,$img是傳過來的照片
       //如果有可選引數
       $options=array();
       // $options['face_field']="age";
       $options["max_face_num"]=1;
       // $options['face_type']='LIVE';

       $client=$this->init_face();//呼叫初始化人臉識別方法
       $ret =$client->detect($img,'BASE64',$options);
    
      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){
       
            $group=$this->face_group();//獲取你在百度雲上面建的組

            
            $client->addUser($img,'BASE64',$group,$no);
            echo "人臉檢測完成,並已入庫";
          }else{
            die('可靠性:'.$face_probability);
          }

        }else{
          die('人臉數量大於1');
        }
      }else{
          die('沒有人臉');
      }


  }

3.前臺頁面

<form bindsubmit='submit'>
<view class='page'>
    <view class='page_title spe'>採集照片</view>
      <view class='page_dsec spe spe1' wx:for="{{student}}">{{item.no}} {{item.name}} {{item.sex}}</view>
</view>
   <view class="weui-cell">
    <view class="weui-cell__bd">
      <view class="weui-uploader">
        <view class="weui-uploader__hd">
          <view class="weui-uploader__title">個人照片</view>
          <view class="weui-uploader__info">{{imageList.length}}/{{count[countIndex]}}</view>
        </view>
        <view class="weui-uploader__bd">
          <view class="weui-uploader__files">
             <block wx:for="{{imageList}}" wx:for-item="image"><!--wx:for-item 用來定義一個迴圈過程中每個元素的變數的 -->
              <view class="weui-uploader__file">
                <image class="weui-uploader__img" src="{{image}}" data-src="{{image}}" bindtap="previewImage"></image>
              </view>
            </block>
          </view>
          <view class="weui-uploader__input-box">
            <view class="weui-uploader__input" bindtap="chooseImage"></view>
          </view>
        </view>
      </view>
    </view>
  </view>

  <view class="weui-btn-area">
    <button class="weui-btn" type="primary" form-type='submit'>提交</button>
    <button class="weui-btn" form-type='reset'>取消</button>
  </view>
</form>

4.js

const app = getApp();
function upload(that, id) {
  if (that.data.imageList.length == 0) {
    return;
  }
  wx.uploadFile({
    url: '你自己寫的後臺介面',
    filePath: that.data.imageList[0],
    name: 'file',
    formData: {
      'id': id
    },
    success: (res) => {
      var data = res.data
      console.log(data);
    }
  })
}
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    imageList: [],
  },
  submit: function () {
    //上傳照片
    var id = wx.getStorageSync("id");
    upload(this, id);

    wx.showToast({
      title: '上傳成功',
      icon: 'success',
      duration: 2000,
      success: function () {
        setTimeout(function () {
          wx.navigateTo({
            url: '../headimg/headimg',
          })
        }, 2000)
      }
    })
  },
 


  

相關推薦

程式-人臉識別1照片入庫

現在我們的科技是越來越發達了,我們現在有的手機有一個功能就是刷臉登入,那這是什麼原理呢?那就是人臉識別。首先你要把你的照片(包括整張人臉)傳給伺服器,他將你的照片傳入到資料庫當中。在你要登入的時候,將你刷臉是的照片與傳入伺服器資料庫裡面的照片進行對比,從而實現刷臉登入。下面是

程式-人臉識別2)實現人臉識別功能

上一篇的部落格已經將圖片存入到百度雲與自己的伺服器阿里雲上面了,接下來就是在寫一個頁面,是刷臉頁面,通過這個頁面你將自己的臉拍照,傳入到自己的伺服器上,去與存入百度雲上面的照片進行對比。下面是程式碼。前臺程式碼:<camera device-position="fron

程式上手篇1

  昨天微信公佈了小程式,可以說舉國轟動,不光是微信前期推廣做得好,更是因為小程式有著不小的吸引力,筆者仔細體驗了一下小程式示例,可以說體驗不錯。當然,這篇博文並不是為了說明小程式多好多好的推薦文,我們今天主要是來講如何進行學習開發的。   這篇博文主要適用於有開發經驗的開

程式踩坑1:wx.showModal模態對話方塊中content換行

問題:wx.showModal 對話方塊內容不能換行? 如上圖所示,模態對話方塊中content是沒有換行的,但是我們需求中有需要換行提醒的業務,那怎麼辦呢?官方API中並沒有告訴我們怎麼做! 解決方案:使用“\r\n”換行 原始碼 wx.showModal({

程式的檔案結構 —— 程式教程系列1

檔案結構 示例目錄:HelloWorld 全域性檔案 app.js檔案 這個是小程式的指令碼程式碼檔案,可以在這個檔案上進行監聽,並處理小程式的一些生命週期(比如一些全域性

程式學習筆記1

首先,註冊帳號 這裡指的是微信公眾平臺的註冊帳號,不是微信App賬號。 訪問https://mp.weixin.qq.com/,如果沒有帳號,輸入郵箱,註冊一個。註冊過程中會讓你從四個類別(微信訂閱號、服務號、企業微信、小程式)中選擇一個,選擇“小程式"就好了。 後續輸

程式——學習筆記檢視層1

WXS—(WeiXin Script)是小程式特有的一套指令碼語言。wxs有自己的語法,今天就學習一下wxs的語法。 1) wxs程式碼可以編寫在wxml檔案中的<wxs>標籤內,或者是XXX.wxs的檔案內。不管是標籤還是檔案都是一個單獨的模組。 2) 每個模組裡面定義的變數與函式

程式——學習筆記:邏輯層1

邏輯層將資料進行處理後傳送給檢視層,同時接受檢視層的事件反饋。 用App()函式註冊一個小程式。 當小程式初始化完成時,會觸發 onLaunch(全域性只觸發一次) 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow 當小程式從前臺進入後臺,會觸發 onHide 當小程式發生指令碼錯

程式--人臉識別入庫以及匹配人臉

首先,建立Camera目錄和pagecamera.xml的程式碼如下<camera device-position="{{show}}" flash="off" binderror="error" style="width: 100%; height: 400px;"&

程式人臉識別

微信小程式中的人臉識別登入大大提高了使用者登入的安全性,所以人臉識別的技術應用的越來越廣泛了。下面我們就來看看在微信小程式中人臉識別技術該怎麼寫。首先我們需要搭建一個前臺的簡單頁面,示例程式碼如下:<camera device-position="front" flas

程式——人臉識別

頁面佈局程式碼<view class='box'> <view>人臉採集與識別</view> <view class='font'>學生資訊(包括人像)採集,刷臉登入</view> <button type="

程式——人臉識別功能

最近學習了關於微信小程式中的人臉識別功能,收穫頗多。首先我們看一下頁面:這是前臺頁面的程式碼,都是些微信小程式中的控制元件,也用到了Weui的樣式。<form bindsubmit='formSubmit'> <view class="weui-ce

程式--人臉檢測 新增資訊

1程式首頁2.頁面程式碼<view> <view>人臉採集與識別</view> <view class='title'>學生資訊(包括人像)採集,刷臉登入</view> <view class='con

程式-人臉識別+輸出人臉匹配資訊

1.在微信小程式建立 camera頁面camera.wxml程式碼為:<camera device-position="{{show}}" flash="off" binderror="error" style="width: 100%; height: 400px;"

程式人臉識別的實現

首先我們建立一個前臺的頁面設計<!--pages/camera/camera.wxml--> <camera device-position="{{device}}" flash="off" binderror="error" style="width: 1

程式---人臉識別

本次人臉識別主要採用的是百度雲人臉識別介面精準定點陣圖中人臉,獲得眼、口、鼻等72個關鍵點位置,分析性別、年齡、表情等多種人臉屬性獲取Access——tokenfunction access_token(){ $file = __DIR__ . '\access_token

程式開發實戰1):使用滾動檢視

本文主要介紹了滾動檢視元件(scroll-view)的各種常用功能,例如,垂直和水平滾動、滾動事件等,並通過例子程式碼來演示這些功能的使用方法。   1. 垂直滾動檢視   scroll-view是容器元件,如果該元件的子元件超過scroll-view的高度或寬度,該元件會允許子元件在垂直或水平方向

程式登陸 —— 程式教程系列20

簡介: 微信登陸,在新建一個微信小程式Hello World專案的時候,就可以看到專案中出現了我們的微信頭像,其實這個Hello World專案,就有一個簡化版的微信登陸。只不過是,還沒有寫入到咱們自家的後臺中而已。 新建一個Hello World專案,找到a

mpvue寫程式-圖片引入

1、快速上手(http://mpvue.com/mpvue/quickstart/)       按官網給出流程,建立:         執行後,在微信工具檢視: 編輯器中檢視目錄結構: 為了執行的

程式——學習筆記:json

json配置檔案—— 1> app.json:作用於整個小程式全域性配置   頁面路徑——page(陣列[字串="路徑+檔名"])      "pages":["pages/index/index","pages/log/index"]