首页 > 其他分享 >阿里云 facechanin 人像写真大模型 API 实践

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

时间:2024-07-02 09:30:52浏览次数:20  
标签:header facechanin 生成 -- API 写真 curl 模板

文章目录

前言

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

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="我的证件照"'

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

查询文件列表
postman 对应 curl 请求如下:

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'

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

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

人物图像检测(非必须)

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

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

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

Postman 对应 curl 请求:

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"]
    }
}'

image.png

  • 请求参数中的 images 路径就是我们前边上传的文件路径
  • 当图片检测通过后,会返回 true, 不通过 false

人物形象训练

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

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

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

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"
    ]
}'

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

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 ''

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

人物写真生成

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

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

    image.png

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

    用户输入图像:
    image.png
    自定义模板图像:
    image.png
    生成结果:
    image.png

预设模板生成

生成写真

curl 请求:

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
    }
}'

image.png

  • 请求参数 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 请求:

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'

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

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'

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

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

自定义模板生成

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

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

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

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
    }
}'

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

总结

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

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

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

标签:header,facechanin,生成,--,API,写真,curl,模板
From: https://blog.csdn.net/qq_42586468/article/details/140091711

相关文章

  • Apipost接口测试工具的原理及应用详解(四)
    本系列文章简介:        随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为软件开发过程中不可或缺的一环。在众多API测试工具中,Apipost......
  • Apipost接口测试工具的原理及应用详解(五)
    本系列文章简介:        随着软件行业的快速发展,API(应用程序编程接口)作为不同软件组件之间通信的桥梁,其重要性日益凸显。API的质量直接关系到软件系统的稳定性、性能和用户体验。因此,对API进行严格的测试成为软件开发过程中不可或缺的一环。在众多API测试工具中,Apipost......
  • 使用 Amazon Bedrock Converse API 简化大语言模型交互
    本文将介绍如何使用AmazonBedrock最新推出的ConverseAPI,来简化与各种大型语言模型的交互。该API提供了一致的接口,可以无缝调用各种大型模型,从而消除了需要自己编写复杂辅助功能函数的重复性工作。文中示例将展示它相比于以前针对每个模型进行独立集成的方式,具有更简单的实......
  • 免费节假日 API 接口
    转载地址:http://timor.tech/api/holiday获取指定日期的节假日信息接口地址:http://timor.tech/api/holiday/info/$date@params$date:指定日期的字符串,格式‘2018-02-23’。可以省略,则默认服务器的当前时间。@returnjson:如果不是节假日,holiday字段为null。12345......
  • 利用阿里云API获取实时天气信息|C语言Linux网络编程练手小项目
    文章目录目录文章目录前言一、HTTP数据请求1.HTTP概述2.数据请求方式3.JSON格式二、阿里云API获取,使用1.购买(白嫖)API接口步骤2.API使用代码编写3.编译程序 4.运行结果总结前言在项目开发时常常需要显示各种信息,如时间、天气、温度、空气质量指数等等。在......
  • 使用Vue 3和Axios从第三方API获取异步数据并展示
    在前端开发中,从第三方API获取数据并动态展示是非常常见且重要的需求之一。今天我们将深入探讨如何使用Vue3和Axios从第三方API获取异步数据并将其展示在页面上。通过这个例子,你将了解如何在Vue3中集成Axios,如何进行异步请求,以及如何动态地将数据绑定到模板以实......
  • WebApi读取配置文件帮助类
    1///<summary>2///appsettings.json操作类3///</summary>4publicclassAppSettings5{6staticIConfigurationConfiguration{get;set;}7staticstringcontentPath{get;set;}89p......
  • 使用Swagger 3注解编写API文档详解
    在现代软件开发中,API文档的编写是至关重要的一环,它不仅能帮助开发者理解和正确使用API,还能提升团队协作效率。Swagger3是一个流行的API文档规范,通过注解的方式可以清晰地定义API的各个方面。本文将深入探讨Swagger3中常用的注解及其使用方法。@OpenAPIDefinition和@Inf......
  • vue前端项目补充API设计、安全性、状态管理、前端路由等功能
    为了完善前端项目,我们需要考虑API设计、安全性、状态管理和前端路由等方面。以下是如何集成这些功能的基本步骤。API设计定义API接口:根据后端服务提供的API,在前端项目中定义相应的接口函数。使用axios或其他HTTP客户端库来发送请求。封装API请求:创建一个服务模块......
  • 简单实现Ai音乐suno-api
    本文由ChatMoney团队出品前言在科技与艺术的交汇处,AI音乐创作正以其独特的魅力,引领着音乐产业的一次革命。不久前,AI音乐的浪潮席卷了整个创意领域,激发了无数音乐爱好者和技术开发者的无限想象。在这场音乐与科技的盛宴中,主流的AI音乐平台suno无疑成为了焦点,尽管它尚未对外开放A......