阿里云 facechanin 人像写真大模型 API 实践

文章目录

前言

在之前的文章中实践了阿里云的文字转语音大模型,感觉还是挺有意思的,效果也挺不错的,感兴趣的可以看下阿里云 CosyVoice 语音合成大模型 API 实践,今天我们来尝试下通义万像的人像写真功能,先看下我生成的效果图,上边一行是我自拍照片,下边是我使用官方预设模板生成的写真图:

阿里云 API 实践流程

  1. 开通灵积服务,获得API-KEY;
  2. 通过"申请体验"申请FaceChain人物写真生成体验权限,并获得通过;
  3. 开发调用人物图像检测API,进行用户上传图像的质量校验,非必选链路,可以用于产品中进行前置校验,及时提醒用户更换质量不合格的图像。详情参考人物图像检测API详情
  4. 图像文件打包,上传并管理文件,详情参考模型定制文件管理服务
  5. 开发调用人物形象训练API,进行自定义人物的模型定制,并获得定制模型ID。详情参考人物形象训练API详情
  6. 基于已经训练完成的定制模型ID,开发调用人物写真生成API,选择目标风格模板,发起请求并获得写真结果。详情参考人物写真生成API详情

这里不对阿里云的通义万像进行赘述,感兴趣的可以查看官方文档说明,本文重在说明实战步骤,和中间需要注意的一些地方。

开通模型定制文件管理服务

如果我们没有开通阿里云的 OSS ,我们可以使用这个官方提供的免费的模型定制文件管理服务,将我们需要训练的图片上传上去,在后边的 API 中需要用到这些图片的路径。

上传文件

为了简单,我使用了 Postman 来上传训练文件,对应的 curl 请求如下,读者需要将其中的 key 替换为自己开通的 API-KEY.

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/files' \
--header 'Content-type: multipart/form-data' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=d7b5f687-f2ad-97a8-af18-28e1768ebf51d8779708fdadc47b647bffc5851da154' \
--form 'files=@"/C:/Users/14170/Pictures/1.jpg"' \
--form 'descriptions="我的证件照"'

上传成功后会返回文件 id.

查询文件列表

postman 对应 curl 请求如下:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/files?page_no=1&page_size=10' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=d7b5f687-f2ad-97a8-af18-28e1768ebf51d8779708fdadc47b647bffc5851da154'

查询成功会返回上传文件的信息,这里的 url 比较重要,后边我们在训练图像和生成写真的时候都会用到。

还有获取指定文件信息和删除文件的接口,因为我们暂时用不到就不在这里赘述了,感兴趣的同学可以查看下官网:模型定制文件管理服务接口说明

人物图像检测(非必须)

对用户上传的人物图像进行检测,判断其中所包含的人脸是否符合facechain微调所需的标准,检测维度包括人脸数量、大小、角度、光照、清晰度等多维度,支持图像组输入,并返回每张图像对应的检测结果。

该步骤不是必须的,但是在生成写真前,建议检测下,这样可以保证我们生成的图片更加符合我们的预期。

为了简单点,这里直接使用 Postman 调用检测,在实际的项目中,一般是使用代码请求检测。

Postman 对应 curl 请求:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/vision/facedetection/detect' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=bf7b1f86-a4e8-98d0-9747-b4c36b64b013c98e2ba3e95bd8c2ef49422d9b383e00' \
--data '{
    "model": "facechain-facedetect",
    "input": {
        "images": ["http://dashscope-file-mgr.oss-cn-beijing.aliyuncs.com/api-fs/1730896533425448/131337/51791846-324a-4e1a-9b12-f9e37847d897/1.jpg?Expires=1719733342&OSSAccessKeyId=LTAI5tHvsJDXf7ndvNyYzVYD&Signature=mxa3PUF83okXvOZ8H977kPz9nSg%3D"]
    }
}'
  • 请求参数中的 images 路径就是我们前边上传的文件路径
  • 当图片检测通过后,会返回 true, 不通过 false

人物形象训练

