本节使用doCurlGetRequest函数来封装Face++的接口请求。我们在class文件夹下的faceStub.php文件中实现

一个faceStub类,封装请求Face++的相关接口。

实现代码:

class faceStub {

  // 请求Face++

    private static function requestToFace($interface, $data) {

      $data = array_merge($data, array('api_key'=>API_KEY, 'api_secret' => API_SECRET)) ;

      interface_log(DEBUG, 0, "url:  "  .  FACE_URL  .  $interface  .  "\ndata:"  .

      var_export($data, true) );

      $json = doCurlGetRequest(FACE_URL  .  $interface,  $data,  FACE_TIMEOUT) ;

      interface_log(DEBUG,  0,  'response:'  .  $json) ;

      $data = json_decode($json,  true) ;

      if(!$data || $data['error_code']) {

        return false;

      } else {

        return $data;

      }

    }

    // 创建Face++的Group

    public static function createGroup($groupName)  {

      $interface = 'group/create' ;

      $data = array(

             'group_name'  =>  $groupName

            );

      return faceStub::requestToFace($interface, $data) ;

    }

    // 检测图片中的人脸

    public static fuction detect($imageUrl)  {

      $interface = 'detection/detect' ;

      $data = array(

             'url' => $imageUrl 

            ) ;

      return faceStub::requestToFace($interface, $data);

    }

    // 搜索相似脸

    public static function search($faceId, $groupName, $count)  {

        $interface = 'recognition/search' ;

        $data = array(

                'key_face_id' => $faceId,

                'group_name' => $groupName,

                'count' => $count

              );

        return faceStub::requestToFace($interface, $data) ;

    }

    // 创建Person

    public static function createPerson($personName, $faceId, $groupName)  {

        $interface = 'person/create' ;

        $data = array(

                'person/create' ;

                'face_id' => $faceId,

                'group_name' => $groupName

              );

        return faceStub::requestToFace($interface, $data) ;

    }

    // 添加Face到Person

    public static function addFaceToPerson($personName, $faceId) {

        $interface = 'person/add_face' ;

        $data = array(

               'person_name' => $personName, 'face_id => $faceId'

               );

        return faceStub::requestToFace($interface, $data) ;

    }

    

    // 删除Person的Face

    public static function removeFaceFromPerson($personName, $faceId)  {

        $interface = 'person/remove_face' ;

        $data = array(

               'person_name' => $personName,

               'face_id' => $faceId

        );

        return faceStub::requestToFace($interface, $data) ;

    }

    // 获取session结果,session是train的返回

    public static function getSession($sessionId)  {

        $interface = 'info/get_session' ;

        $data = array(

               'session_id' => $sessionId

               );

        return faceStub::requestToFace($interface, $data) ;

    }

    // 获取Person结果, session是train的返回

    public static function getSeession($sessionId)  {

        $interface = 'info/get_session' ;

        $data = array(

               'session_id' => $sessionId

               );

        return faceStub::requestToFace($interface, $data) ;

    }

    // 获取Person的信息

    public static function getPersonInfo($personName)  {

        $interface = 'person/get_info' ;

        $data = array(

               'person_name' => $personName

               );

        return faceStub::requestToFace($interface, $data) ;

    }

}

    faceStub类中每个函数都对应到Face++的具体接口,这些都是findface需要使用到的,

如果您需要使用其他的接口,可以按照这个faceStub类的实现方法快速封装其他接口。

___________over___________

