微信小程序实现人脸识别

本文为大家分享了微信小程序人脸识别的具体代码,供大家参考,具体内容如下

首先,我们要有开发者工具,今天所说的是后端和前端联合起来实现的。

在PHP的控制器中写一个upload方法,代码如下:

public function upload($id=''){
 if(empty($id)){
  return false;
 } 

 $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 = 3145728 ;// 设置附件上传大小
 $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()));
  return json_encode(array('error'=>true,'msg'=>$upload->getError()),JSON_UNESCAPED_UNICODE);
 }else{// 上传成功 获取上传文件信息
  // return $this->ajaxReturn(array('error'=>false,'msg'=>$info['savepath'].$info['savename'],'id'=>$id));
  $file = $dir . $info['savepath'] . $info['savename'];
  $image = base64_encode(file_get_contents($file));
  $this->facevalid($no,$image); 

  $m = M('head');
  $data = $m->where("no='{$no}'")->find(); 

  if($data){
  //有数据,则更新
  $m->where("no='{$no}'")->save(array('base64'=>$image, 'path'=>$file));
  }else{
  $m->add(array('no'=>$no,'base64'=>$image,'path'=>$file));
  } 

  return "采集照片成功";
 }
} 
public function facevalid($no,$image,$file){ 

 $options = array(); 

 $options["max_face_num"] = 2;
 // $options["face_type"] = "LIVE"; 

 // $image=file_get_contents($file);
 // $image=base64_encode($image);
 // echo $image;
 $imageType="BASE64"; 

 // 带参数调用人脸检测
 $client=$this->init_face();
 $ret=$client->detect($image,$imageType,$options);
 // $arr=$ret;
 // print_r($ret);
 // exit;
 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
   $group=$this->face_group(); 

   // echo $group;
   // exit;
   $faces=$client->faceGetlist($no,$group);
   if($faces['error_code']>0){
   $client->addUser($image,'BASE64',$group,$no);
   }else{
   $client->updateUser($image,'BASE64',$group,$no);
   }
   // echo '人脸检测完成,并已入库';
   // return true;
   // $arr = array('error'=>false,'msg'=>'上传成功'); 

  }else{
  die('图片质量');
   // die('图片质量仅为:'.$face_probability.',上传失败');
  }
  }else{
  die('人脸数量大于1');
  // die('人脸数量大于1,失败');
  }
 }else{
  die('没有人脸');
  // die('没有人脸,失败');
 }
 } 

在前端我们需要在开发者工具里写js和wxml.

js代码如下:

const app = getApp()
Page({
 data: {
 sex: '女',
 empty:true
 },
 cancel: function () {
 wx.redirectTo({
 url: '../face/face',
 })
 }, 

 switch1Change: function (e) {
 if (e.detail.value) {
 this.setData({ sex: '男' })
 } else {
 this.setData({ sex: '女' })
 }
 },
 formSubmit: function (e) {
 // console.log(e);
 wx.request({
 url: 'http://*****.top/ppp/server/index.php/home/index/index',
 data: e.detail.value,
 method: 'POST',
 header: {
 'content-type': 'application/x-www-form-urlencoded'
 },
 success: (res) => {
 console.log(res.data); 

 if (res.data.error) {
  wx.showToast({
  title: res.data.msg,
  icon: 'none',
  duration: 2000
  })
 } else {
  wx.showToast({
  title: res.data.msg,
  icon: 'success',
  duration: 2000
  }) 

  setTimeout(function () {
  wx.navigateTo({
  url: '../headimg/headimg?id=' + res.data.id,
  })
  }, 2000) 

 } 

 } 

 }) 

 } 

}) 

上传图片js代码如下:

