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
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: thinkphp6框架可以通过以下步骤实现调用百度翻译API的功能示例。 1. 注册百度翻译API账号并获取API Key和Secret Key。 首先,我们需要在百度翻译API官网进行注册,并获得API Key和Secret Key。这些信息将在后续的代码中使用。 2. 安装并配置百度翻译API扩展。 下载并安装thinkphp6框架的百度翻译API扩展包。安装完成后,在项目的配置文件中进行相关配置,包括API Key、Secret Key和API请求地址等。 3. 创建翻译功能的控制器和视图文件。 在thinkphp6框架中,创建一个翻译控制器,并在控制器中定义一个翻译方法。在对应的视图文件中,设计一个页面用于输入需要翻译的文本并显示翻译结果。 4. 在翻译方法中调用百度翻译API。 在翻译方法中,首先获取用户输入的翻译内容,然后使用百度翻译API扩展中提供的方法进行翻译。具体调用方式为将API Key、Secret Key和翻译内容作为参数传递给API扩展的翻译方法。 5. 显示翻译结果。 在翻译方法中得到翻译结果后,将其传递给视图文件进行显示。 通过以上步骤,我们可以在thinkphp6框架中实现调用百度翻译API的功能。这个功能可以用来实现多语言网站、在线翻译工具等应用场景。 ### 回答2: 要使用thinkphp6框架实现调用百度翻译API功能,首先需要在配置文件config/baidu.php中配置百度翻译API的app_id和app_secret。可以在百度翻译开放平台申请一个API账号,并获取到这些信息。 接下来,在控制器中创建一个Translate控制器,并在该控制器的index方法中实现调用百度翻译API的功能。具体代码如下: ``` <?php namespace app\controller; use think\facade\Config; use think\facade\Http; class Translate { public function index() { // 获取百度翻译API的配置 $appId = Config::get('baidu.app_id'); $appSecret = Config::get('baidu.app_secret'); // 获取要翻译的文本 $query = '你好'; // 调用百度翻译API $url = 'https://fanyi-api.baidu.com/api/trans/vip/translate'; $params = [ 'q' => $query, 'appid' => $appId, 'salt' => time(), 'sign' => md5($appId . $query . $params['salt'] . $appSecret), ]; $response = Http::get($url, $params); // 解析翻译结果 $result = json_decode($response, true); if ($result && isset($result['trans_result'][0]['dst'])) { $translation = $result['trans_result'][0]['dst']; return '翻译结果:' . $translation; } else { return '翻译失败'; } } } ``` 以上代码中,首先通过Config::get方法获取配置文件中的百度翻译API的app_id和app_secret。然后,设置要翻译的文本$query,并构造调用百度翻译API的请求参数$params。语言方向、接口地址和参数签名等信息都在API文档中有详细说明。接着,使用Http::get方法发送GET请求,并获取到百度翻译API的响应。最后,解析响应中的翻译结果,并返回给用户。 需要注意的是,以上代码只是一个简单的示例,实际项目中可能还需要加入异常处理、多语种翻译支持等功能。 ### 回答3: 在ThinkPHP6框架中调用百度翻译API功能的示例如下: 首先,需要在ThinkPHP6项目中安装百度翻译API的SDK包,可以通过Composer命令进行安装: ``` composer require "baidu/baidu_translate_php_sdk" ``` 安装完成后,需要在项目中引入百度翻译的SDK文件,并配置好相关的参数。可以在config目录下新建一个BaiduTranslate.php配置文件,将以下代码添加进去: ```php <?php return [ 'app_id' => '你的百度翻译APPID', 'app_secret' => '你的百度翻译SecretKey', 'api_url' => 'http://api.fanyi.baidu.com/api/trans/vip/translate', ]; ``` 接下来,在控制器中编写调用百度翻译API的方法。假设我们在Index控制器中编写一个translate方法,代码如下: ```php <?php namespace app\controller; use think\facade\Config; use think\facade\Request; use BaiduTranslate\TranslationFacade; class Index { public function translate() { // 获取待翻译的文本 $text = Request::param('text'); // 获取百度翻译配置文件中的参数 $appId = Config::get('baidu_translate.app_id'); $secretKey = Config::get('baidu_translate.app_secret'); $apiUrl = Config::get('baidu_translate.api_url'); // 调用百度翻译API进行翻译 $result = TranslationFacade::translate($text, $appId, $secretKey, $apiUrl); return $result; } } ``` 在上述代码中,我们使用 `Request::param('text')` 获取用户输入的待翻译文本,然后通过 `Config::get()` 方法获取配置文件中的百度翻译参数,并将这些参数传递给 `TranslationFacade::translate()` 方法进行翻译操作。最后,将翻译结果返回给前端。 通过这样的方式,我们可以在ThinkPHP6框架中实现调用百度翻译API的功能。当用户输入待翻译的文本时,系统将自将其发送给百度翻译API进行翻译,并将翻译结果返回给用户。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值