使用Face++接口 PHP語言

首先,先下載php版本的SDK,SDK本質上是封裝瞭http請求。
其次,這裡僅僅是示例Face++接口的使用,在明星臉庫中匹配相似臉,並顯示相應圖片。


1.核心步驟


由於是本例介紹的是相似臉搜索,因此最後兩個步驟改為:

構建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);

這裡簡單在明星臉庫中加入幾個明星的臉。代碼如下:

api_key       = '';
$facepp->api_secret    = '';
$stars = array
    (
        array(
            'name'=>'范冰冰',
            'url'=>'https://www.faceplusplus.com.cn/assets/demo-img2/%E8%8C%83%E5%86%B0%E5%86%B0/11.jpg'
        ),
        array(
            'name'=>'張嘉倪',
            'url'=>'https://www.faceplusplus.com.cn/assets/demo-img2/%E5%BC%A0%E5%98%89%E5%80%AA/9.jpg'
        ),
        array(
            'name'=>'佟麗婭',
            'url'=>'https://www.faceplusplus.com.cn/assets/demo-img2/%E4%BD%9F%E4%B8%BD%E5%A8%85/11.jpg'
            ),
        array(
            'name'=>'買紅妹',
            'url'=>'https://www.faceplusplus.com.cn/assets/demo-img2/%E4%B9%B0%E7%BA%A2%E5%A6%B9/10.jpg'
            ),
        array(
            'name'=>'張馨予',
            'url'=>'https://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;$iexecute('/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文件

api_key       = '';
        $facepp->api_secret    = '';
        $faceset_name = 'faceset_stu';

        if(stripos($params_train,'https://')===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文件
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; $iexecute('/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中搜索相似臉        
api_key       = '';
    $facepp->api_secret    = '';

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

    $urls = geturls($param);

    $similarity = getsimilarity();

    $personname = getpname();

    if($urls == false){
        return false;
    }
    for($i=0;$i
   2.5 運行結果

(由於事先我已在face_star中加入瞭其他臉,結果可能不一致)。
這裡寫圖片描述

發佈留言