使用Face++接口 PHP语言

本文介绍了如何使用PHP调用Face++接口来实现相似脸搜索。首先,下载PHP SDK,然后通过创建Faceset,添加明星脸并训练搜索模型。接着,详细展示了建立明星脸库如faceset_star和group_star的步骤,并提供了加入明星脸的代码示例。在完成这些步骤后,可以在Face++后台看到创建的组和Face集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,先下载php版本的SDK,SDK本质上是封装了http请求。
其次,这里仅仅是示例Face++接口的使用,在明星脸库中匹配相似脸,并显示相应图片。


1.核心步骤
FACE++官网提供的核心概念


由于是本例介绍的是相似脸搜索,因此最后两个步骤改为:

  • 构建Faceset:调用/faceset/create创建新的Faceset,使用/faceset/add_face将明星脸加入到Faceset中;
  • 模型训练:调用/train/search训练相应Faceset的搜索模型;
  • 人脸搜索:调用/recognition/search搜索相似脸。

2.基本步骤

  2.1建立明星脸库

进行相似脸搜索,需要在特定的脸库中搜索,因此要先建立相应的明星脸库。这里建立明星脸库faceset_star。为了方便获取到脸的名称,建立相应的group_star.

######构建Group
    $group_name = 'group_star';
    $facepp->execute('/group/delete',$params_group); //如果已经存在该Group,则先删除
    $response_group = $facepp->execute('/group/create',$params_group);

#####创建faceset
    $params_faceset['faceset_name'] = 'faceset_star';//可由系统随机产生
    //$facepp->execute('/faceset/delete',$params_faceset);
    $response_faceset = $facepp->execute('/faceset/create',$params_faceset);

这里简单在明星脸库中加入几个明星的脸。代码如下:

<?php

require_once 'facepp_sdk.php';


$facepp = new Facepp();
$facepp->api_key       = '';
$facepp->api_secret    = '';
$stars = array
    (
        array(
            'name'=>'范冰冰',
            'url'=>'http://www.faceplusplus.com.cn/assets/demo-img2/%E8%8C%83%E5%86%B0%E5%86%B0/11.jpg'
        ),
        array(
            'name'=>'张嘉倪',
            'url'=>'http://www.faceplusplus.com.cn/assets/demo-img2/%E5%BC%A0%E5%98%89%E5%80%AA/9.jpg'
        ),
        array(
            'name'=>'佟丽娅',
            'url'=>'http://www.faceplusplus.com.cn/assets/demo-img2/%E4%BD%9F%E4%B8%BD%E5%A8%85/11.jpg'
            ),
        array(
            'name'=>'买红妹',
            'url'=>'http://www.faceplusplus.com.cn/assets/demo-img2/%E4%B9%B0%E7%BA%A2%E5%A6%B9/10.jpg'
            ),
        array(
            'name'=>'张馨予',
            'url'=>'http://www.faceplusplus.com.cn/assets/demo-img2/%E5%BC%A0%E9%A6%A8%E4%BA%88/10.jpg'
            )
    );

######构建Group 
    $group_name = 'group_star';
    $params_group['group_name'] = $group_name; //可由系统随机产生 
    //$facepp->execute('/group/delete',$params_group); //如果已经存在该Gruoup,则先删除
    $response_group = $facepp->execute('/group/create',$params_group);

    #####创建faceset
    $params_faceset['faceset_name'] = 'faceset_star';//可由系统随机产生

    //$facepp->execute('/faceset/delete',$params_faceset);
    $response_faceset = $facepp->execute('/faceset/create',$params_faceset);

#######初步检测

for($i;$i<count($stars);$i++){

    $url = $stars[$i]['url'];
    $person_name = $stars[$i]['name'];

    $params_face['url'] = $url;
    $params_face['attribute']    = 'gender,age,race,smiling,glass,pose';
    $response_face   = $facepp->execute('/detection/detect',$params_face);

    if($response_face['http_code'] == 200){

        //获取face_id
        //对JSON 格式的字符串进行解码
        $face_body = json_decode($response_face['body'], true);
        $face = $face_body['face'];
        $face_1 = $face['0'];
        $face_id = $face_1['face_id'];

#######创建Person 
        $params_person['person_name'] = $person_name;
        //$response_person = $facepp->execute('/person/delete',$params_person);
        $response_person = $facepp->execute('/person/create',$params_person);

        //加入face
        $params_person['face_id'] = $face_id;
        $response_addface = $facepp->execute('/person/add_face',$params_person);

#######模型训练 

        //针对search功能对一个faceset进行训练
        $params_tsearch['faceset_name'] = $faceset_name;
        $response_tsearch= $facepp->execute('/train/search',$params_tsearch);

        //针对identify功能对一个Group进行训练
        $params_tidentify['group_name'] = $group_name;
        $response_tidentify = $facepp->execute('/train/identify',$params_tidentify);
    }
}

?>