const app = getApp()
function upload(that, id) {
 if (that.data.files.length == 0) {
 return;
 }
 wx.uploadFile({
 url: 'http://****.top/ppp/server/index.php/home/index/upload', //仅为示例,非真实的接口地址
 filePath: that.data.files[0],
 name: 'file',
 formData: {
 'id': id
 },
 success: function (res) {
 var data = res.data
 // var json = JSON.parse(data)
 console.log(data)
 wx.showToast({
 title: data,
 icon:'success',
 duration:2000
 })
 setTimeout(function () {
 wx.navigateTo({
  url: '../index/index',
 })
 }, 2000)
 }
 })
}
Page({
 chooseImage: function (e) {
 var that = this;
 wx.chooseImage({
 count: 1,
 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
 sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
 success: function (res) {
 console.log(res)
 // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
 that.setData({
  files: res.tempFilePaths,
 });
 }
 })
 },
 //预览照片
 previewImage: function () {
 var current = e.target.dataset.src
 wx.previewImage({
 current: current,
 urls: this.data.imageList
 })
 }, 

 cancel:function(){
 wx.redirectTo({
 url: '../index/index',
 })
 },
 /**
 * 页面的初始数据
 */
 data: {
 files: [],
 options:null,
 id:null,
 },
 formSubmit:function(e){
 upload(this,this.data.id);
 },
 /**
 * 生命周期函数--监听页面加载
 */
 onLoad: function (options) {
 console.log(options);
 this.setData({options:options})
 this.setData({ id: options.id })
 }, 

 /**
 * 生命周期函数--监听页面初次渲染完成
 */
 onReady: function () { 

 }, 

 /**
 * 生命周期函数--监听页面显示
 */
 onShow: function () { 

 }, 

 /**
 * 生命周期函数--监听页面隐藏
 */
 onHide: function () { 

 }, 

 /**
 * 生命周期函数--监听页面卸载
 */
 onUnload: function () { 

 }, 

 /**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () { 

 }, 

 /**
 * 页面上拉触底事件的处理函数
 */
 onReachBottom: function () { 

 }, 

 /**
 * 用户点击右上角分享
 */
 onShareAppMessage: function () { 

 }
})

wxml代码如下:

<view class="weui-cells__title text">录入学生信息</view>
<form bindsubmit="formSubmit">
 <view class="weui-cells weui-cells_after-title">
 <view class="weui-cell weui-cell_input">
 <view class="weui-cell__hd">
  <view class="weui-label">学号</view>
 </view>
 <view class="weui-cell__bd">
  <input class="weui-input" placeholder="请输入学号" value='1635050739' name="no" />
 </view>
 </view>
 <view class="weui-cell weui-cell_input weui-cell_vcode">
 <view class="weui-cell__hd">
  <view class="weui-label">姓名</view>
 </view>
 <view class="weui-cell__bd">
  <input class="weui-input" placeholder="请输入姓名" value='小苏' name="name" />
 </view>
 </view>
 <view class="weui-cell weui-cell_input">
 <view class="weui-label">性别</view>
 <input class="weui-input" name='sex' value='{{sex}}'/>
 <view class='weui-cell_ft'>
  <switch checked bindchange='switch1Change'></switch>
 </view>
 </view>
 <view class="weui-cell weui-cell_input weui-cell_vcode">
 <view class="weui-cell__hd">
  <view class="weui-label">年龄</view>
 </view>
 <view class="weui-cell__bd">
  <input class="weui-input" placeholder="请输入年龄" value='20' name="age" />
 </view>
 </view>
 </view>
 <view class="weui-btn-area">
 <button class="weui-btn" type="primary" bindtap="showTopTips" formType="submit">注册</button>
 <button class="weui-btn" type="default" bindtap='cancel'>返回上级</button>
 </view>
</form> 

上传图片wxml代码如下:

<view class="page" xmlns:wx="http://www.w3.org/1999/xhtml">
<view class="weui-cells__title text">图像采集</view>
<view class="weui-cells__title text">{{options.name}} {{options.no}}</view>
<form bindsubmit="formSubmit">
<view class="page__bd">
 <view class="weui-cells">
  <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">{{files.length}}/1</view>
   </view>
   <view class="weui-uploader__bd">
    <view class="weui-uploader__files" id="uploaderFiles">
    <block wx:for="{{files}}" wx:key="*this">
     <view class="weui-uploader__file" bindtap="previewImage" id="{{item}}">
     <image class="weui-uploader__img" src="{{item}}" mode="aspectFill"/>
     </view>
    </block>
    </view>
    <view class="weui-uploader__input-box">
    <view class="weui-uploader__input" bindtap="chooseImage"></view>
    </view>
   </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" type="default" bindtap='cancel'>取消</button>
 </view>
 </form>
