阿里巴巴人臉識別接口--phpsdk


這兩天接的小程序用了阿里雲的openapi--人臉識別接口,對接口這種工作人人都會,不過還是講下大體流程和代碼以備不時之需

composer require alibabacloud/sdk

然后開始碼,我用的框架tp5.0

  • 獲取調用該接口的權限
<?php
AlibabaCloud::accessKeyClient('foo', 'bar') // ->regionId('cn-hangzhou') ->asDefaultClient();
  • 根據文檔寫方法

添加人臉

參考地址: https://api.aliyun.com/#/?product=face&version=2018-12-03&api=AddFace&tab=DEMO&lang=PHP  

    /**     
* AddFace, 向人臉庫中添加人臉 * * @param string $Group 添加人臉的分組 * @param string $Person 添加人臉的姓名 * @param string $Image 添加人臉的編號 * @param string $Content 添加人臉圖片的base64編碼
* Content參數也可以換成圖片url,二者選一個即可    
*/ public function AddFace($Group, $Person, $Image, $Content){ try { $result = AlibabaCloud::rpc() ->product('FaceAPI') ->version('2018-12-03') ->action('AddFace') ->method('POST') ->host('face.cn-shanghai.aliyuncs.com') ->regionId('cn-shanghai') ->setAcceptFormat('json') ->setQueryParameters('Group', $Group) ->setQueryParameters('Person', $Person) ->setQueryParameters('Image', $Image) // ->setQueryParameters('ImageUrl', $ImageUrl) ->setQueryParameters('Content', $Content) ->request(); /** * ["RequestId"] => string(36) "E4C1CE50-5123-48A1-BEB7-CFBA4C2A7D5D" * ["Data"] => string(2) "ok" * ["Success"] => bool(true) * ["RequestId"] => string(36) "1588E5F8-6642-49D6-BB48-BDBD012589E0" * ["HostId"] => string(29) "face.cn-shanghai.aliyuncs.com" * ["Code"] => string(13) "AddImageError" * ["Message"] => string(67) "Error 1062: Duplicate entry 'test-testone12-test' for key 'img_idx'" */ $message = [ 'status'=>'failed', 'message'=>$result['Message'] ]; if(!empty($result['Success']) && $result['Success'] === true){ $message = [ 'status'=>'success', 'message'=>'添加人物肖像圖成功.' ]; }else if(!empty($result['Code'])){ if((strstr($result['Message'], 'Duplicate entry'))){ $message = [ 'status'=>'failed', 'message'=>'請勿重復添加人物肖像圖.' ]; }else if((strstr($result['Message'], 'Image Decode Failed'))){ $message = [ 'status'=>'failed', 'message'=>'圖片解碼失敗, 請檢查上傳圖片的編碼.' ]; }else if((strstr($result['Message'], 'NO_FACE_DETECTED'))){ $message = [ 'status'=>'failed', 'message'=>'請上傳正確的人臉圖片.' ]; }else if((strstr($result['Message'], 'expect 1'))){ $message = [ 'status'=>'failed', 'message'=>'請上傳只有一張人臉的圖片.' ]; } } return $this->response->create(['message'=>$message], 'json')->code('200'); } catch (ClientException $exception) { print_r($exception->getErrorMessage()); } catch (ServerException $exception) { print_r($exception->getErrorMessage()); } }

刪除人臉

參考地址: https://api.aliyun.com/#/?product=face&version=2018-12-03&api=DeleteFace&tab=DEMO&lang=PHP

    /**
     * DeleteFace, 從人臉庫中刪除人臉
     * 
     * @param string $Group 刪除人臉所在的分組
     * @param string $Person 刪除人臉的姓名
     * @param string $Image 刪除的人臉編號
     */
    public function DeleteFace($Group, $Person, $Image){
        try {
            $result = AlibabaCloud::rpc()
            ->product('FaceAPI')
            ->version('2018-12-03')
            ->action('DeleteFace')
            ->method('POST')
            ->host('face.cn-shanghai.aliyuncs.com')
            ->regionId('cn-shanghai')
            ->setAcceptFormat('json')
            ->setQueryParameters('Group', $Group)
            ->setQueryParameters('Person', $Person)
            ->setQueryParameters('Image', $Image)
            ->request();
            /**
             * {"RequestId":"8C1F5719-DDD6-433D-A9D0-20B91C0BF048","Data":"ok","Success":true}             
             */
            $result = $result->toArray();
            if(!empty($result['Success']) && $result['Success'] === true){
                $message = [
                    'status'=>'success',
                    'message'=>'刪除人物肖像圖成功.'
                ];
            }else{
                $message = $result;
            }
           return $this->response->create($message, 'json')->code('200');
       } catch (ClientException $exception) {
            print_r($exception->getErrorMessage());
        } catch (ServerException $exception) {
            print_r($exception->getErrorMessage());
        }
    }

列出人臉數據

參考地址: https://api.aliyun.com/#/?product=face&version=2018-12-03&api=ListFace&tab=DEMO&lang=PHP

  /**
    * ListFace接口用於列舉注冊庫中的人臉
    * 
    * @param string $Group
    */
    function ListFace($Group){
        try {
            $result = AlibabaCloud::rpc()
            ->product('FaceAPI')
            ->version('2018-12-03')
            ->action('ListFace')
            ->method('POST')
            ->host('face.cn-shanghai.aliyuncs.com')
            ->regionId('cn-shanghai')
            ->setAcceptFormat('json')
            ->setQueryParameters('Group', $Group)
            ->request();
            
            $result = $result->toArray();
            if(!empty($result['Success']) && $result['Success'] === true){
                $message = [
                    'status'=>'success',
                    'message'=>'獲取組 [' . $Group . '] 數據成功.',
                    'data'=>$result['Data']               
                ];
            }else{
                $message = $result;
            }
            return $this->response->create($message, 'json')->code('200');
            // print($result); // 輸出結果
        } catch (ClientException $exception) {
            print_r($exception->getErrorMessage());
        } catch (ServerException $exception) {
            print_r($exception->getErrorMessage());
        }
    }

列舉人臉組

參考地址: https://api.aliyun.com/#/?product=face&version=2018-12-03&api=ListGroup&tab=DEMO&lang=PHP

   /**
    * ListGroup,列舉人臉組
    */
    function ListGroup(){
        try {
            $result = AlibabaCloud::rpc()
            ->product('FaceAPI')
            ->version('2018-12-03')
            ->action('ListGroup')
            ->method('POST')
            ->host('face.cn-shanghai.aliyuncs.com')
            ->regionId('cn-shanghai')
            ->setAcceptFormat('json')
            ->request();
            /**
             * {"RequestId":"D410F1BB-9B45-4B8D-ABC0-3EF4E3A6F0B5","Data":["test"],"Success":true}
             */
            $result = $result->toArray();
            if(!empty($result['Success']) && $result['Success'] === true){
                $message = [
                    'status'=>'success',
                    'message'=>'獲取分組成功.',
                    'data'=>$result['Data'],                    
                ];
            }else{
                $message = $result;
            }
           return $this->response->create($message, 'json')->code('200');
        } catch (ClientException $exception) {
            print_r($exception->getErrorMessage());
        } catch (ServerException $exception) {
            print_r($exception->getErrorMessage());
        }
    }

人臉檢索,返回的是一個score,我判斷小於0.5即不是一個人

參考地址: https://api.aliyun.com/#/?product=face&version=2018-12-03&api=RecognizeFace&tab=DEMO&lang=PHP

    /**
     * RecognizeFace, 查找注冊庫中的人臉
     * 
     * @param string $Group 識別的組
     * @param string $Content 圖像base64編碼
     */
    function RecognizeFace($Group, $Content){
        try {
            $result = AlibabaCloud::rpc()
            ->product('FaceAPI')
            ->version('2018-12-03')
            ->action('RecognizeFace')
            ->method('POST')
            ->host('face.cn-shanghai.aliyuncs.com')
            ->regionId('cn-shanghai')
            ->setAcceptFormat('json')
            ->setQueryParameters('Group', $Group)
            // ->setQueryParameters('ImageUrl', $ImageUrl)
            ->setQueryParameters('Content', $Content)
            ->request();
            /**
             * {"status":"success","message":"獲取分組成功.","data":[{"image":"test","rect":[227,80,160,215],"score":0.049100418,"person":"testonelb"}]}
             */
            $result = $result->toArray();
            if(!empty($result['Success']) && $result['Success'] === true){
                if($result['Data'][0]['score'] > 0.5){
                    $message = [
                        'status'=>'success',
                        'message'=>'驗證成功.',
                        'data'=>$result['Data'],                    
                    ];
                }else{
                    $message = [
                        'status'=>'failed',
                        'message'=>'驗證失敗.',
                        'data'=>$result['Data'],                    
                    ];
                }       
            }else{
                $message = $result;
            }
            return $message;
        } catch (ClientException $exception) {
            print_r($exception->getErrorMessage());
        } catch (ServerException $exception) {
            print_r($exception->getErrorMessage());
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM