thinkphp5调用阿里云人脸人体sdk,实现人像动漫化等功能

1、先创建一个类文件,用于实例化

<?php
namespace app\wx\controller;


use AlibabaCloud\SDK\Facebody\V20191230\Facebody;
use \Exception;
use AlibabaCloud\Tea\Exception\TeaError;
use AlibabaCloud\Tea\Utils\Utils;

use Darabonba\OpenApi\Models\Config;
use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions;
//人像动漫化
use AlibabaCloud\SDK\Facebody\V20191230\Models\GenerateHumanAnimeStyleRequest;
//智能美肤
use AlibabaCloud\SDK\Facebody\V20191230\Models\RetouchSkinRequest;
//智能瘦脸
use AlibabaCloud\SDK\Facebody\V20191230\Models\LiquifyFaceRequest;
//人像素描
use AlibabaCloud\SDK\Facebody\V20191230\Models\GenerateHumanSketchStyleRequest;
//人脸修复增强
use AlibabaCloud\SDK\Facebody\V20191230\Models\EnhanceFaceRequest;
//人脸美颜
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceBeautyRequest;
//人脸美妆
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceMakeupRequest;
//人脸滤镜
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceFilterRequest;
//人脸美型
use AlibabaCloud\SDK\Facebody\V20191230\Models\FaceTidyupRequest;

class Sample {

    /**
     * 使用AK&SK初始化账号Client
     * @param string $accessKeyId
     * @param string $accessKeySecret
     * @return Facebody Client
     */
    public static function createClient($accessKeyId, $accessKeySecret){
        $config = new Config([
            // 必填,您的 AccessKey ID
            "accessKeyId" => $accessKeyId,
            // 必填,您的 AccessKey Secret
            "accessKeySecret" => $accessKeySecret
        ]);
        // Endpoint 请参考 https://api.aliyun.com/product/facebody
        $config->endpoint = "facebody.cn-shanghai.aliyuncs.com";
        return new Facebody($config);
    }

   //$argv参数是一个数组,包含原图的oss地址,和一些其他的参数,注意oss必须为上海地区的,其他地区的不行,上传本地图片的我没试,不知道能不能行的通
    public static function main($type=0,$argv){
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/311677.html
        $client = self::createClient('这里替换成你自己的accessKeyId','这里替换成你自己的accessKeySecret');
        //我这里使用了type判断,用于实现传入不同的type,实现不同的特效,特效名可以参考上方的use部分,你也可以把不需要的特效删除,$type是调用这个类传过来的
        if($type==1){
            $generateHumanAnimeStyleRequest = new GenerateHumanAnimeStyleRequest($argv);
        }else if($type==2){
            $retouchSkinRequest = new RetouchSkinRequest($argv);
        }else if($type==3){
            $liquifyFaceRequest = new LiquifyFaceRequest($argv);
        }else if($type==4){
            $generateHumanSketchStyleRequest = new GenerateHumanSketchStyleRequest($argv);
        }else if($type==5){
            $enhanceFaceRequest = new EnhanceFaceRequest($argv);
        }else if($type==6){
            $faceBeautyRequest = new FaceBeautyRequest($argv);
        }else if($type==7){
            $faceMakeupRequest = new FaceMakeupRequest($argv);
        }else if($type==8){
            $faceFilterRequest = new FaceFilterRequest($argv);
        }else if($type==9){
            $faceTidyupRequest = new FaceTidyupRequest($argv);
        }
        $runtime = new RuntimeOptions([]);
        try {
            // 复制代码运行请自行打印 API 的返回值
            //这里的type判断,跟上面的一样,也是为了实现不同的特效,接收返回的结果,你也可以把不需要的特效删除,$type是调用这个类传过来的
            if($type==1){
                $resp=$client->generateHumanAnimeStyleWithOptions($generateHumanAnimeStyleRequest, $runtime);
            }else if($type==2){
                $resp=$client->retouchSkinWithOptions($retouchSkinRequest, $runtime);
            }else if($type==3){
                $resp=$client->liquifyFaceWithOptions($liquifyFaceRequest, $runtime);
            }else if($type==4){
                $resp=$client->generateHumanSketchStyleWithOptions($generateHumanSketchStyleRequest, $runtime);
            }else if($type==5){
                $resp=$client->enhanceFaceWithOptions($enhanceFaceRequest, $runtime);
            }else if($type==6){
                $resp=$client->faceBeautyWithOptions($faceBeautyRequest, $runtime);
            }else if($type==7){
                $resp=$client->faceMakeupWithOptions($faceMakeupRequest, $runtime);
            }else if($type==8){
                $resp=$client->faceFilterWithOptions($faceFilterRequest, $runtime);
            }else if($type==9){
                $resp=$client->faceTidyupWithOptions($faceTidyupRequest, $runtime);
            }
            return $resp;
        }
        catch (Exception $error) {
            if (!($error instanceof TeaError)) {
                $error = new TeaError([], $error->getMessage(), $error->getCode(), $error);
            }
            // 如有需要,请打印 error
            $resp=Utils::assertAsString($error->message);
            return $resp;
        }
    }
}




2.编写调用这个类的方法

    /*
     *人像动漫化
     */
    public function generateHumanAnime()
    {
        // 获取参数
        $params=$this->params;
        //$params['type']是前端传过来的参数,例如:anime代表日漫风,handdrawn代表手绘风等等
        //$params['url']是前端传过来的oss地址,且oss必须为上海地区的。本地图片的我没试
        $argv=([
            "algoType" => $params['type'],
            "imageURL" => $params['url']
        ]);
        $resp=$this->main(1,$argv);
        if(empty($resp->body)){
            //调用失败的话,可以自行打印$resp的内容
            //return_msg是我自己定义的一个方法,用于返回统一的格式
            $this->return_msg(400,'请求失败');
        }else{
            //调用成功,第一步的方法里$resp会返回下面两个字段:imageURL和requestId,如果生成的图片有问题,可以凭借requestId去联系阿里云的客服,他们会给你详细的解答
            $data['imageURL']=$resp->body->data->imageURL;
            $data['requestId']=$resp->body->requestId;
            $this->return_msg(200,'请求成功',$data);
        }

    }

最后:这个功能是闲来无事自己摸索出来的,如果有表述不对的地方,还请指出,谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值