需要在相应位置填写自己的api_key, api_secret, 并且需要SDK文件即 facepp_sdk.php

此时打开face++的后台管理(我的应用=》管理=》APP后台管理)就会看到建立的group_star和faceset_star。
group_star

group_star


faceset_star

faceset_star

  2.2 进行训练
  给定一张脸,要搜索相似脸,需要先进行初步检测,获得face_id,然后进行/train/search,并且更具face_id在faceset_star中搜索相似脸。
  为了进行/train/search。这里建立trainstudent.php文件
<?php

require_once 'facepp_sdk.php';

//已构建Faceset:faceset_stu ;Group:group_stu; 
class Train{

    /**
    *   对将要进行匹配的图片进行Trian
    *
    *   @param $params_train 人脸图片url或绝对路径
    *   @return face_id 若未检测到人脸或检测到多张人脸则返回false
    **/
    public function TrainStu($params_train){
        $facepp = new Facepp();
        $facepp->api_key       = '';
        $facepp->api_secret    = '';
        $faceset_name = 'faceset_stu';

        if(stripos($params_train,'http://')===false && stripos($params_train,'https://')===false){ //img
            $params_face['img'] = $params_train; 
        }else{ //url
            $params_face['url'] = $params_train;
        }

        $params_face['attribute']    = 'gender,age,race,smiling,glass,pose';

        //get face_id
        $response_face   = $facepp->execute('/detection/detect',$params_face);
        $face_body = json_decode($response_face['body'], true);

        if(empty($face_body['face'])){ //在图片中未检测到人脸
            return false;
        }
        if(count($face_body['face'])>1){ //在图片中检测到多张人脸
            return false;
        }

        $face = $face_body['face'];
        $face_1 = $face['0'];
        $face_id = $face_1['face_id'];

        //Train
        $params_faceset['faceset_name'] = $faceset_name;
        $session = $facepp->execute('/train/search',$params_faceset);

        return $face_id;
    }
}
  2.3 搜索相似脸
  给定的一张,进行trian,并且返回face_id,即可根据该id在脸库中搜索相似脸。这里建立search.php文件
<?php

require_once 'facepp_sdk.php';
require_once("/trainstudent.php");

    global $similarity; //相似度
    global $personname; //相似脸名称
    /**
    *   得到search之后匹配图片的url地址数组
    *   
    *   @param params 进行search图片的url或图片路径
    *   @return 
    **/

    function geturls($params){

        $facepp = new Facepp();
        $facepp->api_key       = '';//填写
        $facepp->api_secret    = '';//填写

        $trains = new Train;

        //进行train之后才能search
        $face_id = $trains->trainstu($params);

        //若未检测到人脸或检测到多张人脸
        if($face_id==false){
            return false;
        }

        $faceset_name = 'faceset_star'; //在faceset_star中搜索相似脸
        $params_search['key_face_id'] = $face_id;
        $params_search['faceset_name'] = $faceset_name;
        $params_search['count'] = 5;
        $response_search = $facepp->execute('/recognition/search',$params_search);

        $search = json_decode($response_search['body'],true);

        $urls = array();
        $GLOBALS['similarity'] = array();
        $GLOBALS['personname'] = array();

        $candidate = $search['candidate'];

        //设计json格式数据的解析
        for($i=0; $i<count($candidate); $i++){
            array_push($GLOBALS['similarity'],$candidate[$i]['similarity']);

            $params_getface['face_id']= $candidate[$i]['face_id'];
            //根据face_id获得该face的url,用于显示图片
            $response_getface = $facepp->execute('/info/get_face',$params_getface);

            $getface = json_decode($response_getface['body'],true);

            $face_info = $getface['face_info'];

            $face = $face_info[0];

            $person = $face['person'][0];

            array_push($GLOBALS['personname'],$person['person_name']);

            array_push($urls,$face['url']);

        }
        return $urls;
    }

    // 返回相似度数组
    function getsimilarity(){
        return $GLOBALS['similarity'];
    }
    // 返回明星脸对应的人名
    function getpname(){
        return $GLOBALS['personname'];
    }
?>
    2.4 输出相似脸
        给定face_id在face_star中搜索相似脸        
<?php

    require_once 'facepp_sdk.php';
    require_once 'search.php';

    $facepp = new Facepp();
    $facepp->api_key       = '';
    $facepp->api_secret    = '';

    //进行search图片的url或图片路径
    $param =  'http://www.faceplusplus.com.cn/wp-content/themes/faceplusplus/assets/img/demo/thumbnail/1.jpg?v=2';

    $urls = geturls($param);

    $similarity = getsimilarity();

    $personname = getpname();

    if($urls == false){
        return false;
    }
    for($i=0;$i<count($urls);$i++){
        $url = $urls[$i];
        echo "<img src = $url>";
        echo $similarity[$i]." ".$personname[$i];
    }
?>
   2.5 运行结果

(由于事先我已在face_star中加入了其他脸,结果可能不一致)。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值