Face++接口封装的更多相关文章

  1. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  2. C++ Redis mset 二进制数据接口封装方案

    C++ Redis mset 二进制数据接口封装方案 需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在r ...

  3. hiredis异步接口封装并导出到Lua

    hiredis异步接口封装并导出到Lua(金庆的专栏 2017.1)hiredis 不支持 Windows, Windows 下使用 wasppdotorg / hiredis-for-windows ...

  4. 基于Verilog的带FIFO输出缓冲的串口接收接口封装

    一.模块框图及基本思路 rx_module:串口接收的核心模块,详细介绍请见“基于Verilog的串口接收实验” rx2fifo_module:rx_module与rx_fifo之间的控制模块,其功能 ...

  5. vue2.0 + vux (五)api接口封装 及 首页 轮播图制作

    1.安装 jquery 和 whatwg-fetch (优雅的异步请求API) npm install jquery --save npm install whatwg-fetch --save 2. ...

  6. 基于Zabbix API文档二次开发与java接口封装

    (继续贴一篇之前工作期间写的经验案例) 一.           案例背景 我负责开发过一个平台的监控报警模块,基于zabbix实现,需要对zabbix进行二次开发. Zabbix官方提供了Rest ...

  7. 微信小程序“一劳永逸”的接口封装

    前言 最近都在研究小程序了,我可以的! 需求 之前都是用vue来开发项目的,接口模块我特意封装了一下.感觉也可以记录一下 小程序的接口虽说简单,但是重复调用那么多,显得不专业(一本正经的胡说八道) 还 ...

  8. Plx9030通讯卡驱动开发与接口封装

    在学校的时候,曾经采用DDK+Driverstudio+VC6.0环境做过9054视频采集卡的驱动开发,回想起调试过程,记得最清楚的就是过无数次的计算机蓝屏重启....今天第一天来到新公司,老大就说你 ...

  9. java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述: Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存 ...

  10. sdk开发时,对外暴露的接口封装

    思考,用同步还是异步? 实质就是屏蔽一些东西,让使用者直接传参数 拿结果 而不用关心具体实现 eg.登陆接口 1.定义接口LoginCallBack,两个函数 请求成功和失败 public inter ...

随机推荐

  1. hadoop 2.2.0的datanode中存储block的多个文件夹的负载均衡问题

    hadoop的分布式文件系统HDFS的存储方式是,将数据分成block,分布式存储在整个hadoop集群的datanode中,每个block默认的大小是64M,这些block文件的具体存储位置是在ha ...

  2. *[topcoder]LongWordsDiv2

    http://community.topcoder.com/stat?c=problem_statement&pm=13147 此题关键在于发现ABAB的组合最多有26*26种,可以穷举,然后 ...

  3. IOS 逆向工程之砸壳

    在<iOS应用逆向工程>4.6.2节中,我们曾推荐使用iPhoneCake源的AppCrackr 1.7版给App砸壳.这种方式简单粗暴,省时省力,但正是因为它过于方便有木有,导致几乎所有 ...

  4. Git教程之工作区和暂存区(5)

    工作区(Working Directory) 就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

  5. C++:基类和派生类

    4.1 派生类的声明 继承实例如下: class Person{ //声明基类Person public: void print() { cout<<"name:"&l ...

  6. Android 关于listView 显示不全的问题

    刚刚在项目中发现一个bug,我是用ScrollView 嵌套 ListView的,但是我的数据只能显示一条,开始我还以为是数据有错误,经过排查以后发现是正确的 百度发现 android的架构好像没有考 ...

  7. shell编程基础(2)---&&与||

    shell 编程重要的应用就是管理系统,对于管理系统中成千上万的程序而言,查询某个文件名是否存在,并且获取该文件名所指代文件基本信息是系统管理员的基本任务.shell命令可以很轻松的完成这项任务. # ...

  8. 爬虫Larbin解析(一)——Larbin配置与使用

    介绍 功能:网络爬虫 开发语言:c++ 开发者:Sébastien Ailleret(法国) 特点:只抓取网页,高效(一个简单的larbin的爬虫可以每天获取500万的网页) 安装 安装平台:Ubun ...

  9. (2)WinForm中改变Tab选项卡的顺序

    Tab选项卡选中,在其属性中找到TabPages这个属性.点进去,可以通过上下移动标签卡改变标签卡的顺序.

  10. Android权限安全(3)权限的分级和自定义权限

    Android的不同权限分级 Normal 一般apk都可以用, Dangerous 一般apk都可以用,但有提示 SignatureOrSystem 特定的private key签名的或系统的apk ...