在学习人脸检测的过程中,具体操作的每个步骤都要先列出来。第一步需要在人脸数据库里添加一张经检测是否是人脸(怎么检测很重要)的照片。第二部是运用微信小程序里的camera组件检测是否是本人。
这就两大步都要具体在分小步骤做。
一大步骤
1.把图片下载到开发者服务器文件里并且添加到人脸数据库里。
(首先实现下载到本地文件里你可以用固定的一张图片路径测试,之后运用thinkphp框架里的上传文件知识,把测试的图片上传到本地文件里。如果上传成功,则获取上传文件的信息)
会不会疑惑怎么把测试的图片下载到本地文件里?在tp框架里前台用到了 选择文件。但在微信小程序里利用weui-wxss-master(weui样式)样式和wx.uploadFile()将本地资源上传到开发者服务器里。
问题又来了,上传文件到开发者服务器里之后,跟添加到人脸数据库有什么联系?
添加人脸数据库这个库我用的是百度云人脸数据库,所以查看百度云技术文档(安装人脸识别php sdk3) 例如下图。具体代码也在下面。
利用上面的方法,先用固定一张照片测试。
怎么检测很重要!!!!
调用aipface.php文件里的方法,
$client = new \AipFace($APP_ID, $API_KEY, $SECRET_KEY);返回的是一个数组,里面有很多键值。根据键值判断是否是人脸。
$addUser = $client->addUser($image, $imageType, $groupId, $userId, $options);添加到人脸数据库里。
public function facevalid(){
$file = './Uploads/2018-05-17/1.jpg';
if (!file_exists($file)) {
die('文件不存在');
}
//APP_PATH是从你文件开始的路径
$dir = APP_PATH .'/face-sdk/';
require_once $dir . 'AipFace.php';
$APP_ID = '';(这三个参数都是人脸数据库里的值)
$API_KEY = '';
$SECRET_KEY = '';
//因没有命名空间所以加个\
$client = new \AipFace($APP_ID, $API_KEY, $SECRET_KEY);
// 取决于image_type参数,传入BASE64字符串
$image = file_get_contents($file);
$image = base64_encode($image);
// echo $image;
$imageType = "BASE64";
// 如果有可选参数
$options = array();
// $options["face_field"] = "age";
$options["max_face_num"] = 10;
// $options["face_type"] = "LIVE";
// 调用人脸检测(输出数组)
// $ret = $client->detect($image, $imageType);
// print_r($ret);
// 带参数调用人脸检测
$ret = $client->detect($image, $imageType, $options);
// print_r($ret);
//是不是人脸
$code = $ret['error_code'];
// print_r($code);
if($code===0){
//在检测是不是一个人
$face_num = $ret['result']['face_num'];
// echo $face_num;
$face_list = $ret['result']['face_list'];
// print_r($face_list);
$face_probability = $face_list[0]['face_probability'];
// echo $face_probability;
//还有一个条件是relocation=0是角度是90度(判断是不是一个人的脸)
if ($face_num===1 && $face_probability===1) {
// echo 'shi';
$groupId = 'user_group_id';
$user = guid();
// echo $userId;
$userid = str_replace("{","",$user);
$userId =str_replace("}","",$userid);
$userId = str_replace("-","_",$userId);
// echo $userId;
$addUser = $client->addUser($image, $imageType, $groupId, $userId, $options);
// print_r($addUser);
$ret = $addUser['error_code'];
// echo $ret;
}else{
echo '不是一个人的脸有可能图片有你的朋友或者亲人哦!';
}
}else{
// echo '不是人脸';
}
}
二大步骤
运用微信小程序里的camera组件。
根据微信里给出具体例子。利用其中的代码就可以得到一个字符串,tempImagePath。
之后的步骤跟之前一样。也是要先把图片上传到本地文件里(得到$image),再调用aipface.php文件里检测人脸的接口,就可以了。