最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”

互联网时代,日新月异的技术更迭让大众的娱乐方式变得更加多元化。越来越多线上娱乐体验成为新潮流,不少公司各出奇招,推出了AI人像特效、VR游景点、可交互影视剧、元宇宙等;人们花在线上娱乐体验的时间越来越多,也越来越愿意为泛娱乐体验相关的产品服务买单。

以AI人像特效为例,现实情况是,大部分新颖的玩法背后都面临困境,或是创意公司缺乏开发能力,或者中小企业缺乏高易用性、高性价比的AI产品服务。那么,是否有更智能、简化的方式赋能企业、开发者打造泛娱乐产品服务呢?

通过调研市场上现有的能力,发现腾讯云AI推出的人像变换非常有趣,可以选择API、SDK等多种接入方式;里面包含年龄变换、性别转换、人像渐变、动漫化等能力,每个基础能力既可单独使用,也能组合使用。

接下来我将尝试用年龄变换和人像渐变能力制作一种“年龄渐变“的视觉感受,此类玩法可以用在一些老少皆宜的宣传广告,或者个人成长的特效体验上。

1. 准备工作

在试用云服务前,应该有一些准备工作要做,比如了解这个产品的效果能否令人满意、费用是否实惠、服务需不需要开通等。

1.1 体验效果

为了决定是否使用这个服务的能力,我想体验下这个效果。看了下产品首页有demo体验功能,还挺详细的,支持各种参数调节,且拖拽式的实时效果展示。

Demo体验网址:人像变换_人脸年龄变换_人脸性别变换_人脸特征编辑-腾讯云

 

1.2 了解计费方式

在正式试用之前,我也想了解下他的计费规则。万一收费很贵那试用就要慎重了,但是好在官网页面上有明确的购买计费方式,且有免费额度的说明,看上去可以放心使用了。

 

这里的计费模式我也研究了下,大体的意思是说:

(1)人像变换下的所有产品每个月会有1000次免费调用额度。

(2)预付费调用方式,提前买好不同量级的资源包,调用时会进行抵扣。偶尔会有优惠活动,且资源包一年有效,这个月用不完下个月用。

(3)后付费调用方式,没有买资源包或资源包消耗完会根据后付费规则计费。

(4)扣减顺序为 免费资源包->预付费资源包->后付费 。

 

1.3 开通人像变换服务

正式使用人像变换服务好像要开通下现有服务,和腾讯云其他产品比较像。点击下开通即可。

 

1.4 获取API调用秘钥

访问管理里可以获取到当前账号的SecretId和SecretKey,以便于后面调用云服务的前面验证。这个一定要保管好,泄露出去有被人盗刷的风险。已废弃或者有暴露风险的Secret也可以禁用,最大程度降低风险。

 

2. API调用

2.1 查看接口文档

API文档选项栏里可以看到各个接口的参数说明,以下以人脸年龄变换和人像变换举例。

2.1.1 人脸年龄变换

人脸年龄变换的接口文档里有输入参数和输出参数两部分,输入参数就是我们要传进去的内容,一般是图片。输出参数就是接口的返回,一般是结果图片。

输入参数里还包含公共参数,这部分一般是用于签名的,请求包体里一般不用带上。

这里的RequestId要记得日志打印,后面有服务相关的问题可以提供这个信息来定位。

 

2.1.2 人像渐变

人像渐变的接口和变年龄等同步接口有所不同,是一种异步处理的方式。

(1)人像渐变:创建一个人像渐变的处理任务,其中可以指定处理参数之类的;

(2)查询人像渐变任务:查询任务处理的结果,用于后面轮询查结果看看有没处理完;

(3)撤销人像渐变任务:取消任务。

JobId是标识任务状态的关键,整个程序pipeline里这个变量要记录好。

2.2 自动生成代码

腾讯云接口大部分都支持一个叫API Explorer的工具,可以在上面自动生成代码,同时也配备有签名调试工具。

代码生成:不同语言的SDK调用代码,比较实用,基本上贴过来改改就可以用了。

在线调用:模拟一次真实调用,可以指定所有参数,测试一些demo页不支持的参数也行。

签名串生成:如果打算自己拼接API签名来调用,可以把自己的签名结果和这里的对比下,但是API签名整体比较复杂不太推荐用这种方式。

2.3 调试验证

以python语言为例,把上面的代码拷下来基本就可以跑了。下面以在线SDK调用为例。

2.3.1 下载SDK

官网文档上可以看到有多种不同语言版本的SDK,我这里选了python来开发体验效果。

点开的git项目README,有对应语言更详细的安装方法。

2.3.2 粘贴生成的代码稍作修改

import json
import base64
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.ft.v20200304 import ft_client, models

# 读一个本地测试文件转换为base64编码
f = open('./test.png', 'rb')
base64_data = base64.b64encode(f.read())

