ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-07-15 16:06:04  阅读:182  来源: 互联网

标签:return DetectFace oss args 阿里 人脸 上传


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

流程需要分两步:第一步,先上传至阿里云的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; } } }

 

 

 

标签:return,DetectFace,oss,args,阿里,人脸,上传
来源: https://www.cnblogs.com/j-jian/p/15015968.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有