对上传的图像压缩包进行模型训练,从而获得该图像中对应人物的resource,基于该resource可以实现人物的写真生成。

人物形象训练是人物写真生成的前置环节,只有在针对某人物进行形象训练并成功获得形象resource后,才可基于此进行生成。

这里调用训练 API 算法比较耗时,接口是异步提交的,提交成功后会返回一个 JOB id, 并且显示状态为 pending 状态,curl 请求如下:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=bf7b1f86-a4e8-98d0-9747-b4c36b64b013c98e2ba3e95bd8c2ef49422d9b383e00' \
--data '{
    "model": "facechain-finetune",
    "training_file_ids": [
        "http://dashscope-file-mgr.oss-cn-beijing.aliyuncs.com/api-fs/1730896533425448/131337/51791846-324a-4e1a-9b12-f9e37847d897/1.jpg?Expires=1719733342&OSSAccessKeyId=LTAI5tHvsJDXf7ndvNyYzVYD&Signature=mxa3PUF83okXvOZ8H977kPz9nSg%3D"
    ]
}'

解下来我们通过 job_id 查询训练任务状态, curl 请求如下:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/fine-tunes/<job_id>' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=66b92c11-fe4e-98e8-9c82-7f46c3fd0e1272d64a17883e374b93f3f92000930ed8' \
--data ''

看到任务状态为成功后,我们就可以执行下一步操作了,否则记得要轮训查询任务状态,知道任务成功或者失败。

人物写真生成

当我们的图像训练完成后,我们就可以执行任务写真生成的接口了,这里官方提供了两种生成方式:

  • 预设模版,就是官方提供了一些模板风格,目前已有的风格模板如下:

  • 用户自定义模板,如果使用自定义模板,我们在生成写真的时候就得多提供一个模板图片的信息。

    用户输入图像:

    自定义模板图像:

    生成结果:

预设模板生成

生成写真

curl 请求:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/album/gen_potrait' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <PI-KEY>' \
--header 'X-DashScope-Async: enable' \
--header 'Cookie: acw_tc=66b92c11-fe4e-98e8-9c82-7f46c3fd0e1272d64a17883e374b93f3f92000930ed8' \
--data '{
    "model": "facechain-generation",
    "resources": [
        {
            "resource_id": "facechain-finetune-ft-202406291705-a5cb",
            "resource_type": "facelora"
        }
    ],
    "style": "f_business_male",
    "parameters": {
        "size": "512*512",
        "n": 4
    }
}'
  • 请求参数 headers 中加了一个参数 'X-DashScope-Async: enable'表明该接口是异步提交的,因为生成任务比较耗时,建议异步提交
  • Body 参数说明:
    • model: 人物生成大模型名称,默认就填 facechain-generation
    • resources:生成人物所需资源信息,就是我们前边训练人物图像成功后,查询状态返回的finetuned_output内容。
    • style: 官方预设模板风格名称:
      • f_idcard_male(证件照男)
      • f_business_male(商务写真男)
      • f_idcard_female(证件照女)
      • f_business_female(商务写真女)
      • m_springflower_female(春日花园)
      • f_summersport_female(夏日运动)
      • f_autumnleaf_female(秋日印象)
      • m_winterchinese_female(冬日国风)
      • f_hongkongvintage_female(港风复古)
      • f_lightportray_female(轻写真)
    • parameters:生成图像像素大小和数量信息。

查询任务状态

curl 请求:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/tasks/f90e4f68-62a1-4f31-94a5-bf2fb322568a' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=072c1394-8a2e-985c-9d43-9d59e010bf5485059e275f65ef49e7f3c45f5bb2e6e2'

可以看到我们的任务执行失败了,失败原因是我选择的官方模板:证件照男,不符合默认尺寸要求,接下来我重新选择一个新的官方模板:f_business_male 商务写真男,并且重新执行下生成写真请求,curl 请求如下:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/tasks/f90e4f68-62a1-4f31-94a5-bf2fb322568a' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'Cookie: acw_tc=072c1394-8a2e-985c-9d43-9d59e010bf5485059e275f65ef49e7f3c45f5bb2e6e2'

