阿里云 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 脚本,给大家使用,这里我就偷下懒,就不写了,有需要的小伙伴可以在评论告诉我,我把脚本写好发给你。

相关推荐
kong790692812 分钟前
大数据的特征和数据分析
大数据·数据挖掘·数据分析
灯下夜无眠15 分钟前
spark集群文件分发问题
大数据·分布式·spark
做人不要太理性25 分钟前
【Linux系统】ext2文件系统
大数据·linux·操作系统·文件系统
IT机器猫29 分钟前
ES基础一
大数据·elasticsearch·搜索引擎
TDengine (老段)29 分钟前
TDengine 统计函数 VAR_SAMP 用户手册
大数据·数据库·物联网·概率论·时序数据库·tdengine·涛思数据
黄焖鸡能干四碗1 小时前
制造企业工业大数据平台建设方案
大数据·数据库·安全·制造
Elastic 中国社区官方博客1 小时前
EDB EPAS 通过 PostgreSQL 连接器同步数据到 Elasticsearch
大数据·数据库·人工智能·elasticsearch·搜索引擎·postgresql·全文检索
皮皮学姐分享-ppx1 小时前
中国绿色制造企业数据(绿色工厂|绿色供应链|绿色园区|绿色产品,2017-2023)
大数据·人工智能·经验分享·科技·区块链·制造
T06205141 小时前
【面板数据】上市公司颠覆性技术创新数据(2000-2023年)
大数据
档案宝档案管理2 小时前
档案管理效率低?档案管理系统如何实现从“人工管档”到“智能管档”?
大数据·数据库·人工智能·档案·档案管理