</view> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 微信小程序人脸识别功能代码实例

    前几天偶然看见一个人脸识别的小程序demo,觉得很有趣下载下来想玩玩,结果只是一个框架而已用不了的,花了点时间完善一下 吐槽一下wx.uploadFile这个接口,真是个大坑,最开始调用时候,我以为它和同期的wx.downloadFile一样,只需要填入必须的参数就可以用,结果还是要配合后台php的 首先,upload这个接口的url和request一样指的是php的路径,而不是download一样文件路径 其次,我在最开始一直没弄懂这个"name"到底应该填什么,上传功能不好用我一直

  • 微信小程序实现人脸识别登陆的示例代码

    前言 这是一篇关于一个原创微信小程序开发过程的原创文章.涉及到的核心技术是微信小程序开发方法和百度云人脸识别接口.小程序的主体是一个用于个人密码存储的密码管理器,在登陆注册阶段,需要调用百度云人脸识别接口以及百度云在线人脸库的管理接口.本文主要涉及登陆注册模块的实现,而且不需要PHP后台代码,完全在线调用接口实现,希望后来的你能有所收获! 步骤 步骤 涉及接口(百度云) 拍摄或者相册选择 并 上传比对样本照片到 人脸库 人脸库管理接口(main:人脸注册) 拍摄照片并上传,云服务器在线比对 人脸

  • PHP实现微信小程序人脸识别刷脸登录功能

    首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片 然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器 public function login(){ // 上传文件路径 $dir = "./Uploads/temp/"; if(!file_exists($dir)){ mkdir($dir,0777,true); } $upload = new \Think\Upload(); $upload->maxSize = 2048000 ;//

  • 微信小程序实现人脸识别

    本文为大家分享了微信小程序人脸识别的具体代码,供大家参考,具体内容如下 首先,我们要有开发者工具,今天所说的是后端和前端联合起来实现的. 在PHP的控制器中写一个upload方法,代码如下: public function upload($id=''){ if(empty($id)){ return false; } $no = M("student")->where("id={$id}")->getField('no'); $dir = ".

  • 微信小程序实现人脸检测功能

    本文为大家分享了微信小程序实现人脸检测的具体代码,供大家参考,具体内容如下 因为本文章的人脸检测技术运用的是百度云人工智能,首先要有百度云的账号. 近期,人脸识别已经升级到了V3,开启了测试,所以也依照v3文档进行了更新: 1.人脸识别的每个接口,都需要用到百度云的access_token,首先获取 access-token ,一个月之后access_token过期:可以将获取的存入文件,再次引用时可以判断其是否过期,然后引用或者重新获取: //获取access_token function r

  • 详解微信小程序官方人脸核身认证

    小程序收集了下用户个人信息上传被打回来说: 你好,小程序页面功能涉及:采集用户生物特征(人脸照片或视频)及其他敏感信息,用于身份认识或识别, 为保障用户敏感隐私身份信息,平台暂不支持此功能.请去除相关功能后重新提交. 然后就去找度娘搜了下需要申请 wx.startFacialRecognitionVerify({}) https://api.weixin.qq.com/cgi-bin/token?appid=appid&secret=secret&grant_type=client_cre

  • 小程序实现人脸识别功能(百度ai)

    本文介绍了小程序实现人脸识别功能,分享给大家,具体如下: 文档中心:https://ai.baidu.com/docs#/Begin/a2bbf4b2 接入流程 1. 按照文档获取AppID.API Key.Secret Key,进行Access Token(用户身份验证和授权的凭证)的生成 const getBaiduToken = function () { return new Promise((resolve, reject) => { //自行获取APIKey.SecretKey co

  • 微信小程序长按识别二维码的几种情况分析

    目录 一.image标签 + show-menu-by-longpress=“{{true}}” 二.wx.previewImage 三. web-view 支持长按识别的码 补充:扫码中有几个可配置的参数注意下 总结 小程序中的图片已支持长按识别了,总结一下几种情况下: 一.image标签 + show-menu-by-longpress=“{{true}}” <image src="{{qrcode}}" mode="widthFix" show-menu

  • 微信小程序里长按识别二维码的实现过程

    前言 我们都知道公众号里的二维码可以长按识别,但是小程序限制比较严格,没有办法实现二维码的长按识别,一直以来我都是这样认为的,微信的官方规则里也是这么写的,直到今天上午,我无意间发现一个小程序里的二维码居然可以长按识别,于是就好奇的去研究了一番,结果还真的可以实现小程序里长按识别二维码.不知道是官方的漏洞还是程序的bug,但是既然这个功能可以实现,那当然要愉快的用上一用啦 老规矩,先看效果图 可以看到,我们成功的在小程序里实现了长按识别二维码的功能.下面就教大家如何一步步实现吧.因为官方的规格还

  • 微信小程序 SOTER 生物认证DEMO 指纹识别功能

    今天项目尝试使用微信小程序指纹认证功能 以下为测试demo index.js Page({ /** * 页面的初始数据 */ data: { isfingerPrint : false, //可否使用指纹识别 默认false isfacial: false, //可否使用人脸识别 默认false }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { var that = this //查看支持的生物认证 比如ios的指纹识别 安卓部分机器

随机推荐