热门标签 | 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;
}
}
}

 

 

 

推荐阅读
  • C语言开发学生信息管理系统的实践体会与技术总结
    在C语言开发的学生信息管理系统项目中,我们成功实现了学生信息的增、删、改、查功能,并将操作结果实时同步到文本文件中。通过该项目,我们不仅掌握了C语言的基本语法和文件操作技巧,还深入理解了数据结构和算法的应用。在设计修改学生信息界面时,我们采用了分步验证和动态更新的方法,确保数据的一致性和准确性。此外,我们还对系统进行了性能优化,以提高数据处理效率和用户体验。以下是系统部分界面的展示,供参考。 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
  • 本文介绍了在 Android 平台上的图片上传工具类优化方案,重点讨论了如何通过设置 `MultipartEntity` 来实现图片的高效上传。具体实现中,通过自定义 `UserUploadServiceImpl` 类,详细展示了如何构建和发送包含图片数据的 HTTP 请求。此外,还探讨了如何处理上传过程中的常见问题,如网络异常和文件格式验证,以确保上传的稳定性和可靠性。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
  • 近日,我开发的首个 Flutter 应用在首次发布后便获得了苹果官方的精品推荐。尽管仅此一次,但这一认可极大地激励了我。当时我只是注意到应用的数据出现了显著增长,直到今天才意识到原来是得到了 App Store 的推荐。这对我来说是一个重要的里程碑,也是对 Flutter 开发潜力的肯定。 ... [详细]
  • 理解域名、网站名称与URL之间的差异及其专业含义
    本文旨在阐明域名、网站名称与URL之间的区别及其专业含义。域名是互联网上用于标识特定资源的唯一字符串,而网站名称则是用户对网站的通俗称呼。URL则包含了访问特定网页所需的所有信息,包括协议类型、服务器地址及具体路径。了解这些概念有助于更好地管理和使用网络资源。 ... [详细]
  • 创建型设计模式中的工厂方法模式,如同在不同场合选择合适的餐厅邀请心仪的对象用餐一样,无论是麦当劳的经典鸡翅还是肯德基的特色炸鸡,尽管风味各异,但都能满足不同人群的口味偏好。通过灵活运用工厂方法模式,软件开发中可以根据具体需求动态选择和创建对象,从而提高代码的可扩展性和复用性。 ... [详细]
  • 整合百度UEditor编辑器于ASP后端的实现步骤与技巧
    随着微软停止对XP系统的支持,公司已全面升级至Windows 7。早期网站创建时使用的编辑器仅兼容IE6浏览器,而如今系统更新后,原有的编辑器已无法满足新环境的需求。本文详细介绍了如何将百度UEditor编辑器整合到ASP后端,包括实现步骤和实用技巧,确保网站在新系统下仍能高效运行并提供良好的用户体验。 ... [详细]
  • 如何在微信公众平台集成新浪云服务应用摘要:新浪云服务平台SinaAppEngine(简称SAE)自2009年启动内部研发,并于同年对外开放。本文详细介绍了如何利用SAE的强大功能,在微信公众平台上构建高效、稳定的云服务应用程序,涵盖从环境配置到应用部署的全流程,为开发者提供详尽的技术指导与实践案例。 ... [详细]
  • 本课程首先介绍了全栈开发的最后一公里为何重要,并详细探讨了搭建线上生产环境的关键步骤。随后,通过五个本地Node.js项目的实战演练,逐步展示了从快速构建纯静态简易站点到复杂应用的全过程,涵盖了环境配置、代码优化、性能调优等多方面内容。 ... [详细]
  • 高校计算机基础教育讲义PPT:第18讲核心知识点解析与应用
    本讲义PPT涵盖高校计算机基础课程第18讲的核心知识点,详细解析了相关理论与实际应用,共15页。内容包括但不限于数据结构、算法设计及编程实践,旨在帮助学生深入理解并掌握关键概念和技术,适用于教学与自学。 ... [详细]
  • Django项目中配置媒体文件路径的详细步骤与最佳实践
    在Django项目中配置媒体文件路径的详细步骤包括:首先,创建一个新的应用(如 `app02`),然后在 `settings.py` 文件中配置媒体文件的存储路径。具体来说,需要导入 `os` 模块,并使用 `os.path.join` 方法来指定媒体文件的保存目录。此外,建议在开发和生产环境中分别设置不同的媒体文件路径,以确保项目的灵活性和安全性。为了更好地管理和访问媒体文件,还可以在 `urls.py` 中添加相应的URL配置,以便在开发服务器上直接访问这些文件。 ... [详细]
  • 基于STM32的智能太阳能路灯设计与华为云IOT集成方案
    基于STM32的智能太阳能路灯设计与华为云IOT集成方案 ... [详细]
  • 内网渗透技术详解:PTH、PTT与PTK在域控环境中的应用及猫盘内网穿透配置
    本文深入探讨了内网渗透技术,特别是PTH、PTT与PTK在域控环境中的应用,并详细介绍了猫盘内网穿透的配置方法。通过这些技术,安全研究人员可以更有效地进行内网渗透测试,解决常见的渗透测试难题。此外,文章还提供了实用的配置示例和操作步骤,帮助读者更好地理解和应用这些技术。 ... [详细]
  • MD5,即消息摘要算法5,是一种广泛应用于确保数据传输完整性的哈希算法。作为计算机领域常用的杂凑算法之一,MD5在多种主流编程语言中均有实现。此外,本文还详细解析了SHA、DES、3DES、AES、RSA和ECC等加密算法的基本原理和应用场景,为读者提供全面的加密技术概览。 ... [详细]
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社区 版权所有