try:
    # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
    cred = credential.Credential("YourSecretId", "YourSecretKey")	# 传入自己的秘钥
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "ft.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = ft_client.FtClient(cred, "ap-guangzhou", clientProfile)

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.ChangeAgePicRequest()
    params = {
        "Image": base64_data.decode("utf-8"),   # python里的bytes类型要转成string才可使用
        "AgeInfos": [
            {
                "Age": 40	# 可以测试不同的年龄看效果
            }
        ],
        "RspImgType": "url"
    }
    req.from_json_string(json.dumps(params))

    # 返回的resp是一个ChangeAgePicResponse的实例,与请求对象对应
    resp = client.ChangeAgePic(req)
    # 输出json格式的字符串回包
    print(resp.to_json_string())

except TencentCloudSDKException as err:
    print(err)

可以看到效果还是不错的。

 

3. 玩法升级

3.1 组合变年龄与渐变

了解了下,人像变换产品下还有很多其他有意思的能力,我在想这些能力如果可以组合一下,应该会很有意思。比如人脸年龄变换+人像渐变,应该可以做成年龄渐变的效果。

3.1.1 将云服务接口调用包在函数里

因为python是脚本语言,先将服务改为函数的形式,便于后面组合调用。

# 变年龄
def change_age(client, img, age):
    req = models.ChangeAgePicRequest()
    params = {
        "Image": img.decode("utf-8"),   # python里的bytes类型要转成string才可使用
        "AgeInfos": [
            {
                "Age": int(age)
            }
        ],
        "RspImgType": "base64"
    }
    req.from_json_string(json.dumps(params))
    resp = client.ChangeAgePic(req)
    return resp

同理,可以把其他功能也包一下。

3.1.2 异步类接口的使用

因为人像渐变是一种异步类接口,即调用时不能立即返回结果,一般是通过某些标识ID来区分每次调用。当后面我们要查结果时可以用这个标识ID来跟踪结果。常采用轮询的方式,即我们在获取到整体流程的JobId后隔一段固定的时间,比如2s,再调用查询结果接口,看看结果已经处理完了就收取,没有处理完就继续循环。

 

3.1.3 最终代码

将人像渐变和年龄变换的调用组合起来。

import json
import sys
import time
import base64
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.ft.v20200304 import ft_client, models

# 读一个本地测试文件转换为base64编码
def read_file(filename):
    f = open(filename, 'rb')
    base64_data = base64.b64encode(f.read())
    return base64_data

# 变年龄
def change_age(client, img, age):
    req = models.ChangeAgePicRequest()
    params = {
        "Image": img.decode("utf-8"),   # python里的bytes类型要转成string才可使用
        "AgeInfos": [
            {
                "Age": int(age)
            }
        ],
        "RspImgType": "base64"
    }
    req.from_json_string(json.dumps(params))
    resp = client.ChangeAgePic(req)
    return resp

# 人像渐变
def morph_face(client, imgs):
    req = models.MorphFaceRequest()
    params = {
        "Images": imgs,
        # 更多细节可通过参数调节
        # "GradientInfos": [
        #     {
        #         "Tempo": 1,
        #         "MorphTime": 1
        #     }
        # ],
        "Fps": 25
    }
    req.from_json_string(json.dumps(params))
    resp = client.MorphFace(req)
    print(resp.to_json_string())
    return resp

# 查询人像渐变结果
def query_morph_face(client, job_id):
    req = models.QueryFaceMorphJobRequest()
    params = {
        "JobId": job_id
    }
    req.from_json_string(json.dumps(params))
    resp = client.QueryFaceMorphJob(req)
    print(resp.to_json_string())
    return resp


try:
    # 实例化一个认证对象,入参需要传入腾讯云账户secretId,secretKey,此处还需注意密钥对的保密
    # 密钥可前往https://console.cloud.tencent.com/cam/capi网站进行获取
    cred = credential.Credential("YourSecretId", "YourSecretKey")
    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "ft.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = ft_client.FtClient(cred, "ap-guangzhou", clientProfile)

    # 读取图片
    data = read_file(sys.argv[1])

    ages = [20, 30, 40, 50, 60]

    # 批量变年龄
    imgs = []
    for age in ages:
        resp=change_age(client, data, age)
        imgs.append(resp.ResultImage)

	# 将图片集合起来调人像渐变
    resp = morph_face(client, imgs)
    job_id = resp.JobId

    # 轮询查结果
    resp=query_morph_face(client, job_id)
    while resp.JobStatusCode != 7:
        resp=query_morph_face(client, job_id)
        time.sleep(2)
   

except TencentCloudSDKException as err:
    print(err)

3.2 调参优化效果

变年龄和渐变都支持一定程度的算法效果调整,我也是在尝试不同的效果后选一个最佳组合。

 

 

4. 查看调用情况

4.1 查接口调用量

控制台页面可以看到对应的调用情况,这个调用量是包含预付费资源包和后付费在内的所有调用量。

 

4.2 查资源包扣减情况

资源包管理页面可以看到预付费资源包扣减的情况。由于我没花钱买资源包,所以当前只有免费资源包。但是对于测试效果来说的话基本是足够了。

了解更多腾讯云AI人像变化能力:人像变换_人脸年龄变换_人脸性别变换_人脸特征编辑-腾讯云

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值