原理很简单:设备捕捉到人脸,拍照,将捕捉到的照片与人脸库中的所有基准图做对比,会找出相似度大于某值(具体数值可自己设置)的n张照片,取相似值最接近的一张即为此用户。
1.首先注册个百度账号,登录百度ai https://console.bce.baidu.com/
2.在人脸识别-应用列表中建立一个应用(如图):此处的APPID 、API KEY 、SECRET KEY 记下来,需要用到
3.在可视化人脸库中建用户组(人脸基准图会放在用户组中):
可以看下代码示例:
<?php
namespace services\ai;
use Yii;
require_once(__DIR__."/aip-php-sdk-2.2.4/AipFace.php");
class BaiduFace extends \services\Service
{
const SCORE = 50;
private $_APP_ID = '*******';
private $_API_KEY = 'M***************x';
private $_SECRET_KEY = 'X**********************j';
private $_app;
public function init()
{
try{
if(\models\setting\Config::get('baidu_ai_APP_ID')){
$this->_APP_ID = \models\setting\Config::get('baidu_ai_APP_ID');
}
if(\models\setting\Config::get('baidu_ai_API_KEY')){
$this->_API_KEY = \models\setting\Config::get('baidu_ai_API_KEY');
}
if(\models\setting\Config::get('baidu_ai_SECRET_KEY')){
$this->_SECRET_KEY = \models\setting\Config::get('baidu_ai_SECRET_KEY');
}
}catch (\Exception $e){
\models\setting\Log::error($e->getMessage());
}
parent::init(); // TODO: Change the autogenerated stub
}
private function getApp()
{
if(!$this->_app){
$this->_app = new \AipFace($this->_APP_ID, $this->_API_KEY, $this->_SECRET_KEY);
}
return $this->_app;
}
/*search函数 搜寻人脸库图片,找与当前照片相似度高的图片*/
public function search($data)
{
$groupIdList = "1";//此处为用户组名
if(!empty($data['group_id'])){
$groupIdList = $data['group_id'];
}
$r = $this->getApp()->search($data['url'], 'URL', $groupIdList);
if($r['error_code'] == 0){
$userInfo = $r['result']['user_list'][0];
if($userInfo['score'] >= self::SCORE){
return $userInfo;
}else{
$error_msg = '识别结果相似度较低';
return $error_msg;
}
}else{
return $r['error_msg'];
}
}
/*添加新用户的人脸基准图(人脸信息采集),唯一标识可以是用户的user_uuid*/
public function addUser($data)
{
$groupIdList = "1";//此处为用户组名
if(!empty($data['group_id'])){
$groupIdList = $data['group_id'];
}
$r = $this->getApp()->addUser($data['url'], 'URL', $groupIdList, $data['user_uuid']);
if($r['error_code'] == 0){
// return $r['result']['user_list'][0];
return true;
}else{
$this->addError($r['error_msg']);
return false;
}
}
/*更新用户的人脸基准图(人脸信息采集),若没有此用户,则新加。建议使用此函数。唯一标识可以是用户的user_uuid*/
public function updateUser($data)
{
$groupIdList = "1";//此处为用户组名
if(!empty($data['group_id'])){
$groupIdList = $data['group_id'];
}
$options = array();
$options["action_type"] = "REPLACE";
$r = $this->getApp()->updateUser($data['url'], 'URL', $groupIdList, $data['user_uuid'], $options);
if($r['error_code'] == 0){
// return $r['result']['user_list'][0];
return true;
}else{
// $this->addError($r['error_msg']);
return $r['error_msg'];
}
}
}
tip:在添加人脸前,需要先查询下人脸库中是否有相似度较高的图片,防止同一个人脸注册多个账号!