热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

tp5上传阿里云oss并对接阿里云检测人脸(DetectFace)

需求:上传照片之后,需要检测上传的照片里是否存在人脸,如果不存在则不能通过。流程需要分两步:第一步,先上传至阿里云的oss,获得照片的url,第二步,再使用第一步获得的url去检测

需求:上传照片之后,需要检测上传的照片里是否存在人脸,如果不存在则不能通过。

流程需要分两步:第一步,先上传至阿里云的oss,获得照片的url,第二步,再使用第一步获得的url去检测(PS:阿里云的人脸检测只能支持oss地址,而且必须是上海地区的Bucket)。

 

请先获取阿里云的OSS和人脸的appid和key等配置信息。

获取到之后,再将配置信息新增到【config.php】文件里:

 

 

新增内容:

//阿里云配置
'aliyun' =>[
'AccessKeyID' => 'LTA******ZzQ',
'AccessKeySecret' => 'uzY9*******QrFc',
'EndPoint' => 'oss-cn-shanghai.aliyuncs.com',
'Bucket' => 'ai****ace',
'face' => [
'AccessKeyID' => 'LT******ZzQ',
'AccessKeySecret' => 'uz*******QrFc',
'endpoint' => 'facebody.cn-shanghai.aliyuncs.com',
]
,
]
,

 

 

先讲一下上传OSS(PS:已经懂得怎么上传的,请略过第一步)点此跳转至第二步

点此下载 oss sdk(地址:https://github.com/aliyun/aliyun-oss-php-sdk)

下载后,解压到项目的【extend】文件夹

 

解压完成后,在公共的地方新建一个文件【AliOssUpload】。在哪新建都行,只要后面能调用到就行。本人新建在 common/controller下

 

 

【AliOssUpload】文件内容:

php
namespace app\common\controller;
use think\Controller;
require_once APP_PATH . '/../extend/aliyun-oss/autoload.php'; //引入阿里云OSS SDK,注意替换路径
use OSS\Core\OssException;
use OSS\OssClient;
class AliOssUpload
{
/**
* 调用阿里云OSS SDK
* @param string $fileName 上传的文件
* @param string $path 上传的文件
* @return array 阿里云OSS上传处理结果
*
*/
public static function AliuploadFile($fileName, $path)
{
try {
//获取OSS参数值
$KeyId = config('aliyun.AccessKeyID');
$KeySecret = config('aliyun.AccessKeySecret');
$EndPoint = config('aliyun.EndPoint');
$Bucket = config('aliyun.Bucket');
//实例化
$ossClient = new OssClient($KeyId, $KeySecret, $EndPoint);
//执行阿里云上传
$result = $ossClient->uploadFile($Bucket, $fileName, $path);
//图片地址:$result['info']['url']
$arr = ['code' => 200, 'msg' => '上传成功', 'data' => $result['info']['url']];
}
catch (OssException $e) {
$arr = ['code' => 0, 'msg' => $e->getMessage(), 'data' => ''];
}
return $arr;
}
}

 

然后就是调用了,在api/controller里新建【Face.php】文件:

php
namespace app\api\controller;
use app\common\controller\Api;
use app\common\controller\AliOssUpload; //这里就是引用上面的文件
/**
* 人脸接口
*/
class Face extends Api
{
protected $noNeedLogin = ['*']; //是否需要登录 *表示全部都不
protected $noNeedRight = '*'; //是否需要鉴权 *表示全部都不/**
* 文件上传接口
* @param string $file
* @return bool
*/
public static function uploadFile($file)
{
// $file = "/uploads/20210624/aa159505d9bad351634bd4b89b674e2b.png";
$path = ROOT_PATH . "public" . $file; //绝对路径
$file = str_replace('/', '-', substr($file, 1)); //名字里不能出现 / 否则上传失败
//调用阿里云OSS上传
$res = AliOssUpload::AliuploadFile($file, $path);
if ($res['code'] != 200) {
return false;
}

return $res['data'];
}
}

 

至此,上传阿里云的OSS结束。

传完后,就要拿返回的url去做人脸检测了。

 

可以直接使用composer装人脸的SDK:

composer require alibabacloud/facebody-20191230 1.0.11

 

装完之后,在api/controller的【Face.php】文件新增调用人脸方法,完整的文件内容如下:

php
namespace app\api\controller;
use app\common\controller\Api;
use app\common\controller\AliOssUpload;
use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use AlibabaCloud\Tea\Tea;
use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\SDK\Facebody\V20191230\Models\DetectFaceRequest;
/**
* 人脸接口
*/
class Face extends Api
{
protected $noNeedLogin = ['*'];
protected $noNeedRight = '*';
protected $model = null;
protected $relationSearch = true;
/**
* 文件上传接口
* @param string $file
* @return bool
*/
public static function uploadFile($file)
{
// $file = "/uploads/20210624/aa159505d9bad351634bd4b89b674e2b.png";
$path = ROOT_PATH . "public" . $file; //绝对路径
$file = str_replace('/', '-', substr($file, 1)); //名字里不能出现 / 否则上传失败
//调用阿里云OSS上传

$res = AliOssUpload::AliuploadFile($file, $path);
if ($res['code'] != 200) {
return false;
}
//     if (isset($res['data']) && self::getFace($res['data'])) {
//       return true;
//     }
return $res['data'];
}
/**
* 是否存在人脸
* @param string $img 阿里云OSS的图片地址
* @return bool
*/
public static function getFace($img)
{
$args = config('aliyun.face');
$args['imageURL'] = $img;
return self::main($args);
}
/**
* 使用AK&SK初始化账号Client
* @param string $accessKeyId
* @param string $accessKeySecret
* @param string $endpoint
* @return Facebody Client
*/
public static function createClient($accessKeyId, $accessKeySecret, $endpoint)
{
$config = new Config([
// 您的AccessKey ID
"accessKeyId" => $accessKeyId,
// 您的AccessKey Secret
"accessKeySecret" => $accessKeySecret
]);
// 访问的域名
$config->endpoint = $endpoint;
return new Facebody($config);
}
/**
   * 调用阿里云人脸检测
* @param array $args
* @return bool
*/
public static function main($args)
{
try {
$client = self::createClient($args['AccessKeyID'], $args['AccessKeySecret'], $args['endpoint']);
$detectFaceRequest = new DetectFaceRequest([
"imageURL" => $args['imageURL']
]);
$resp = $client->detectFace($detectFaceRequest);
$faceInfo = Tea::merge($resp);
if (isset($faceInfo['body']) && $faceInfo['body']['Data']['FaceCount'] >= 1) {
return true;
}
return false;
// die;
// Console::log(Utils::toJSONString(Tea::merge($resp)));

} catch (\Exception $exception) {
return false;
}
}
}

 

 

 

推荐阅读
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 帝国CMS多图上传插件详解及使用指南
    本文介绍了一款用于帝国CMS的多图上传插件,该插件通过Flash技术实现批量图片上传功能,显著提升了多图上传效率。文章详细说明了插件的安装、配置和使用方法。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • 本文详细介绍了如何使用jQuery防止事件冒泡,确保子元素的点击事件不会触发父元素或祖先元素的相应事件。通过具体的代码示例和解释,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍如何使用PyCharm专业版通过SFTP上传项目文件至云服务器。首先,确保你使用的是PyCharm专业版,因为社区版不支持此功能。接下来,我们将在云服务器上创建一个专门的目录用于存放项目文件,并详细介绍每一步配置过程。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
author-avatar
你看我的泪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有