我们看下生成的效果:

上边是我以前的一张证件照,下边是AI 帮我生成的两张简单写真,可以发现还是有几分相似的,我如果训练的时候多加几张照片,效果可能会更好。

下边是我使用三张照片训练后使用官方模板生成的照片,基本上和我本人已经很像了:

自定义模板生成

可惜官方没有彭于晏的8块腹肌的模板,我在网上找了下8块腹肌的照片,下边我们使用这张照片来当模板看下效果如何。

首先调用前边的文件管理服务将我们的模板照片上传上去。

自定义模板生成和预设模板生成用的都是同一个接口,参数不同,curl 请求如下, 我们只需要将 style 改为 portrait_url_template 然后再将模板 URL 写入 input 参数即可:

sql 复制代码
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/album/gen_potrait' \
--header 'Content-type: application/json' \
--header 'Authorization: Bearer <API-KEY>' \
--header 'X-DashScope-Async: enable' \
--header 'Cookie: acw_tc=a044e7aa-b3a5-9a80-a6d4-c731acda9490973cf5437b00fae8372365086ecce321' \
--data '{
    "model": "facechain-generation",
    "resources": [
        {
            "resource_id": "facechain-finetune-ft-202406291821-638c",
            "resource_type": "facelora"
        }
    ],
    "input": {
        "template_url": "http://dashscope-file-mgr.oss-cn-beijing.aliyuncs.com/api-fs/1730896533425448/131337/0ea35648-7b88-4cee-9b76-081ded04edd8/9.png?Expires=1719745944&OSSAccessKeyId=LTAI5tHvsJDXf7ndvNyYzVYD&Signature=cXQC8u5cwQq%2B5iaLcOKXErBClU0%3D"
    },
    "parameters": {
        "style": "portrait_url_template",
        "size": "768*1024",
        "n": 4
    }
}'

查看效果,哈哈哈虽然和我不太像,但是还是很爽的:

总结

因为我训练使用我的照片太少了,导致和我不能特别像,但是根据区区几张照片有这个相似度已经很厉害了,同学们可以尝试多上传点照片至文件服务里,然后在训练的时候多用几张照片训练下,效果应该会比我这个更好。

上边我为了简单,直接使用 Postman 调用的 API 接口,我们可以将它做成接口封装成小程序,给身边的亲朋好友show 一把,让他们也体验 AI 带来的乐趣,学会分享才会快乐。

我可以将其整个逻辑封装为 Python 脚本,给大家使用,这里我就偷下懒,就不写了,有需要的小伙伴可以在评论告诉我,我把脚本写好发给你。

相关推荐
小的~~34 分钟前
大数据面试题之数据库(2)
大数据·数据库
迅腾文化39 分钟前
品牌推广的深层逻辑:自我提升与市场认同的和谐共生
大数据·人工智能·物联网·信息可视化·媒体
仙魁XAN3 小时前
AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理
ai·transformer·agi·编码器·hugging face
迅狐源码工厂3 小时前
视频号矩阵管理系统:短视频内容营销的智能助手
大数据·人工智能·矩阵
寰宇视讯3 小时前
新疆水博会将举办多场高端论坛探析水利科技创新发展
大数据·科技
我非夏日3 小时前
基于Hadoop平台的电信客服数据的处理与分析③项目开发:搭建基于Hadoop的全分布式集群---任务6:安装并配置Hadoop
大数据·hadoop·分布式
白鲸开源4 小时前
8分钟带你快速了解Connector/Catalog API的核心设计
大数据
concisedistinct4 小时前
大数据开发语言 Scala(四):面向对象编程
大数据·开发语言·后端·scala·编程语言·面向对象
Baihai IDP4 小时前
Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型
人工智能·ai·llm·llama·白海科技·大模型评估
猫猫爱吃小鱼粮4 小时前
58、Flink 的项目配置使用 Maven 详解
大数据·flink·maven