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


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 相关文章推荐
Array.prototype.slice 使用扩展
Jun 09 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
小试JQuery的AutoComplete插件
May 04 Javascript
JavaScript对象属性检查、增加、删除、访问操作实例
Jul 08 Javascript
JavaScript SHA512&SHA256加密算法详解
Aug 11 Javascript
JavaScript实现给按钮加上双重动作的方法
Aug 14 Javascript
jQuery基于扩展简单实现倒计时功能的方法
May 14 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
layui select动态添加option的实例
Mar 07 Javascript
Layui表格行工具事件与数据回填方法
Sep 13 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
Mar 02 Javascript
js实现省级联动(数据结构优化)
Jul 17 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
PHP 5.6.11中CURL模块问题的解决方法
2016/08/08 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
Extjs gridpanel 出现横向滚动条问题的解决方法
2011/07/04 Javascript
jquery实现marquee效果(文字或者图片的水平垂直滚动)
2013/01/07 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
Bootstrap Scrollspy源码学习
2017/03/02 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
python将字符串转换成数组的方法
2015/04/29 Python
python3.5实现socket通讯示例(TCP)
2017/02/07 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
Python post请求实现代码实例
2020/02/28 Python
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
super()与this()的区别
2016/01/17 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
线程同步的方法
2016/11/23 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
五一服装活动方案
2014/01/11 职场文书
初一地理教学反思
2014/01/16 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
党员批评与自我批评材料
2014/10/14 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python