关注公众号,发现CV技术之美
导言:
本文将会实测七牛云的人脸识别 API,从应用开发者的角度来验证这套 API 的可用性。文中会选用人脸比对、权威人脸比对和人脸检测这3个API来进行测试。
本文使用 PHP 作为编程语言,需要安装 Composer,这是 PHP 开发中广泛使用的依赖库管理工具,相当于 JavaScript 里的 npm。七牛云提供的官方 PHP SDK 也是通过 Composer 来安装的。
为了尽可能排除不相关的细节,代码是以命令行方式来运行的,每个 API 对应一个 PHP 代码文件。
预备工作
1. 建立工作目录并安装依赖
首先建立一个目录存放项目代码,并进入该目录,后续所有的操作都在该目录下:
mkdir qiniu-api
cd qiniu-api
接下去用 Composer 安装依赖包,除了安装七牛云官方提供的 SDK 外,我们还要安装一个 HTTP 库,用来发送 API 请求。虽然用原生 PHP 函数也能发送 API 请求,但用库的好处是库为我们处理了很多细节,让我们不用为此操心,而且库封装后的发送代码很简洁,即便不熟悉 PHP 的开发者也容易读懂。在本文中,我们选用 Symfony 的 HTTP Client 库来发送 API 请求。
用以下的命令来安装上述的 2 个库:
composer require qiniu/php-sdk
composer require symfony/http-client
安装成功后,目录内会生成 composer.json 和 composer.lock 两个文件,库的代码放在生成的 vendors 目录下。我们无需关心这些生成的代码。
2. 获取七牛云账号的密钥
注册或登录七牛云的账户,在“个人中心”的“密钥管理”里,七牛云会自动生成两对 Access Key 和 Secret Key,选择其中一对,复制出来。
人脸比对
这个 API 主要的功能是接收 2 张发送过来的照片,根据照片上人脸的相似度给出一个分值,用以判断 2 张照片中的是否为同一人。
新建一个名为 face-compare.php 的文件,这里的代码主要分为 3 部分,第 1 部分校验命令行传入的参数并返回结构化后的命令行参数数据,第 2 部分根据命令行参数来准备发送到 API 的请求数据,第 3 部分为实际调用 API。这 3 部分会分别放在 3 个函数中,以便于理解。为了强调 API 本身的调用流程,我们对代码不会做过多的封装,完善的错误处理也不会涉及。
在开始编写那些函数之前,先在代码里做一些预备工作,具体请看代码里的注释:
<?php
// 解决自动加载问题,之后引用的类会被自动加载
require_once __DIR__ . '/vendor/autoload.php';
// 指定使用特定命名空间下的类
use Qiniu\Auth;
use Symfony\Component\HttpClient\HttpClient;
// 定义两个常量,分别对应上文提到的七牛云里复制出的Access Key和Secret Key,这里需要替换成你实际的key
// 实际项目中,这些值可能是从配置文件或环境变量中读取
define('ACCESS_KEY', 'your_own_access_key');
define('SECRET_KEY', 'your_own_secret_key');
接着定义 3 个与人脸比对 API 相关的变量,这些变量的值都是文档里定义的。
// API的调用地址
$apiUrl = 'https://face-compare.qiniuapi.com/facecompare';
// 提交到API时用到的HTTP方法,本文中涉及的3个API都是该方法
$method = 'POST';
// 发送到API的请求body的mime类型,本文中涉及的3个API都是使用该类型
$contentType = 'application/json';
我们定义第一个函数,用来对参数做最基本的检验:
/**
* @param int $argc 命令行参数的数量
* @param array $argv 存储命令行参数的数组
* @return array 命令行里得到的数据
*/
function getIn