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


Posted in Javascript onMay 25, 2018

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

因为本文章的人脸检测技术运用的是百度云人工智能,首先要有百度云的账号。

近期,人脸识别已经升级到了V3,开启了测试,所以也依照v3文档进行了更新;

1、人脸识别的每个接口,都需要用到百度云的access_token,首先获取 access-token ,一个月之后access_token过期;可以将获取的存入文件,再次引用时可以判断其是否过期,然后引用或者重新获取:

//获取access_token 
function request_post($url = '', $param = '') { 
  if (empty($url) || empty($param)) { 
    return false; 
  } 
   
  $postUrl = $url; 
  $curlPost = $param; 
  $curl = curl_init();//初始化curl 
  curl_setopt($curl, CURLOPT_URL,$postUrl);//抓取指定网页 
  curl_setopt($curl, CURLOPT_HEADER, 0);//设置header 
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 
  curl_setopt($curl, CURLOPT_POST, 1);//post提交方式 
  curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost); 
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
  curl_setopt($curl, CURLOPT_SSLVERSION, 1); 
  $data = curl_exec($curl);//运行curl 
  curl_close($curl); 
   
  return $data; 
} 
 
function access_token(){ 
  $file= __DIR__ .'\access_token'; 
  if(file_exists($file)){ 
    $str=file_get_contents($file); 
    try{ 
      $arr=json_decode($str,true); 
      if(is_array($arr)){ 
        $totime=$arr['totime']; 
        if($totime>time()){ 
          return $arr['access_token']; 
          exit; 
        } 
      } 
    }catch(Exception $e){ 
 
    } 
  } 
 
  $url = 'https://aip.baidubce.com/oauth/2.0/token'; 
  $post_data['grant_type'] = 'client_credentials'; 
  $post_data['client_id'] = 'fRuY7eOPxBzIHf4qxiYeQOHT'; 
  $post_data['client_secret'] = 'oe7L7aPc5rcKfSewvb5h6xFX2a8dEQN1'; 
  $o = ""; 
  foreach ( $post_data as $k => $v )  
  { 
    $o.= "$k=" . urlencode( $v ). "&" ; 
  } 
  $post_data = substr($o,0,-1); 
   
  $res = request_post($url, $post_data); 
 
  $arr=json_decode($res,true); 
  if(isset($arr['access_token']) && isset($arr['expires_in'])){ 
    $data['access_token'] = $arr['access_token']; 
    $data['totime']= time() + $arr['expires_in'] - 86400; 
    file_put_contents($file, json_encode($data)); 
    return $arr['access_token']; 
  }else{ 
    return false; 
  } 
 
}

2、创建初始化方法,需要用到 Secret_Key、API_Key、App_ID,为用户基本资料;

private function init_face(){ 
    $App_ID = '用户appid'; 
    $API_Key = '用户api_key'; 
    $Secret_Key = '用户secret_key'; 
 
    $dir = APP_PATH.'/face-sdk/'; 
    require_once $dir."AipFace.php"; 
    return new \AipFace($App_ID, $API_Key, $Secret_Key); 
}

(thinkPHP框架)

将所需检测图片放入文件;具体参数可依照百度云人脸识别v3文档查看。

// 人脸检测 
public function facevalid(){ 
    $file = './Upload/2018-05-17/1.png'; 
    if (!file_exists($file)) { 
      die('文件不存在!'); 
    } 
    $image = base64_encode(file_get_contents($file)); 
    $imageType = 'BASE64'; 
    //如果有可选参数 
    $options = array(); 
    $options['max_face_num'] = 2; 
 
    $client = $this->init_face(); 
    $ret = $client->detect($image,$imageType,$options); 
    // print_r($ret); 
    if ($ret['error_code'] == 0) {//有人脸 
      $result = $ret['result']; 
      $face_num = $result['face_num']; 
 
      if ($face_num==1) { //人脸数量为1 
        $face_probability = $result['face_list'][0]['face_probability']; 
        if ($face_probability==1) { //可靠性为1 
          $user_id = myguid(); 
          $group_id = $this->face_group(); 
          $res = $client->addUser($image,'BASE64',$group_id,$user_id); 
          // print_r($res); 
          if ($res['error_code']==0) { 
            echo "人脸检测完成,并入库"; 
          }           
        }else{ 
          die('可靠性为:'.$face_probability); 
        } 
      }else{ 
        die('人脸数大于1'); 
      } 
    }else{ 
      die('没有人脸'); 
    } 
 
  } 
  // 获取组 
  private function face_group(){ 
    $groupname = '10001'; 
    $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; 
    } 
}

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

Javascript 相关文章推荐
jQuery插件Tmpl的简单使用方法
Apr 27 Javascript
javascript使用输出语句实现网页特效代码
Aug 06 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
Nov 17 Javascript
Underscore源码分析
Dec 30 Javascript
浅谈JavaScript 函数参数传递到底是值传递还是引用传递
Aug 23 Javascript
AngularJS Phonecat实例讲解
Nov 21 Javascript
深入理解jquery中extend的实现
Dec 22 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
Aug 17 Javascript
vue-cli项目代理proxyTable配置exclude的方法
Sep 20 Javascript
vue组件文档(.md)中如何自动导入示例(.vue)详解
Jan 25 Javascript
微信小程序实现人脸识别
May 25 #Javascript
微信小程序实现刷脸登录
May 25 #Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
May 25 #Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 #Javascript
JS简单生成由字母数字组合随机字符串示例
May 25 #Javascript
Webpack中雪碧图插件使用详解
May 25 #Javascript
使用javascript做在线算法编程
May 25 #Javascript
You might like
php error_log 函数的使用
2009/04/13 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
PHP实现可自定义样式的分页类
2016/03/29 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
JavaScript定义及输出螺旋矩阵的方法详解
2017/12/01 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
PHP读取远程txt文档到数组并实现遍历
2020/08/25 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
python实现猜数字小游戏
2020/03/24 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
个人简历自荐信
2013/12/05 职场文书
同事吵架检讨书
2014/02/05 职场文书
优秀教师自我评价范文
2014/09/27 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
总经理助理岗位职责
2015/01/31 职场文书
国庆节新闻稿
2015/07/17 职场文书