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


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 相关文章推荐
用jscript启动sqlserver
Jun 21 Javascript
Javascript绝句欣赏 一些经典的js代码
Feb 22 Javascript
jQuery.clean使用方法及思路分析
Jan 07 Javascript
js中方法重载如何实现?以及函数的参数问题
Aug 01 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
Apr 29 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
Jun 17 Javascript
深入理解React高阶组件
Sep 28 Javascript
利用ECharts.js画K线图的方法示例
Jan 10 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
泛谈JS逻辑判断选择器 || &&
May 24 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 方便水印和缩略图的图形类
2009/05/21 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
三级下拉菜单的js实现代码
2011/05/23 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
2015/04/28 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS实现动态倒计时功能(天数、时、分、秒)
2019/12/12 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
Python找出9个连续的空闲端口
2016/02/01 Python
python实现批量修改文件名代码
2017/09/10 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
Python KMeans聚类问题分析
2018/02/23 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
非常漂亮的CSS3百叶窗焦点图动画
2016/02/24 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
公司年底活动方案
2014/08/17 职场文书
租房协议书
2014/09/12 职场文书
李白故里导游词
2015/02/12 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python
Go归并排序算法的实现方法
2022/04/06 Golang
python 闭包函数详细介绍
2022/04/19 Python